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);
    %>