JSP中的四大作用域:page、request、session、application

众所周知,为了在页面、请求、和用户之间传递和共享数据,JSP提供了四个不同的作用域:page(页面作用域)、request(请求作用域)、session(会话作用域)、application(应用程序作用域),这些作用域就规定了数据可以传递和共享的范围以及数据的存活时间。

jsp默认的作用域是page(页面作用域),这个作用域中的对象只能在该页面中使用,不允许在其他页面使用。我们可以通过调用pageContext这个隐含的对象的getAttribute()和setAttribute()方法去获取和设置需要传递、共享具有这种范围类型的数据。(pageContext对象还提供了访问其他范围对象的getAttribute方法)。page范围内的对象,在客户端每次请求JSP页面时创建,在页面向客户端发送回响应或请求被转发(forward)到其他的资源后被删除。

request(请求作用域)作用于那些需要在 所有处理同一个request请求的页面中 都可以使用的对象。request作用域的隐含对象是request。要注意的是,因为请求对象对于每一个客户请求都是不同的,所以对于每一个新的请求,都要重新创建和删除这个范围内的对象。

session(会话作用域)的对象可用于同一个浏览器发出的所有请求。Session 的作用范围为一段用户持续和服务器所连接的时间,但与服务 器断线 ,这个属性就无效。当浏览器发出第一个请求时,就认为session的作用时间已经开始了,但是它的结束时间还是不太好判断,毕竟服务器也不是浏览器他爸,浏览器关闭并不会通知他。所以我们可以学习类似于处理“系统响应超时”这种情况的方法,设置:如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval()方法来设置最大时长。

application(应用程序作用域)中的对象作用于这个应用程序的所有用户,从服务器一开始执行服务,一直到服务器关闭为止。从这看来,application的作用范围最广,作用的时间也最长。所以使用时要特别注意不然可能会造成服务器负载越来越重的情况。

注意:根据jsp规范,用于某个对象的名称必须在所有作用域中都是唯一的。也就是说,如果application作用域中有一个名为user的对象,而且在request作用域中用相同的名称保存着另一个对象,那么容器可能会移除第一个对象,尽管很少有容器会执行这项规则,但是为了使您的项目更加完善,还是应该确保在任何地方都是用唯一的名称,除非所保存的对象为同一个。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章