JSP内置对象作用域表
所谓"作用域"就是"信息共享的范围",也就是说一个信息能够在多大的范围内有效。
名称 | 作用域 |
---|---|
application | 在所有应用程序中有效,即只要这个网站运行着,这个作用域就有效,这个指的程序的运行过程 |
session | 在当前会话中有效,即从浏览器访问服务器开始,这个指的是用户的一个访问过程,即这次会话的开始到结束 |
request | 在当前请求中有效,负责多个servlet之间的信息共享,即将信息放入到request中,在整个请求阶段都是有效的,即用户访问的这个阶段都可以获取到这个数据 |
page | 在当前页面有效,即在一个jsp页面上是有效的。 |
四大作用域解释
1. application 作用域
application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。application作用域上的信息传递是通过ServletContext实现的,它提供的主要方法如下所示:
方法 | 作用 |
---|---|
Object getAttribute(String name) | 从application中获取信息。 |
void setAttribute(String name, Object value) | 向application作用域中设置信息。 |
2. session作用域
session作用域指同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。session是通过HttpSession接口实现的,它提供的主要方法如下所示。
方法 | 作用 |
---|---|
Object HttpSession.getAttribute(String name) | 从session中获取信息。 |
void HttpSession.setAttribute(String name, Object value) | 向session中保存信息。 |
HttpSession HttpServletRequest.getSession() | 获取当前请求所在的session的对象。 |
session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval(int interval)方法来设置,如果想主动让会话结束,例如用户单击"注销"按钮的时候,可以使用 HttpSession 的 invalidate()方法,用于强制结束当前session。
3. request作用域
一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。
Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的。
方法 | 作用 |
---|---|
void setAttribute(String name, Object value) | 将对象value以name为名称保存到request作用域中。 |
Object getAttribute(String name) | 从request作用域中取得指定名字的信息。 |
JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的 setAttribute()方法即可传递信息。
那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。
RequestDispatcher ServletContext.getRequestDispatcher(String
path):取得Dispatcher以便转发。path为转发的目的Servlet。
void RequestDispatcher.forward(ServletRequest request,
ServletResponse response):将request和response转发。
因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递。
4. page作用域
page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在pageContext对象中。