您在本教程中所创建的 Web 应用程序采用 application 范围内的一个对象来统计投票数,采用 session 范围内的一个对象来确保用户在每个会话中只能投票一次。该应用程序采用一个 request 范围内的对象来显示用户提交投票的时间。该时间存储在 request 范围,因为应用程序在响应被发送到客户端浏览器以后不再需要这个值。
本教程需要采用以下技术及资源
JavaServer Faces 组件/ Java EE 平台 |
1.2 和 Java EE 5* 1.1 和 J2EE 1.4 |
Travel 数据库 | 非必须 |
* 为了利用 NetBeans IDE 6.0 的 Java EE 5 能力,请采用一个完全符合 Java EE 5 规范的应用程序服务器,如 Sun Java Application Server 9/GlassFish 。
此教程已针对 GlassFish v2 应用程序服务器上的应用做出调整。如果您使用的是不同的服务器,请参阅发行说明及常见问题解答以了解已知问题和变通方法。要了解受支持的服务器和 Java EE 平台的信息,请参阅发行说明。
关于作用域
当用户停留在一个页面上的时候,即使页面重新显示,例如用户点击一个返回空值的按钮时,组件的值仍然被存储。然而,用户离开这个页面时,组件的值随即消失。
要让值对其他页面有效,或者对用户应当返回的相同页面有效,你需要存储值。当你从 IDE 里创建一个项目时, IDE 将创建三个 受管 Bean 用来存储值:
RequestBean1
SessionBean1
ApplicationBean1
下图所示的是一个列出了受管 Bean 的“导航”窗口。
图表 1:默认的受管 Bean
一个受管 Bean 就是一个 JavaBean 对象,该对象被 JavaServer Faces web 应用程序所呈现并存储于request、session 或者 application 范围内。Web 应用程序将 RequestBean1 存储于 request 范围内,将 SessionBean1 存储于 session 范围内,并将 ApplicationBean1 存储于 application 范围内。
要向这些受管 Bean 添加属性,您可以右击“导航”窗体中的一个 bean 并在源代码中键入属性声明。右击 Java 编辑器中的任意处,然后选择“重构” > “封装字段”。然后从列表中选择属性并勾选要添加的方法,点击“构造”。
在创建一个 bean 属性来存储值之前,您必须决定属性值的适用作用域。因为许多用户可能在同一时间访问 web 应用程序,您需要使用尽可能最小的作用域以便对服务器资源进行最好的利用。下图展示了每种作用域的持续期。
Application 作用域将持续到服务器停止该应用程序为止。您存储在 application bean 中的值对于使用同一应用程序映射的每个会话和每个请求都是有效的。
Session 作用域在用户第一次访问 web 应用程序中的某一页面时开始,当用户的会话由于长时间处于非活动状态而超时,或者当 web 应用程序令会话无效时,例如通过调用 session.invalidate(),会话终止。
Request 作用域在用户提交页面时开始,当响应彻底完成时终止,不论返回的页面是什么。
图表 2: Web 应用程序的作用域