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 对象的范围在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长。
!!!这里有一个原则,最小代价原则即尽量使用影响范围小的对象来存储数据信息
在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 对象的范围在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长。
!!!这里有一个原则,最小代价原则即尽量使用影响范围小的对象来存储数据信息
相关文章推荐
- applicationContext.xml详解
- 搭建好Android的第一个程序。
- AppStore加急处理
- ios的@class属性
- IOS 数据存储之 Core Data详解
- Android: 录音
- android菜鸟学习笔记10----Intent及<intent-filter>
- Android: 长按及松开处理
- 隐藏StatusBar
- Android,iOS打开手机QQ与指定用户聊天界面
- iOS 修改字体
- iOS开发中WebP格式的64位支持处理
- webapp构建工具库
- 【iOS开发之Objective-C】Objective-C语言中的OOP
- android设置横屏和竖屏的方法
- Android应用程序打包时,出现错误:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....
- How Does Linphone Toggle SIP Contact?
- android的9.png研究
- AppStore加急处理
- iOS里面的委托