J2EE探索者: 创建和管理有状态Web应用程序 - 编程入门网
乍一看来,使用这 4 种数据类型来存储有作用域的数据是相当直观的。然而,麻烦的 是,对于一个给定的场景,哪一种作用域最合适却并不总是那么清楚的事了。我们将看看 可能碰到的一些常见的场景,以便作出总结。另外,我们还将实际地讨论,对于每一种环 境,哪一种作用域最适合。 J2EE探索者: 创建和管理有状态Web应用程序(3)时间:2011-04-11 IBM Kyle Gabhart作用域解决方案 在由 JSP 和 Java Servlet 规范定义的这 4 种作用域中,每一种作用域在 Web 应用 程序中都有其明确的用途。 page 提供代表一个 JSP 页面的上下文,与用户所看到的真实页面之间常常具有一对一 的映射关系。这种作用域只能用于 JSP 页面,并且也是所有对象,包括 JavaBean 组件的 默认作用域。具有 page 作用域的对象通常是那些在 scriptlet、表达式、JavaBean 标记 以及自定义标记中被访问的局部变量。如果必须获得一个有 page 作用域的对象的一个引 用,则可以在该页面的 javax.servlet.jsp.PageContext 变量上调用 getAttribute() 。 request 最适合的环境是:单个的用户请求可能涉及不止一个的 servlet 或 JSP 页面 。request 是一种能够在一个原子请求内跨越多个页面的上下文。有 request 作用域的数 据存储在 javax.servlet.ServletRequest 对象中(使用 javax.servlet.http.HttpServletRequest object )并通过使用 getAttribute() 和 setAttribute() 方法来访问。 session 是有状态 J2EE Web 应用程序作用域的核心和灵魂。正是这种作用域使得跨越 多个请求的持久用户体验的创建成为可能。 javax.servlet.http.HttpSession 是存储有 session 作用域的数据的地方,可以通过调用 getAttribute() 和 setAttribute() 方法 来访问。为了在一个 JSP 页面内使用有 session 作用域的数据,必须首先声明这个页面 要参与会话。为了做到这一点,只需在页面的任何地方(一般是在顶部)插入 JSP 会话属 性 <%@ page session="true" %> 。 application 是具有最长运行时间的作用域。这是 J2EE 为全局数据提供的。应用程序 数据被一个应用程序模块内的所有 Web 组件所共享。具有应用程序作用域的对象属于 javax.servlet.ServletContext ,可以通过调用 getAttribute() 和 setAttribute() 方 法来访问。 记住了这些定义,我们就可以制定使用不同作用域的一些原则: 对于 JSP 数据坚决使用 page 作用域。这是与 JSP 页面打交道的最简单的方式。JSP 页面内所有数据的默认作用域都是 page,它允许您在为局部变量指定的范围内(类/方法/ 局部变量作用域)使用这种数据。 清楚 JSP include 对作用域的影响。 page 作用域适用于单个的、经过编译的 Java servlet 类。因为 include 指令是在编译的时候处理的,包括在指令中的任何内容都是在 page 作用域的上行文中操作的。另一方面, include 动作是在运行的时候处理的。如果 使用了 include 动作,为了在两个组件之间共享数据,应该使用 request 作用域。 为了在运行的时候在 Web 组件之间共享数据,使用 request 作用域。如果使用一个 forward 动作或者 include 动作来在两个或更多组件之间共享一个请求,那么通过将数据 的作用域设为 request 作用域便可以在这些组件之间共享该数据。 为了提供有状态用户体验,使用 session 作用域。无论要构建的是在线商店,电子邮 件管理站点,个人化信息门户,还是财务管理应用,session 作用域都是对用户采取从请 求到请求的跟踪或者为用户提供无缝的、持久的环境的最佳选择。 将 application 作用域专用于全局数据。应用程序对象是一些静态的对象,为应用程 序内的所有对象所共享。对 application 作用域的使用应该保留给真正需要在组件之间共 享 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |