Java 四大域对象总结
Java四大域对象包含: PageContext,Request,Session,ServletContent
1
总体概述
PageContext:在本页面中有效;
Request:在一次请求及转发的Servlet中有效;
Session:在一次会话中有效,直到超时及销毁;
ServletContent:在整个web应用有效,生命周期为Web运行期间;
下面是针对四个域对象,在生命周期,作用范围和作用 3方面上面的一些区别;
2
PageContext 域
pageContext:指当前页面。在一个jsp页面里有效 ;
生命周期:当对JSP的请求时开始,当响应结束时销毁。
作用范围:整个JSP页面,是四大作用域中最小的一个。
作用:
(1)通过pageContext获取其它八大隐式对象。
getexception方法返回exception隐式对象
getpage方法返回page隐式对象
getrequest方法返回request隐式对象
getresponse方法返回response隐式对象
getservletconfig方法返回config隐式对象
getservletcontext方法返回application隐式对象
getsession方法返回session隐式对象
getout方法返回out隐式对象
(2)获取其所有域中的数据
pageContext 操作所有域中属性的方法
public java.lang.Object getAttribute(java.lang.String name,int scope)
public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public void removeAttribute(java.lang.String name,int scope)
pageContext 中代表域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
findAttribute方法,在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域.
(3)跳转到其他资源,其身上提供了forward和include方法,分别简化和替代requestdispatcher.forward方法和include方法。
3
Request 域
Request:指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量.
1、生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
2、作用范围:整个请求链(请求转发也存在)。
3、作用:在整个请求链中共享数据。最常用到:在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。
4
Session 域
Session:有效范围当前会话,从浏览器打开到浏览器关闭这个过程。
1、生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。
session什么时候销毁和怎么销毁:
①当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。
②如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。
③如果调用session提供的invalidate() ,可以立即销毁session。
注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。 如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失。
2、作用范围:一次会话。
5
ServletContext
ServletContext:WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
1、生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。
2、作用范围:整个Web应用。
3、作用:
① 在不同Servlet 之间转发
this.getServletContext().getRequestDispatcher("/servlet/TestServlet").forward(request, response);
方法执行结束,service就会返回到服务器,再有服务器去调用目标servlet,其中request会重新创建,并将之前的request的数据拷贝进去。
②读取资源文件。