JSP内置对象概述
简化web应用程序开发,在jsp页面内置了一些默认的对象,这些对象不需要预先声明就可以在脚本代码和表达式中使用。有以下九种
Request、response、out、session、pageContext、application、config、page和exception
Request:
与之联系的是HttpServletRequest类。通过getParmeter方法可以得到request的参数,通过get、post、head等fangf可以得到request类型,通过cookies、referer可以得到引入的http头。
Request是类javax.servlet.ServletRequest的一个子类不是HttpServletRequest类(javax.servlet.http.ServletRequest界面的类)
Response:
与之联系的是HttpServletResponse类。因为输入流是放入缓冲的所以可以设置http状态码和response头
Out:
使用PrinterWriter类来向客户端发送输出,然而为了使response对象有效,可以使用一个PrinterWriter类的使用缓冲版本JSPWriter
Session:
与之联系的是HttpSession类。该对象是自动创建的,即使没有一个引入的session,这种变量仍可以绑定。
若使用page指令关闭session在试图使用session会发生错误,不要轻易关闭session。
PageContext:
管理对属于jsp中特殊可见部分中已经命名的对象的访问。
Application:
与之联系的是ServletContext类。通过使用getServletConfig().getContext()方法取得。
Config:
它是一个ServletConfig对象。jsp配置处理程序的句柄,只有在jsp页面范围内才是合法的。
Page:
仅仅是用来保存在脚本语言不是Java是的时间。jsp实现类的一个句柄,只有在jsp页面范围内才是合法的。
Exception:
只能由指定的jsp错误处理页面访问的异常数据,它属于Java.lang.Throwable的子类。
Request对象
访问请求参数
<form action="login_deal.jsp">
<input name="username" type=”text” id="username" >
<input name="pwd" type=”text” id="pwd" >
</form>
<% request.setCharacterEncoding("gb2312");
String username=request.getParameter("username");
String pwd=request.getParameter("pwd");
out.println("用户名为:"+username);
out.println("密码:"+pwd);%>
管理属性
<% request.setAttribute("error","检查您所输入的用户名和密码"); %>
<jsp:forward page="error.jsp"/>
//error.jsp
<% out.println("错误信息为"+request.getAttribute("error")); %>
获取客户端的Cookie信息
Cookie是服务器通过浏览器在访问者硬盘留下存储信息的手段。它是一段文本信息,伴随着用户请求在和页面在web服务器和浏览器之间传递。
Cookie的好处如下:
(1)cookie能够使得站点跟踪特定的访问者的访问次数、最后访问时间和访问者进入的路径。
(2)能够告诉在线广告商广告被单击的次数,从而精确的投放广告。
(3)Cookie有效期限味道时,cookie能使得用户在不键入密码和用户名的情况下进入曾经浏览过的站点。
(4)Cookie能够帮助站点统计用户个人资料以实现各种各样个性化服务,
在jsp中我们可以通过request对象中的getCookie()来获得cookie。
Cookie[] cookie=request.getCookie();
注意:该方法返回的是cookie数组。
获取客户端cookie信息例子
<title>获取客户端客户信息例子</title>
</head>
<body>
<%
Cookie[] cookies=request.getCookies();
Cookie cookie_response=null;
if(cookies!=null){
cookie_response=cookies[0];
}
out.println("本次访问时间为:"+new java.util.Date()+"<br>");
if(cookie_response!=null){
out.println("上次访问时间为:"+cookie_response.getValue());
cookie_response.setValue(new java.util.Date().toString());
}
if(cookies==null){
cookie_response=new Cookie("AccessTime","");
cookie_response.setValue(new java.util.Date().toString());
response.addCookie(cookie_response);
}
%>
</body>
</html>
获取客户信息
方法 | 说明 |
getHeader(String name ) | 获取http协议定义的头文件信息 |
getHeaders(String name ) | 返回指定名字的request Header 的所有值,其结果是一个枚举的实例 |
getHeadersName() | 返回所有request Header的名字,其结果是一个枚举的实例 |
getMethod() | 获得客户端向服务器端传到数据的方法 |
getProtocol() | 获得客户端向服务器端传到数据所依据的协议的名称 |
getRequestURI() | 获取发出请求客户端的地址 |
getRealPath() | 返回当前请求的绝对路径 |
getRemoteAddr() | 获取客户端的IP地址 |
getRemoteHost() | 获取客户端的机器名称 |
getServerName() | 获取服务器的名字 |
getServerPath() | 获取客户端所请求的的脚本文件的路径名称 |
getServerPort() | 获取服务器的端口号 |
<%
out.println("客户提交信息的方式"+request.getMethod()+"<br>");
out.println("使用的协议"+request.getProtocol()+"<br>");
out.println("客户端地址"+request.getRequestURI()+"<br>");
out.println("客户端IP地址"+request.getRemoteAddr()+"<br>");
out.println("服务器端口号"+request.getServerPort()+"<br>");
out.println("服务器名称"+request.getServerName()+"<br>");
out.println("客户端机器名称"+request.getRemoteHost()+"<br>");
out.println("客户端请求的脚本文件路径"+request.getServletPath()+"<br>");
out.println("获取http协议定义的头文件信息"+request.getHeader("host")+"<br>");
out.println("获取http协议定义的头文件信息"+request.getHeader("user-agent")+"<br>");
out.println("信息长度"+request.getContentLength());
out.println("信息类型"+request.getContentType());
%>
Response对象
Response对象是用于响应服务器端提交的信息,即把服务器端的信息发送给客户端,这些信息包括页面的跳转、设置头信息、cookie信息设置传送字体的编码等。
Response对象是Java.servlet.http.HttpServletResponse接口类的对象,它封装了jsp产生的响应,并发送到客户端。
重定向网页
Response.sendRedirect(“login_ok.jsp”);
这和动作元素<jsp:forward page=””/>存在区别
指明错误状态
Response.sendError(500,”请求页面存在错误”)
具体如表所示
sendRedirect | <jsp:forward page=””/> |
地址栏改变跳转 | 地址栏不改变跳转 |
所有代码执行完毕之后跳转 | 执行到跳转语句后无条件跳转,之后的代码不在执行 |
客户端跳转 | 服务器端跳转 |
不能保持request属性 | 可以保持request属性 |
通过URL地址的重写传递参数 | 通过<jsp:param name=”” value=””>传递参数 |
设置http响应报头
方法 | 说明 |
setDateHeader(String name,long date) | 使用给定的名称和日期设置一个响应报头,如果指定的名称已经设置,那么新值会覆盖旧值 |
setHeader(String name ,String value) | 使用给定的名称和值设置一个响应报头,如果指定的名称已经设置,则新值覆盖旧值 |
setHeader(String name ,int value) | 使用给定的名称和整数值设置一个响应报头,如果指定的名称已经设置,则新值覆盖旧值 |
addHeader(String name,long date) | 使用给定的名称值设置一个响应报头 |
addDateHeader(String name,long date) | 使用给定的名称和日期值设置一个响应报头 |
containHeader(String Header) | 返回一个布尔值,他表示是否设置了已将命名的响应报头 |
addIntHeader(String name,int value) | 用给定的名称和整数值设置一个响应报头 |
setContentType(String type) | 为响应设置内容类型,其参数类型可以twxt/html、text/plain、application/x_msexcel、application/msword |
setContentLength(int len) | 为响应设置内容的长度 |
setLocate(Java.Util.locale loc) | 为响应设置地区信息 |
定时刷新的实现
response.setHeader("refresh","10");
out.println(new java.util.Date());
缓冲区配置
使用缓冲可以更加有效的在服务器和客户之间传输内容。HttpServletResponse对象为支持JSPwriter对象而启用了缓冲区设置。
方法 | 说明 |
flushBuffer() | 强制把缓冲区中内容发送给客户 |
gettBufferSize() | 返回响应所使用的实际缓冲区的大小,如果没有使用缓冲区则该方法返回0 |
setBufferSize(int size) | 为响应的主体设置首选的缓冲区的大小 |
isCommitted() | 返回一个boolean值,表示响应是否已经响应;提交的响应已经写入状态码和报头 |
Reset() | 清除缓冲区存在的任何数据,同时清除状态码和报头 |
缓冲区配置例子:
response.setHeader("refresh","10");
out.println(new java.util.Date().toLocaleString()+"<br>");
out.println("缓冲区大小"+response.getBufferSize()+"<br>");
out.println("缓冲区内容强制提交前"+"<br>");
out.println("缓冲区内容是否提交"+response.isCommitted()+"<br>");
response.flushBuffer();
out.println("缓冲区内容强制提交后"+"<br>");
out.println("缓冲区内容是否提交"+response.isCommitted()+"<br>");
结果:
缓冲区大小8192
缓冲区内容强制提交前
缓冲区内容是否提交false
缓冲区内容强制提交后
缓冲区内容是否提交true
Session对象
Session对象是用来分别保存每个用户信息的对象,以便跟踪用户的操作状态。Session的信息保存在服务器端,session的ID保存在客户机的cookie中。如果浏览器不支持或废除cookie就自动转化为URL-writing,session会自动地为每个流程提供了方便的存储信息的方法。
Session对象的主要方法
(1)getAttribute(String name)
获取与指定名字name相联系的信息
(2)getAttributeNames()
返回session对象中的存储的每一个属性对象,其结果为一个枚举 类的实例
(3)getCreation Time()
返回session被创建的时间。最小单位为ms。
(4)getId()
此方法返回唯一的标识,这些标识为每个session而产生。当只有 单一值与一个session联合时,或当日志信息与先前的session有 关时,它被当做键名使用
(5)GetLastAccessdTime()
返回当前session对象最后被客户发送的时间。最小单位ms
(6)GetMaxInactiveInterval()返回总时间单位S,负值表示session永 远不会过时。改时间为session对象的生存时间。
(7)removeAttribute(String name)
删除指定名字name想联系的信息
(8)setAttribute(String name,java.lang.Object value)
设置指定名字的属性值,并将之存储在session对象中。
Session对象实现保持会话信息
session.setAttribute("information", "向session中保存数据");
response.sendRedirect("a.jsp");
//a.jsp
out.println(session.getAttribute("information"));
application对象
用来在多个程序中保存信息,每个用户的application对象是相同的。服务器启动后,一旦创建了该对象,这个对象就会一直保存下去,直到服务器关闭为止。
访问应用程序初始化参数
GetInitParameter(String name) 返回一个已经命名的初始参数的值
GetInitParameterNames()返回所有已经定义的应用程序初始化参数名称的枚举。
管理应用程序环境属性
RemoveAttribute(String name)
从ServletContext 去掉指定名字的属性
SetAttribute(String anme,Object object)
使用指定名称和指定对象在ServletContext 的对象进行关联
GetAttribute(String name)
从ServletContext 的对象中获取一个指定的对象。
getAttributeNames()
返回ServletContext 对象中属性名称的枚举类型。
简单统计在线人数。
<%
//统计在线人数
application.setAttribute("counter", new Integer(0));
out.println(application.getAttribute("counter"));
//记录在线人名
application.setAttribute("onlineName", new String(""));
out.println(application.getAttribute("onlineName"));
%>
Out对象
该对象主要用来向客户端输出各种数据类型的内容,并且管理应用服务器上的输出缓冲区默认为8KB,可以通过page来改变默认值。该对象被封装为Javax.servlet.isp.JspWriter类的对象,在实际的应用上out对象会通过jsp容器转换为Javax.io.PrintWriter类的对象。
out,println(各种类型的数据)
out.newLine();输出一个换行字符
Out.flush();输出缓冲区的数据
Out.close();关闭
Out.clearBuffer();清除缓冲区的数据并把数据输入到客户端
Out.clear();清除缓冲区的数据但是不会把数据输入到客户端
Out.getBufferSize();获取缓冲区的大小;
Out.getRemaining()获得缓冲区未被占用的空间的大小;
Out.AutoFlush();返回布尔值。
其他内置对象
获取会话范围的pageContent对象
该对象继承于JSPContent类,它为在servlet环境下使用JSP技术提供完整的上下文信息。它相当于页面中所有其他对象的最大集成者,使用它可以访问到本业中的所有其他对象。该对象被封装成java.servlet.jsp.pageContent接口。主要用于访问jsp中特殊可见部分的已经命名对象的访问,它的创建和初始化都有容器来王成。
常用方法
方法 | 说明 |
forward(java.lang.String.relativeUtpath) | 页面转发到另一个页面或者Servlet组件上 |
getAttribute(java.lang.String name[,int scope]) | 检索一个特定的的已经命名的的对象的范围 |
getException() | 获取当前的Exception对象 |
getRequest() |
|
getResponse() |
|
getServletConfig() |
|
Invalidate() | 返回ServletContext,全部销毁 |
setAttribute() | 设置默认页面范围或特定对象范围之中的已经命名对象 |
RemoveAttribute() | 删除默认页面范围或特定对象范围之中的已经命名对象 |
Config对象
读取web.xml配置信息。该对象被封装成java.servlet.ServletConfig接口,它包含servlet的配置信息
方法 | 说明 |
getServletContext() | 返回只想着的Servlet上下文 |
getServletName() | 返回Servlet的名字 |
getInitParameter() | 返回初始参数值 |
getInitParameterNames() | 返回所有初始参数的名字 |
应答或请求的page对象
仅仅是用来保存不是Java脚本语言时的时间
方法 | 说明 |
getClass() | 返回当前Object 的类 |
hashCode() | 返回此Object 的哈希代码 |
toString() | 将此Object 转换为字符串 |
Equals(Object o) | 比较此对象和指定对象是否相等 |
Copy(Object o) | 将对象赋值到指定对象中去 |
Clone() | 对此对象进行克隆 |
获取异常信息的exception类
异常是指在执行过程中不可预料的情况,如果不处理程序会崩溃。
方法 | 说明 |
getMessage() | 返回异常消息字符串 |
getLocalizedMessage() | 返回本地化语言异常错误 |
PrintStackTrace() | 显示异常栈跟踪轨迹 |
toString() | 异常错误的简单描述 |
fillInStackStrace() | 重写异常错误的栈执行轨迹 |