JSP的作用域

1.作用域

在web应用中 , JSP创建的对象有一定的生存周期 , 可以被其它组件或其它对象访问 , 对象的生存周期及可访问性称为作用域.

2.四大作用域

JSP有四大作用域 , 按照可以访问域的范围(从小到大)为 : page--> request --> session --> application.

(1) pageContext(页面域)

pageContext有效范围仅限于当前页面 , 可以近似理解为this对象 ,  在离开当前页面后 , 无论是request或redirect等方式离开的 , 当前页面的相关属性值都会丢失.

(2)request(请求域)

request表示一次请求 , 它的有效范围是当前请求周期 . 所谓请求周期 , 就是从http发送请求 , 到服务器接收并处理请 , 将结果返回到客户端响应 . 在这一过程中 , 可能使用forward跳转了多个jsp页面 , 而在这多个jsp页面中属性值都有效. 但如果是通过redirect方式进行跳转 , 则重新发送请求 , 这样属性值就会丢失.
注意:
forward()转发是服务器端的,地址栏的地址不会改变;redirect()是请求重新定向,是客户端的,地址栏的地址为重新定向的页面。

(3)session(会话域)

session有效范围是当前会话。当前会话表示浏览器打开到浏览器关闭这一过程。但这会出现这种情况,如果浏览器一直处于打开状态,这样session永远不会销毁,而且在浏览器关闭时并不会通知服务器,另外session是存放在服务器的内存上,这样对服务器是一种负担,所以通过这种方法来判断:如果一段时间内客户端没有响应,则认为会话结束。tomcat默认会话时长为120分钟,但可以通过HttpSession的setMaxInactiveInterval()方法来设置。

(4)application(应用域)

application有效范围为整个应用,从应用开启到应用结束。在服务器停止之前,应用没有结束,application对象都有效,可以被所有会话共享。

application作用域的变量的存活时间是最长的,如果不手动删除就会一直存在。因为application的变量是共享的,如果甲修改了application的变量,那么,乙访问的是修改后的值。这在其它scope是不会发生的,因为page,request,session是完全隔离的,用户之间不会影响。

注:看到一些书本说:application作用域在服务器关闭之前都是有效的。这句话有点不对,application表示整个应用,一个服务器上可以部署多个应用,在应用关闭时,服务器没有关闭时,application应该是失效的。

提示:

session的删除时间应该是以下三种情况:

1)  Session超时:在服务器设置的session超时的最大时间内,服务器没有收到session所对应的客户端的任何请求行为;

2)  程序调用HttpSession.invalidate()来进行删除 ;

3)  服务器关闭或服务停止(或者应用关闭)

注意:

1)  *.html的静态资源因为不会被编译为Servlet,也就不涉及session的问题。

2)  当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。

3)  由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。

阅读更多
换一批

没有更多推荐了,返回首页