名称 | 类型 |
application | javax.servlet.ServletContext |
config | javax.servlet.ServletConfig |
out | javax.servlet.jsp.JspWriter |
page | java.lang.Object |
pageContext | javax.servlet.jsp.PageContext |
request | javax.servlet.http.HttpServletRequst |
response | javax.servlet.http.HttpServletResponse |
session | javax.servlet.http.HttpSession |
exception | java.lang.Throwable |
详细解释:
1.out 常用方法:
void clear() //清除缓冲区的内容
void clearBuffer() //清除缓冲区的当前内容
void flush() //清空流
int getBufferSize() //返回缓冲区以字节数的大小,如不设缓冲区则为0
int getRemaining() //返回缓冲区还剩余多少可用
boolean isAutoFlush() //返回缓冲区满时,是自动清空还是抛出异常
void close() //关闭输出流
举列子:(out和response的区别)
因为 out.write() 和<%= %> 和 response.getWriter().write() 都能实现输出的作用
举列:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>Out和其他的方法</title>
</head>
<body>
然后我是第二个输出
<%
out.write("我是第三");
response.getWriter().write("我先输出");
//只有他是最有先输出(使用了response缓冲区)
// 其他依次输出(相当于使用同一个out的缓冲区)
%>
<%="我第四"
%>
</body>
</html>
输出:
原理:
Tomcat先从response缓冲区获取内容 然后 再从out缓冲区获取内容(默认8kb)
也可以进行设置关闭掉out缓冲区
<%@ page contentType="text/html;charset=UTF-8" buffer="none" %>或者
<%@ page contentType="text/html;charset=UTF-8" buffer="0kb" %>
然后out缓冲区就没有了 只能全部存储到response缓冲区了
代码:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page contentType="text/html;charset=UTF-8" buffer="none" %>
<html>
<head>
<title>Out和其他的方法</title>
</head>
<body>
然后我是第二个输出
<%
out.write("我是第三 ");
response.getWriter().write(" 我先输出");
//只有他是最有先输出(使用了response缓冲区)
// 其他依次输出(相当于使用同一个out的缓冲区)
%>
<%="我第四"
%>
</body>
</html>
运行结果:
原理图:
因为out缓冲区关闭了,或者是空间不够了,只能把数据存入response缓冲区了
2.pageContext jsp上下文对象,
常用方法:
//默认是page域下的:
setAttribute(String name,Object obj) //设置属性的属性值
getAttribute(String name) //返回给定名的属性值
removeAttribute(String name) //删除属性及其属性值
//pageContext 还可以向指定域获取数据
setAttribute(String name,Object obj,int scope) //设置某个域下的属性的属性值
getAttribute(String name,int scope)//返回某个域下的定名的属性值
removeAttribute(String name,int scope) //删除某个域下的属性及其属性值
findAttribute(String name) //以此从小到大范围搜索
分别获取page域 request域 session域 application域
//还能获取剩余的8大隐式对象
getException //方法返回exception隐式对象
getPage //方法返回page隐式对象
getRequest //方法返回request隐式对象
getResponse //方法返回response隐式对象
getServletConfig //方法返回config隐式对象
getServletContext //方法返回application隐式对象
getSession //方法返回session隐式对象
getOut //方法返回out隐式对象
举例代码:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>pageContext方法</title>
</head>
<body>
<%
//PageContext.PAGE_SCOPE = 1
//PageContext.REQUEST_SCOPE = 2
//PageContext.SESSION_SCOPE = 3
//PageContext.APPLICATION_SCOPE = 4
//不写后面的域 分别使用 page域(1) request域(2) session域(3) application域(4)
pageContext.setAttribute("aaa","不废话快上车1111");//这 PAGE_SCOPE 域下的
request.setAttribute("aaa","不废话快上车2222"); //这 REQUEST_SCOPE 域下的
session.setAttribute("aaa","不废话快上车3333"); //这 SESSION_SCOPE 域下的
application.setAttribute("aaa","不废话快上车4444"); //这 APPLICATION_SCOPE 域下的
//写后面的域 全用pageContext.setAttribute(string name,Object obj,int scope)
pageContext.setAttribute("bbb","PAGE_SCOPE(1)",1); //默认不写 PAGE_SCOPE 域下的
pageContext.setAttribute("bbb","REQUEST_SCOPE(2)",2);
pageContext.setAttribute("bbb","SESSION_SCOPE(3)",3);
pageContext.setAttribute("bbb","APPLICATION_SCOPE(4)",4);
%>
<%=pageContext.getAttribute("aaa",PageContext.PAGE_SCOPE)%><br />
<%=pageContext.getAttribute("aaa",PageContext.REQUEST_SCOPE)%><br />
<%=pageContext.getAttribute("aaa",PageContext.REQUEST_SCOPE)%><br />
<%=pageContext.getAttribute("aaa",PageContext.APPLICATION_SCOPE)%><br />
<br />
<%=pageContext.getAttribute("bbb")%><br />
<%=request.getAttribute("bbb")%><br />
<%=session.getAttribute("bbb")%><br />
<%=application.getAttribute("bbb")%><br />
<br />
<%--findAttribute会从最小到大范围搜索--%>
<%=pageContext.findAttribute("aaa")%><br /><% pageContext.removeAttribute("aaa",1);%>
<%=pageContext.findAttribute("aaa")%><br /><% pageContext.removeAttribute("aaa",2);%>
<%=pageContext.findAttribute("aaa")%><br /><% pageContext.removeAttribute("aaa",3);%>
<%=pageContext.findAttribute("aaa")%><br /><% pageContext.removeAttribute("aaa",4);%>
<%--pageContext能获取其他8个隐式对象 (一般写框架常用)--%>
<%
pageContext.getRequest();//request
pageContext.getOut();//out
pageContext.getResponse();//response
pageContext.getSession();//session
pageContext.getPage();//page
pageContext.getErrorData();//exception
pageContext.getServletConfig();//config
pageContext.getServletContext();//application
%>
</body>
</html>
运行结果:
3.session
常用方法:
void setAttribute(Sting name, Object value) //设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
Object getAttribute(String name) //在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
void removeAttribute(String name) //删除指定名字的session属性,若该属性不存在,则出现异常。
void invalidate() //使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
int getMaxInActiveInterval()// 获取会话的最大持续时间。
int getId() //获取会话的id 可以进行一些操作进行持久化
代码:
<%@ page import="java.util.Enumeration" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>session方法</title>
</head>
<body>
<%
//简单设置一个session
session.setAttribute("name","不废话快上车");
%>
<%--输出一个session--%>
<%=session.getAttribute("name")%>
<%
//移除一个session
session.removeAttribute("name");
%>
<br />
<%
session.setAttribute("aaa","AAA");
session.setAttribute("bbb","BBB");
session.setAttribute("ccc","CCC");
//批量输出
Enumeration<String> sessions = session.getAttributeNames();
while (sessions.hasMoreElements())
{
String name = sessions.nextElement();
Object obj= session.getAttribute(name);
out.write(name+":"+obj.toString()+"<br />");
}
%>
<%--session持久化--%>
<%
String id = session.getId();
Cookie cookie=new Cookie("JSESSIONID",id);
cookie.setMaxAge(60*60*1000); //一小时
response.addCookie(cookie);
%>
<%--摧毁session--%>
<%
//手动摧毁session
session.invalidate();
%>
</body>
</html>
4.request
常用方法:
object getAttribute(String name) //返回指定属性的属性值
Enumeration getAttributeNames() //返回所有可用属性名的枚举
String getCharacterEncoding() //返回字符编码方式
int getContentLength() //返回请求体的长度(以字节数)
String getContentType() //得到请求体的MIME类型
ServletInputStream getInputStream() //得到请求体中一行的二进制流
String getParameter(String name) //返回name指定参数的参数值
Enumeration getParameterNames() //返回可用参数名的枚举
String[] getParameterValues(String name) //返回包含参数name的所有值的数组如checkbox这种多选框可用此方法
String getProtocol() //返回请求用的协议类型及版本号
String getScheme() //返回请求用的计划名,如:http.https及ftp等
String getServerName() //返回接受请求的服务器主机名
int getServerPort() //返回服务器接受此请求所用的端口号
BufferedReader getReader() //返回解码过了的请求体
String getRemoteAddr() //返回发送此请求的客户端IP地址
String getRemoteHost() //返回发送此请求的客户端主机名
void setAttribute(String key,Object obj) //设置属性的属性值
String getRealPath(String path) //返回一虚拟路径的真实路径
void setCharacterEncoding(String code) //用于设置传递的字符编码,可用于解决乱码问题
具体可以查看:http://blog.youkuaiyun.com/qq_35146878/article/details/78700946
5.response
常用方法:
String getCharacterEncoding() //返回响应用的是何种字符编码
ServletOutputStream getOutputStream() //返回响应的一个二进制输出流
PrintWriter getWriter() //返回可以向客户端输出字符的一个对象
void setContentLength(int len) //设置响应头长度
void setContentType(String type) //设置响应的MIME类型
sendRedirect(java.lang.String location) //重新定向客户端的请求
具体查看:http://blog.youkuaiyun.com/qq_35146878/article/details/78681167
6.page
page就是指向的当前jsp本身
7.application
ObjectgetAttribute(Stringname) //返回给定名的属性值
void setAttribute(String name,Object obj) //设定属性的属性值
void removeAttribute(String name) //删除一属性及其属性值
String getRealPath(String path) //返回一虚拟路径的真实路径
URL getResource(String path) //返回指定资源(文件及目录)的URL路径
RequestDispatcher getRequestDispatcher(String uripath) //返回指定资源的RequestDispatche
具体查看:http://blog.youkuaiyun.com/qq_35146878/article/details/78668129
8.exception
必须要把isErrorPage设定为true。
常用方法
String getMessage() // 返回错误信息