四种存储数据的容器对象:page、request、session、application
(1)page对象
是java.lang.Object类的一个实例。它指的是JSP实现类的实例,也就是说它是JSP本身,通过这个对象可以对它进行访问。
JSP实现了类对象的一个句柄,只有在JSP页面的范围内才是合法的。
(2)request对象
是ServletRequest的一个实例。
当客户端提交一个请求时,JSP引擎会将客户端的请求信息包装在一个request对象中,请求信息的内容包括请求的标题头(Header),信息(如浏览器的版本信息,语言和编码方式等),请求的方式(如HTTP方法:GET,POST,PUT等),请求的参数名称,参数值和客户端的主机名称等,然后将request对象当作jspService方法的HttpServletRequest参数值,所以我们可以通过这个对象来取得有关客户端的请求信息。request对象的主要方法:
getServerPort() 返回接收请求的服务器端的端口号
getServerName() 返回接收请求的服务器的主机名
getScheme() 返回发出请求的 URL 的机制
getRemoteHost() 返回发送请求的接口程序的完全限定的主机名
getRemoteAddr() 返回发送请求的接口程序的 IP 地址
getRealPath() 返回运用替换规则从虚拟地址中获得的实际地址
getReader() 返回从请求体中读取的文本的缓存数据
getProtocol() 返回请求的协议和版本号
getParameterValues() 返回作为字符串列举的指定参数的值
getParameterName() 返回本次请求的参数名字
getParameter() 返回包含指定参数的单独值的字符串
getlnputStream() 返回在请求体中读取二进制数据的输入流
getContenType() 返回请求实体数据的InternetMedia 类型
getContentLength() 返回请求实体数据的大小
getCharacterEncoding() 返回为请求的输入进行编码的字符集合
getAttribute() 返回请求的给出名称的属性的值
request对象实例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘request.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body bgcolor="#ffffff"> <form action="request1.jsp" method="POST"> 姓名:<input type="text" name="username"/><br> 密码:<input type="password" name="password"/><br> <input type="submit" value="提交"/> <input type="reset" value="重置"/> </form> </body> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘request1.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body bgcolor="#ffffff"> 服务器的名称为:<%=request.getServerName()%><br> 服务器的端口号为:<%=request.getServerPort()%><br> 用户名为:<%=request.getParameter("username")%><br> 密码为:<%=request.getParameter("password")%> </body> </html>
(3)session对象
是HttpSession.HttpSession由服务器的程序实现,
提供HTTP服务器和HTTP客户端之间的会话。会话就是在给定时间段内持续进行多路连接和请求。
会话被用来在多页面请求中保持状态和用户认证。
session用来储存访问者的一些特定信息,服务器就是根据session来跟踪这些信息的。
session可以创建访问者信息容器。
session跟踪访问者的访问路径,从中挖掘有用的信息。
session在JSP程序中是一个内置的对象,每一个客户端都有一个session对象用来存放这个客户端相关的数据。
用户在Web应用程序中访问同一页面时,session变量始终存在,当用户在应用程序的页之间跳转时,存储在session对象中的变量也不会清除,当然也可以使用session方法显式地结束一个会话和设置空闲会话的超时期限。session对象的方法:
setAttribute() 设置指定名称为name的属性值value,并将之储存在session对象中
getAttribute() 获取于指定名称name相联系的属性值
getAttributeNames() 返回session对象中存储的每一个属性对象,其结果为一个枚举类的实例
removeValue() 移去和会话应用层数据中指定名称相连的对象
putValue() 将指定的对象和使用指定名称的会话应用层数据相连
isNew() 如果客户端不接受使用session,那么每个请求都会产生一个session对象
invalidate() 使会话无效,并将其从上下文中移出
getValueNames() 返回和会话相连的应用层数据对象的名称
getValue() 返回和应用层数据中指定名称相联系的对象
getSessionContext() 返回会话相连的上下文
getLastAccessTime() 返回客户端上一次发送携带会话账号的时间
getId() 返回会话标识符
getCreationTime() 返回会话创建的时间
(4)application对象
用于在多个程序中保存信息。
可以实现所有用户间共享信息的功能,并可以在Web应用程序运行期间持久地保持数据。
与application相联系的是ServletContext类,通过调用getServletConfig().getContext()方法得到。
一旦创建application对象,该对象将一直保持下去,直到服务器关闭为止。
注意:每个用户的application对象都是相同的,每一个用户都共用同一个application对象。
Application对象主要方法:
getAttribute(String name) 返回由name指定名称的application对象的属性值
getAttributeNames() 返回所有application对象的属性名称。
getInitParameter(String name) 返回由name指定的名字的application对象的某个属性的初始值
getServletInfo() 返回servlet编译器当前版本信息
setAttribute(String name , Object object) 设置指定名字name的application对象的属性值object
application对象实例(常用于显示访问页面的次数。)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘request1.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% int i=0; if(application.getAttribute("count")==null){ application.setAttribute("count",1); i=1; } else { i=(Integer)application.getAttribute("count")+1; application.setAttribute("count",i); } %> <h1> 您是第<%=i%>位访问该页面的用户。 </h1> </body> </html>
(5)out对象
out对象
用于输出数据,它是javax.servlet.jsp.JspWriter的一个实例。
out对象的范围是page。
如果page指令选择了autoFlush=“true”,那么当出现由于当前的操作不清空缓存而造成缓冲区溢出的情况时,这个类的所有I/O操作便会自动清空缓冲区的内容。
如果autoFlush="false",那么当操作造成了缓冲区溢出时,这个类的所有的I/O操作都将抛出一个IOException异常。
out对象的主要方法:
out.print(boolean)out.println(boolean)输出Boolean类型数据
out.print(char)out.println(char) 输出char类型数据
out.print(char[])out.println(char[])输出char[]类型数据
out.print(doubleout.println(double) 输出double类型数据
out.print(float)out.println(float) 输出float类型数据
out.print(int)out.println(int) 输出int类型数据
out.print(long)out.println(long) 输出long类型数据
out.print(Object)out.println(Object) 输出Object类型数据
out.print(String)out.println(String) 输出String类型数据
out.newLine() 输出一个换行符
out.flush() 输出缓冲区的数据
out.close() 关闭输出流
out.clearBuffer() 清除缓冲区里的数据,并把数据输出到客户端
out.cleat() 清除缓冲区里的数据,但不会把数据输出到客户端
out.getBufferSize() 获得缓冲区的大小
out.getRemaining() 获得缓冲区中没有被占用的空间大小
out.isAutoFlush() 返回布尔值。若AutoFlush为真,则返回“ture”;反之则返回“false”
out对象实例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘out.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% out.println("<html>"); out.println("<head>"); out.println("<title>"); out.println("test"); out.println("</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>"); out.println("out对象示例"); out.println("</h1>"); out.println("</body>"); out.println("</html>"); %> </body> </html>
(6)response对象
被封装成HttpServletResponse接口。
它封装了JSP产生的响应,然后被发送到客户端以响应客户的请求。
和request对象一样,它由容器生成,作为jspService()方法的参数被传入JSP。因为输出流是缓冲的,所以可以设置HTTP状态码和response头。response对象的主要方法:
sendRedirect() 把响应发送到另一个位置进行处理
setHeader() 设定指定名称的HTTP文件头的值
sendError() 向客户端发送错误信息
containsHeader() 判断指定的HTTP文件头是否存在
addHeader() 添加HTTP文件头(Header),将会传送到客户端
addCookie() 添加一个Cookie对象,用来保存客户端的用户信息
setContentType() 设置响应的MIME类型
setContentLength() 设置响应的MIME长度
getCharacterEncoding() 返回用于MIME编码的字符集合
reponse对象实例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘request1.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body bgcolor="#ffffff"> <%-- 服务器的名称为:<%=request.getServerName()%><br> 服务器的端口号为:<%=request.getServerPort()%><br> 用户名为:<%=request.getParameter("username")%><br> 密码为:<%=request.getParameter("password")%> --%> <% String name=request.getParameter("username"); String pass=request.getParameter("password"); if(name!=null&&pass!=null){ response.sendRedirect("next.jsp"); }else{ response.sendRedirect("error.jsp"); } %> </body> </html>
(7)pageContext对象
被封装成javax.servlet.jsp.pageContext接口,它为JSP页面提供包装页面的上下文功能。
管理对属于JSP中特殊可见部分已命名对象的访问。它的创建和初始化都是由容器来完成的,JSP页面中可以直接使用pageContext对象的句柄。
pageContext对象的getXXX()、setXXX()和findXXX()方法用来根据不同的对象范围实现对这些对象的管理。pageContext对象主要是管理对属于JSP特殊可见部分中已经命名对象的访问。pageContext对象常用方法:
forward(String relativeUrlPath) 把页面重定向到另外一个页面或者Servlet组件上
getAttribute(String name,[nt scope]) scope参数是可选的。该方法用来检索一个特定的 已经命名的对象的范围,并且还可以通过调用 getAttributeNamesScope()方法,检索第某个特定 范围的每个属性String字符串名字的枚举。
getException() 返回当前的Exception对象。
getRequest() 返回当前的request对象。
getResponse() 返回当前的Response对象。
getServletConfig() 返回当前页面的servletConfig对象。
getservletContext() 返回servletContext对象。
getSession() 返回当前页面的Session对象。
findAttribute() 方法则是可以用来按照页面、请求、会话以及应用程 序范围的顺序实现对某个已命名属性的搜索。
setAttribute() 用来设置默认页面范围或特定范围之中的已命名对象
removeAttribute()
(8)config对象
被封装成javax.servlet.ServletConfig接口
它表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给初始化的Servlet。
常用的方法有:
getServletContext() 返回执行者的Servlet上下文。
getServletName() 返回Servlet的名称。
getInitParameter(String name) 返回名字为name的初始参数值
getInitParameterNames() 返回JSP文件中的所有参数的名称
(9)exception对象
是java.lang.Throwable类的一个实例。
它指的是运行时的异常,也就是被调用的错误页面的结果,只有在错误页面(在页面指令中要有isErrorPage=ture的页面)中才可以使用。
注意:要使用exception对象,一定要加上isErrorPage="true"这句代码。