您的位置:首页 > 移动开发

pageContext,request,session,application的生命周期

2015-06-29 14:12 351 查看
问题思考:

在Java web开发的过程中,我们不可避免的要接触这几个对象,在了解他们的区别之前,要先普及一个知识。可曾想过,为什么jsp页面中不用创建就可以直接使用这几个对象?

那是因为我们看到的jsp页面不是用户最终看到的页面内容,每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序,用户看到的是被编译处理之后生成的HTML页面。而这几个对象的创建就是在这个servlet类的父类org.apache.jasper.runtime.HttpJspBase类(HttpJspBase类是HttpServlet的一个子类)中创建的,有关JSP的运行原理详见JSP起源、JSP的运行原理、JSP的执行过程

具体区别:

这四个对象都可以通过setAttribute(String,Object)和getAttribute(String)方法来设置和访问数据,他们的主要区别在于数据的使用范围,(pageContext,request,session,application影响范围从小到大)具体区别如下:



1. pageContext

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针

2. request

request 对象是javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求(即一个JSP页面到另一个JSP页面之间)。

3. session

Ø 什么是session:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
Ø session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。
Ø session对象存在一定时间过期问题,所以存在session中的名值对会在一定时间后失去,可以通过更改session有效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中,request是一个不错的替代对象。
4. application

服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。



总结:

pageContext 对象的范围只适用于当前页面范围,即超过这个页面就不能够使用了。

request 对象的范围是指在一JSP网页发出请求到另一个JSP网页之间,随后这个属性就失效。

session 对象的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。比如断网或者关闭浏览器。

application 对象的范围在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长。

!!!这里有一个原则,最小代价原则即尽量使用影响范围小的对象来存储数据信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: