JSP中的application、session、request和pageContext 这四个内置对象分别用于操作application、session、request和page范围中的数据。
application、session、request、page的使用方法基本上都是一致的,只不过作用范围不一样而已:
- application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
- session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
- request:请求作用域,就是客户端的一次请求。
- page:一个JSP页面。
服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务 器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
application对象代表web应用本身,因此使用application来操作web应用相关数据。
application对象通常有两个作用: 1、在整个Web应用的多个JSP、Servlet之间共享数据。 2、访问Web应用的配置参数。
session长驻在服务器内存里,session有id标识,一个session专供一个用户使用。
request只能存在于一次访问里,为了让每次访问区分开是哪个用户,所以request中会带上session的id标识,就是每个request都会属于一个session,一个session能为很多次request服务。
类似于数据库的多对一关系 所以 request.getSession 的本质是使用request中的session id去找到这个用户对应的session。
1.request:
request对象内数据的存活范围就是在request对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存在的任何数据。
2.session :
session对象内数据的存活范围也就是session对象的存活范围(现在可以这样简单理解:只要不关闭浏览器,session对象就会一直存在(严谨的说这样的说法是错误的!)),因此在同一个浏览器窗口中,无论向服务器端发送多少请求,session对象只有一个。
3.application:
application(应用对象):存活的范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程当中,application对象只有一个。
java中request/session/application三大域对象的作用范围
//只要服务器不关闭,计数器一直有效,即使在不同的浏览器内访问!
//若把application换成session,只能在一个会话中有效,关闭浏览器计数器就不在有效
//若把application换成request,每次刷新浏览器进行请求时,计数器只显示1
--------------------------------------------------------------