拍卖 Web 应用程序由几个组件组成,如下图所示。本文档不是有关如何构建整个应用程序的教程。实际上,本文档重点说明如何利用各种不同的工具的重要开发和设计要点,以便您可以将此知识应用到您自己的 Web 应用程序中,那些工具是工作台附带提供的。
Enterprise JavaBeans™(EJB)可提供一种便捷的方法供 Java 应用程序来访问保存在关系数据库中的数据。可以使用 bean 管理的持久性(BMP)或容器管理的持久性(CMP)来开发实体 bean。因为 EJB 容器在 bean 的指示下进行所有特定于数据库的调用,所以使用 CMP 比使用 BMP 更灵活。缺省情况下,Rational® 工作台中的工具使用 CMP 来生成实体 bean。CMP 实体 bean 不包含访问 SQL 代码。这允许您将此 bean 部署到其他使用不同数据库的 J2EE 服务器,而不需要重写代码。
可以使用不同的方法将对象映射到关系数据库,例如,自顶向下方法、自底向上方法和中间会合方法。自顶向下方法从现有对象开始,然后根据需要定义越来越详细的层,最后设计数据库。自底向上方法使用现有的数据库模式,然后设计用于定义对象的从属层。中间会合方法使用现有数据库和现有对象,然后开发中间层以便将对象匹配到相应的数据库表。
此拍卖应用程序在开发实体 EJB 时使用了自底向上方法。Derby 数据库最初就存在,并包含与所需 EJB 紧密匹配的表。在使用“数据库连接”向导创建与数据库的连接之后,我们使用了“EJB 到 RDB 映射”向导来创建从一个或多个表进行映射的 EJB,但有一些例外。下图显示了在此拍卖应用程序中使用的实体 EJB 以及连接它们的关系。
此拍卖应用程序中的实体 bean 不是由远程客户机直接访问的。所有请求和响应都由会话外观处理,而这些 bean 用于访问后端数据。这样便允许对持久数据存储进行服务器端共享访问。下一部分将更深入地讨论会话外观。
有关映射实体 bean 的更多信息,请参阅“生成自底向上映射”帮助主题。
会话外观是客户机和后端之间的接口。它提供与服务数据对象(SDO)组件的通信,并最终提供与数据库的通信。当客户机发送的请求要求执行多个对象时,会话外观很有用。分别向这些对象发送请求会增加网络流量和等待时间。会话外观用作这两端之间的缓冲区,它从客户机接收一般请求,然后将特定请求发送到必需的对象。这减少了流量并简化了开发客户机的过程。
因为用户只访问他们需要的 EJB,所以可通过对 EJB 进行分组并使用两个不同的外观,来提高应用程序的性能。控制 Web 站点自身的功能(例如,类别)的实体 bean 由系统外观控制。
使用“创建会话 bean 外观”向导,一次选择一个由外观引用的 EJB,如下图所示。如果必要,可在多个外观中引用一个 EJB。在此拍卖应用程序中未这样做。
可以通过对外观添加方法来添加其他功能。例如,在用户外观中,有一个方法返回用户的列表,有另一个方法返回活动用户的列表。使用这些方法作为示例,可以对此用户外观添加另一个方法以便返回所有标记为不活动的用户的列表。
可在 http://java.sun.com./ 上的讨论文章“设计模式:会话外观”中找到有关会话外观的更多信息。
Web Site Designer 工具的“导航”视图提供了站点如何布局的可视表示。它显示了各个页面及其层次结构组织,并对维护站点内页面的布局和组织很有用。将页面拖放到编辑器中时,页面模板中的导航控件会自动更新。例如,在拍卖导航结构如下图所示的情况下,可以通过将出售页面移动到“浏览”页面之前来更改导航选项卡的顺序。Web Site Designer 自动在所有页面上以正确的顺序生成选项卡。要使更改在运行的应用程序中可视,请重新保存每个使用导航模板的页面。
除了上面刚描述过的“导航”视图外,Web Site Designer 还提供了一个详细视图,该视图在一个方便的可编辑的表中组织其他页面元素,如下图所示。此表使更新页面属性(例如,标题、作者和导航标签)变得很容易。
有关使用 Web Site Designer 来管理 Web 站点布局的更多信息,请参阅联机帮助中的“创建 Web 站点结构”主题。
工作台附带提供了一个可视设计器来开发页面模板以及 Web 页面自身。
页面模板是可重用的内容代码片段,这些代码片段为 Web 站点的某些部分提供了公共的外观或行为。要共享公共的外观,Web 页面只需引用这些模板。使用模板对用户和开发者都有好处。用户可轻松地浏览 Web 站点,开发者只需编写特定于某个页面的代码。
页面模板也使得 Web 站点内容维护变得很容易。对模板文件所作的更改会自动反映在每个对其进行引用的页面中。例如,在拍卖 Web 应用程序中,模板 maintemplate.jtpl 提供了拍卖页面的总体布局。Page Designer 中的选用板允许您将元素拖放到 Web 页面,因此您可以通过使用该选用板来对模板添加 Web 页面元素。所需的 HTML 代码也将自动生成。使用此方法可以很容易地修改拍卖模板以使其包含特定的内容,例如,在页脚中包含当前日期和时间。
通过插入调用此模板的标记而不是对导航进行硬编码,可以在此站点的所有页面上包括相同的导航栏。模板映射编辑器将对模板的引用插入到 Web 页面中。
动态模板使此技术更进一步,使用动态模板可以根据用户的角色或能力改变 Web 页面的内容,或是在 Web 页面中插入特定于用户的信息。拍卖样本使用动态模板仅为作为管理员登录的用户在导航栏中提供管理链接,以及在用户成功登录后将“登录”按钮更改为“注销”显示。
有关创建 Web 页面模板的更多信息,请参阅有关“创建页面模板”的帮助主题。
JavaServer Faces(JSF)是一种用于辅助为在应用程序服务器上运行的动态 Web 应用程序构建用户界面的技术。JSF 是一种开放标准语言并使用 JavaServer Faces 标准标记库。这些标记被插入到 HTML 代码来创建动态 Web 页面。
JSF 框架管理各服务器请求中的用户界面状态,并提供了一个简单开发模型来处理由客户机激活的服务器端事件。例如,JSF 可以针对不同的事件(例如,单击按钮)指定特定的行为。Page Designer 有一些内置功能可视地显示在选用板上,可以将它们拖放到 Web 页面。这些拖放功能使得使用 JSF、HTML 和其他脚本元素很容易。这不仅对于控制字段的基本功能(例如,文本字段的值类型:整数或字母数字)很有用,而且还支持设置验证规则。在 Page Designer 中,JSF 控件可以绑定到与每个页面关联的 SDO 数据。
可以使用 Page Designer 选用板来对 JSF 页面添加其他功能。例如,可以对商品详细信息页面添加“立即购买”按钮,以便允许用户以卖方为此商品设定的价格购买此商品。
下图显示了拍卖详细信息页面的 JSF 控件。在选中仅整数复选框的情况下,可以将 newbid inputText 字段限制为只接受整数,如图中右下角所示。inputText 字段具有有关“验证”、“行为”和“辅助功能”的其他设置,如在图中左下角 h:inputText 下面的选项卡中所定义。“验证”选项卡是使用 Java 定义特定的验证规则的地方。例如,newbid inputText 字段的有效输入是一个非空的整数,它比起始竞价要大,还比当前竞价加一要大。
以下代码是为拍卖应用程序的商品详细信息页面上的 newbid inputText 字段生成的。
<h:inputText styleClass="inputText" id="newbid" required="true" size="14"> <f:convertNumber integerOnly="true" /> <f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ? pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid : pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}"> </f:validateLongRange> </h:inputText>
有关开发 Faces JSP 文件的更多信息,请参阅有关 JavaServer Faces 的帮助主题。
因为 Web Service 并不依赖于 Web 应用程序,所以 Web Service 是与 Web 应用程序并行开发的。Web Service 是另一种访问业务逻辑的方法,而且并未包括 Web 应用程序的所有功能。请参阅 Web Service 部分以获取有关拍卖此应用程序片段的更详细描述。