JSP有四大作用域。作用域的范围从小到大是:page<request<session<application。
①范围最小的作用域是page,它只在当前页面有效。也就是在当前用户发送请求跳转之后的当前页面有效,但是当关闭当前页面或者打开其他页面的时候,page对象会将响应回馈到客户端然后释放。
②范围第三的是request,它只在当前请求中有效。request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转。但是需要注意的是,request是转发而不是重定向,转发相对于浏览器来说是透明的,换个说法也就是说无论页面如何跳转,地址栏上显示的依旧是最初发送请求的地址。
③范围第二的是session,它只在当前会话中有效。当一台电脑的同一个浏览器对服务器进行多次访问时,那么在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求之后既可以认为会话开始,但是因为会话结束的时间是不确定的,原因是浏览器在关闭时并不会通知服务器,一般服务器都会有设置默认的时间,当然也可以通过setMaxInactiveInterval(int)方法进行默认时间设置,或者通过invalidate()方法强制结束当前会话。
④范围最大的作用域是application,它在所有的应用程序中都是有效的。也就是说当打开服务器到关闭服务器这段时间里面,application作用域里面存储的数据都是有效的。这时候同样可以通过setAttribute赋值和getAttribute取值。因为application即是ServletContext,它的有效范围内是整个web。ServletContext的生命周期在服务器启动时创建,在服务器关闭时销毁。它的作用主要是让每个用户都可以访问数据或者多个客户端共享数据。