jsp 隐含对象
1.引言
为了方便程序员对常用对象的访问,在JSP中规范了就中隐含对象,这些对象不用声明可以直接拿来使用,在从JSP转换为servlet时,他们会转换为对应的servlet类型。
out:表示输出,相当于servlet中的PrintWriter,对应的类型是javax.servlet.jsp.JspWriter
request:表示请求信息,对用的类型是javax.servlet.http.HttpServletRequest
response:表示响应信息,对应的类型是javax.servlet.http.HttpServletResponse
session:和servlet中的HttpSession一样。对应的类型是javax.servlet.http.HttpSession
application:表示整个应用的上下文,和getServletConfig().getServletContext()等效。对应类型为javax..servlet.jsp.PageContext
exception:页面异常,可以通过它获得异常的信息,对应的类型是java.lang.Throwable;
page:表示此JSP页面,和java类中的this含义一样
pageContext:表示此JSP的上下文,对应的类型是javax.servlet.jsp.PageContext
config:表示此JSP的servletconfig,对应的类型是javax.servlet.ServletConfig
其中pageContext, request, session, application为四个作用域对象。
2.request对象
这里说说用他来传值。
request.setAttribute("name","guo");
request.getRequestDispatcher("地址").forward(request,response);
在另外的页子中可以接收:request.getAttribute("name");
3.session对象
session对象对应于HttpSession对象,在JSP中,page指令有一个属性和session相关,这个属性的名字也叫做session,倘若他的值被设置为false,
那么在这个JSP页面中就不能使用session。
注意这里因为是内置对象,所以不用再生成,直接使用即可。
setAttribute(java.lang.String name, java.lang.Object value)
getAttribute(java.lang.String name) 返回值为object
4.application
application对象时一个对web应用有效的全局变量,他实现了ServletContext接口,注意他是全局的,也就是说所有的客户端访问的都是同一对象
setAttribute(java.lang.String name, java.lang.Object value)
getAttribute(java.lang.String name) 返回值为object
5.四个作用域对象的总结
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里,从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。 所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使
用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。 所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个
请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用,整个应用是指从应用启动,到应用结束,可以简单理解为从服务器启动,到服务器关闭 。
6.exception
exception对象是Throwable的实例,他表示的是JSP中的异常信息,注意exception这个隐含对象并非在所有的JSP页面中都可以用,如果要使用
这个对象,必须将此JSP的page指令的isErrorPage属性值设置为true。
他的使用我举个例子:
error.jsp中:
设置他为错误页面:<%@ page isErrorPage="true" %>
jsp代码:<%
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
String s=sdf.format(date);
out.println("您出错了,请您检查");
out.println("错误时间:"+s+"<br>");
out.println("错误类型:"+exception);
%>
web.xml文件中:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>>
</error-page>
通过上面的设置,整个网站的错误信息都可以集中到error.jsp中取处理。自己试着弄一个错误页面:index.jsp
<%
int a=3;
out.println(a/0);
%>