javax包:java
request 请求对象 类型 javax.servlet.ServletRequest 做用域 Request浏览器
response 响应对象 类型 javax.servlet.SrvletResponse 做用域 Pagetomcat
pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 做用域 Page服务器
session 会话对象 类型 javax.servlet.http.HttpSession 做用域 Sessionsession
application 应用程序对象 类型 javax.servlet.ServletContext 做用域 Applicationapp
out 输出对象 类型 javax.servlet.jsp.JspWriter 做用域 Pagejsp
config 配置对象 类型 javax.servlet.ServletConfig 做用域 Page对象
page 页面对象 类型 javax.lang.Object 做用域 Page作用域
exception 例外对象 类型 javax.lang.Throwable 做用域 page部署
“exception” 对象则表明了JSP文件运行时所产生的例外对象,此对象不能在通常JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用。
何为做用域
先让咱们看看效果:
大概流程是这样的,咱们访问index.jsp的时候,分别对pageContext, request, session,application四个做用域中的变量进行累加。(固然先判断这个变量是否是存在,若是变量不存在,则要把变量初始化成1)。计算完成后就从index.jsp执行forward跳转到test.jsp。在test.jsp里再进行一次累加,而后显示出这四个整数来。
从显示的结果来看,咱们能够直观的得出结论:
page里的变量无法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。
request里的变量能够跨越forward先后的两页。可是只要刷新页面,它们就从新计算了。
session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就从新计算了。
application里的变量一直在累加,除非你重启tomcat,不然它会一直变大。
做用域规定的是变量的有效期限
若是把变量放到pageContext里,就说明它的做用域是page,它的有效范围只在当前jsp页面里。
从把变量放到pageContext开始,到jsp页面结束,你均可以使用这个变量。
若是把变量放到request里,就说明它的做用域是request,它的有效范围是当前请求周期。
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程当中可能使用forward的方式跳转了多个jsp页面,在这些页面里你均可以使用这个变量。
若是把变量放到session里,就说明它的做用域是session,它的有效范围是当前会话。
所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一我的发起的,整个过程被称为一个会话(session),而放到会话中的变量,就能够在当前会话的全部请求里使用。
若是把变量放到application里,就说明它的做用域是application,它的有效范围是整个应用。
整个应用是指从应用启动,到应用结束。咱们没有说“从服务器启动,到服务器关闭”,是由于一个服务器可能部署多个应用,固然你关闭了服务器,就会把上面全部的应用都关闭了。
application做用域里的变量,它们的存活时间是最长的,若是不进行手工删除,它们就一直可使用。
与上述三个不一样的是,application里的变量能够被全部用户共用。若是用户甲的操做修改了application中的变量,用户乙访问时获得的是修改后的值。这在其余scope中都是不会发生的,page, request,session都是彻底隔离的,不管如何修改都不会影响其余人的数据。