EclipseWeb工具平台V1.0简介

预备知识

关于本教程

本教程使用 Web 工具平台 (WTP)中包含的工具、Derby 数据库 Eclipse 插件和 JBoss 应用程序服务器构建一个包含 Java Server Page(JSP)、servlet 和会话 bean 的示例 Java 2 Platform,Enterprise Edition(J2EE)应用程序。示例应用程序是个简单的书签存储程序。

先决条件

在学习本教程之前,您应对 J2EE 有基本的理解,包括 JSP、servlet 和 EJB。还应熟悉 Eclipse 的使用。最后,也要理解简单的结构化查询语言(SQL)。本教程并未覆盖 WTP 提供的所有特性。

系统需求

使用的 UNIX®、Linux®、Mac OS X 或 Microsoft® Windows® 系统必须有:

正常工作的 Java 虚拟机(JVM)

足够的硬盘空间以容纳后面列出的软件包

足够的空间以创建本教程的工作区和关联的项目

足够的空间以创建新数据库和 J2EE Enterprise Archive(EAR)文件

足够的物理内存以同时运行 Eclipse、JBoss 和 Derby

在开始学习之前,必须在系统上安装一些软件包:

下载并安装 Java 2 Standard Edition(J2SE)Software Development Kit(SDK)的 1.4.2 版。本教程使用 J2SE 1.4.2_10。

下载并释放以下内容到目录中,供以后使用:

JBoss Application Server 3.2.3。tgz 或 zip 版本均可。请确保下载完整发行包,不要下载 JBossweb-tomcat* 版本。

XDoclet-lib1.2.3。tgz 或 zip 版本均可。

下载 WTP V1.0,并在 Eclipse IDE 安装中配置它。如果要把 WTP 添加到现有 Eclipse 安装,请检查在安装 WTP 之前是否已经安装了适当的前提条件。另一种选择是,如果正在使用 Linux 或 Windows,可以下载 WTP 的 all-in-one 发行版。这个发行版包含完整的 Eclipse IDE、WTP 的必备条件和 WTP V1.0。

下载 Apache Derby V10.1.2 Eclipse plug-ins (derby_core_plugin_10.1.2.zip 和 derby_ui_plugin_1.1.0.zip)。各插件的安装方式是把 zip 文件解压到 Eclipse 文件夹下的 Eclipse IDE 的安装目录。

Eclipse WTP 基础

Eclipse 用户长期以来一直在使用 IDE 中包含的 Java 开发工具(JDT)开发 Java 类和应用程序。虽然 JDT 对于基本的 Java 应用程序来说足够了,但是它没有提供开发包含 JSP、servlet 和企业 JavaBean(EJB)的 J2EE 应用程序所需要的特性。所以,WTP 被创建出来,以将 J2EE 开发的支持添加到 Eclipse IDE。

Eclipse WTP 以两种关键方式对 Eclipse 进行扩展。首先,它添加了对 J2EE 相关文件格式和对象类型的编辑器和内容支持。类型包括 JSP、servlet、会话 bean 和 XML。WTP 还扩展了 Eclipse 中的运行/调试支持,支持像启动/停止应用程序服务器和执行 JSP 这样的任务。

Eclipse WTP 还包含了工具平台和 API 的定义,软件供应商可以利用它们创建 J2EE 工具。J2EE 供应商,例如 BEA Systems、Borland、IBM 和 JBoss 都已经接受采用 WTP。WTP V1.0 可以在像 BEA Workshop 和 IBM Rational® Application Developer for WebSphere® Software 这样的商业产品中找到。本教程并不讨论 WTP 作为工具平台的作用,而是侧重于使用 WTP 创建 J2EE 应用程序。

WTP 组件

WTP 包含两个子项目:Web 标准工具(WST)和 J2EE 标准工具(JST)。WST 项目为 Eclipse 开发环境提供了针对基于 Web 的应用程序的公共基础设施。包括对超文本标记语言(HTML)、层级样式表(CSS)等的支持。WST 不支持以 J2EE 为核心的概念(例如 JSP 和 servlet)。WST 还包含基本的数据工具支持,其中有浏览数据库和对数据库执行 SQL 查询的能力。JST 项目支持 J2EE 技术(例如 JSP 和 EJB)。

JBoss V3.2.3 设置

本教程以 JBoss V3.2.3 作为运行 JSP、servlet 和 EJB 的应用服务器。为顺利学习本教程,您对 WTP 和 Eclipse 进行配置,使其在开发期间使用 JBoss。

配置 Java V1.4.2 JRE

本教程将 1.4.2 Java 软件开发包(JDK)与 WTP 和 JBoss 结合使用。如果运行 Eclipse 时未使用与 1.4.2 兼容的 JDK。必须在 Eclipse 的已安装 Java 运行时环境(JRE)中配置一个。请按如下步骤进行操作:

从菜单中选择 Window > Preferences。

在弹出的对话框中,选择 Java > Installed JREs。

选择 Add 选项。在 Add JRE 对话框中,浏览并选择 1.4.2 JRE 的目标安装目录。

为 JRE 提供一个名称(例如 Java 1.4.2 JDK),单击 OK。

选中新安装的 JRE 旁边的复选框,把它作为默认 JRE(请参阅图 1)。

图 1. 添加了 1.4.2 JDK 之后的 Eclipse Preferences 对话框

配置 JBoss 服务器环境

下一步是配置 JBoss 服务器环境:

在 Preferences 对话框左侧的树中,选择 Server > Installed Runtimes。

单击 Add 按钮,在弹出对话框的树中选择 JBoss 3.2.3。单击 Next。

在 JBoss V3.2.3 运行时屏幕上,选择刚刚添加的 JRE 作为 JRE。对于应用程序服务器目录,浏览并选择选择前面解压 JBoss 的目录。单击 Finish。

选中新创建的 JBoss V3.2.3 服务器旁边的复选框,将其作为默认服务器(请参阅图 2)。

图 2. 添加了 JBoss 3.2.3 服务器配置之后的 Eclipse Preferences 对话框

配置 JBoss 服务器实例

现在可以配置和测试 JBoss 服务器实例:

切换到 J2EE 透视图。把右下角的服务器视图拖到其他标签上面会有所帮助。

右击服务器视图,并选择 New > Server。

选择 JBoss v3.2.3,并单击 Finish。

在服务器视图中出现一个 JBoss v3.2.3 条目。右击此条目,并选择 Start。

出现控制台视图,并开始列出 JBoss 服务器启动时的输出(请参阅图 3)。

图 3. 启动 JBoss 之后的控制台

WTP 项目配置

您需要创建项目来容纳 EJB 和 JSP。在这一节,我们将创建一个 EJB 项目和一个动态 Web 项目,并将它们与 EAR 项目关联,EAR 项目中包含 JBoss 应用服务器使用的可部署 EAR。

创建 EJB 项目

要创建 EJB 项目,请按以下步骤操作:

切换到 J2EE 透视图。

在左侧的树中,右击 EJB Projects 文件夹,并选择 New > EJB Project。

在出现的向导中,输入 BookmarkEJB 作为名称。

选择 Add project to EAR 选项,并输入 BookmarkEAR 作为 EAR 项目名称。单击 Next。

在下一个屏幕中选择 ejbdoclet 选项,并单击 Next。

取消对 Create EJB Client JAR 选项的选择,单击 Finish 完成向导。

在项目生成之前,您必须同意许可协议请求。随后 BookmarkEJB 项目就会出现在 Project Explorer 中,如图 4 所示。

图 4. 创建了 BookmarkEJB 项目之后的 Project Explorer

创建动态 Web 项目

创建动态 Web 项目与创建 EJB 项目类似。请按以下步骤进行操作:

在 Project Explorer 中右击 Dynamic Web Project 文件夹,选择 New > Dynamic Web Project。

在出现的向导中,输入 BookmarkWeb 作为项目名称。

选择 Add Project to EAR 选项,并指定与 EJB 项目向导中使用的同一个 BookmarkEAR 项目。单击 Next。

选择 webdoclet 选项,单击 Finish 完成向导。

展开的 Project Explorer 现在应当如图 5 所示。

图 5. 创建了BookmarkWeb 项目之后的 Project Explorer

数据库设置

本教程使用 Apache Derby V10.1.2 作为数据库。这一节我们将配置 Derby Eclipse 插件,将 Derby 作为 JBoss 数据源添加,并用 WTP 数据工具创建一个保存书签的表。

Derby 插件设置

Derby 插件把 Derby 作为项目性质添加进来,以便在 Eclipse IDE 中使用。这允许在 Eclipse 内用 Derby 方便地进行开发。针对本教程的目的,要在 BookmarkEJB 项目上启用 Derby 性质。为此,请右击 BookmarkEJB 项目,并选择 Apache Derby > Add Apache Derby nature 菜单选项。多个与 Derby 相关的 JAR 将添加到项目中。

下一步是启动 Derby 网络服务器。为此,请右击 BookmarkEJB 项目,并选择 Apache Derby > Start Derby Network Server。将看到如图 6 所示的控制台输出。

图 6. Derby 启动时的控制台

WTP 数据工具的配置

如前所述,WTP 项目包含数据库工具,可以用它们浏览数据库并执行基本的 SQL 命令。现在要配置 WTP 数据工具,使它们可为刚刚创建的 Derby 服务器所用。请按以下步骤进行操作:

选择 Window> Show View > Other,打开数据浏览器透视图。

在后续的对话框中,Data 分类下的 Data Explorer,并单击 OK。

现在可以添加连接。请在新出现的 Data Explorer 窗口中右击 Connections 项目并选择 New Connection。

在所显示向导的左侧树中选择 Derby 10.1 选项。

把 JDBC driver 选项改成 Derby Client JDBC Driver。

对于数据库,输入 wtp。

提供 APP 作为用户名, password 作为口令。

现在必须指定 Derby JDBC 驱动程序的类的位置。请浏览到 Eclipse 安装文件夹;在 plugins/org.apache.derby.core_10.1.2 目录下,选择 derbyclient.jar 文件。单击 Next,打开过滤器页面。

取消 Disable filter 的选择,并在包含 Starts with characters 短语的复合框旁边的文本字段中输入 APP。

单击 Finish 完成向导。

现在,在 Database Explorer 中展开树,会看到如图 7 所示的视图。

图 7. 展开的 Database Explorer 视图

创建表和开发数据

数据库配置好之后,可以用 WTP 数据工具创建书签表。请按以下步骤操作:

在展开的 Database Explorer 树中右击 Tables 文件夹,并选择 New > With SQL Editor。

清空出现的编辑器,并粘贴进清单 1 的 CREATE TABLE 语法。

右击 SQL 编辑器,选择 Run SQL。即可看到数据输出视图,如图 8 所示.

图 8. Database Output 视图

清空 SQL 编辑器,粘贴进清单 2 的两个 insert 语句。

再次右击 SQL 编辑器,并选择 Run SQL。

切换回 Database Explorer 视图,右击 Tables 文件夹,并选择 Refresh。将看到书签表。

右击表,并选择 Data > Sample Contents,可以看到刚刚插入表的两行,如图 9 所示。

图 9. 书签表的内容

清单 1. 书签表的 CREATE TABLE SQL

CREATE TABLE APP.bookmarks (  url VARCHAR(255) NOT NULL,  title VARCHAR(255) NOT NULL,  PRIMARY KEY(url) );

清单 2. 书签表的 Insert SQL

insert into bookmarks values('http://www.ibm.com', 'IBM United States');insert into bookmarks values('http://www.eclipse.org', 'Eclipse.org home');

JBoss 数据源配置

为了在 JBoss 应用程序服务器容器内使用 Derby 数据库,必须配置 Derby 数据源:

如果 JBoss 服务器正在运行,先停止它,方法是在服务器视图中右击其条目,并选择 Stop。

在 JBoss 安装目录的 {$JBoss_install_dir}/server/default/deploy 文件夹中,创建名为 derby-ds.xml 的文件,并插入清单 3 所示的内容。

清单 3. derby-ds.xml 中使用的数据源配置

       DerbyDS    jdbc:derby://localhost:1527/wtp;create=      true    org.apache.derby.jdbc.ClientDriver    APP    password    5    20    5      

请把 derbyclient.jar 从 {$eclipse_installation_dir}/plugins/org.apache.derby.core_10.1.2 文件夹复制到 {$JBoss_install_dir}/server/default/lib 目录。这样做会把 Derby JDBC 驱动程序文件添加到 JBoss 服务器的类路径。

从服务器视图启动 JBoss 服务器实例,就像前面描述的一样。控制台上对 “Derby” 的搜索输出如清单 4 所示。

清单 4. Derby 数据源配置之后的 JBoss 控制台输出

15:51:10,649 INFO [MainDeployer] Starting deployment of package:/file:/C:/wtp/JBoss-3.2.3/server/default/deploy/derby-ds.xml15:51:10,719 INFO [RARDeployment] Started/JBoss.jca:service=ManagedConnectionFactory,name=DerbyDS15:51:10,739 INFO [JBossManagedConnectionPool] Started/JBoss.jca:service=ManagedConnectionPool,name=DerbyDS 

示例书签应用程序

本教程接下来的部分就是用 WTP 工具创建一个保存和检索书签的 J2EE 应用程序。应用程序使用基本的三层设计,如图 10 所示。

图 10. 示例应用程序的三层

视图包含一系列 JSP;控制器是一个 servlet。无状态会话 bean EJB 被用来保持和检索数据库的数据。

创建会话 bean 来保存和检索书签

在这一节,将创建一个无状态会话 bean,保持和检索 Derby 数据库的书签。

XDoclet 配置

WTP 用 XDoclet 注释进行 EJB 和 servlet 开发。所以,在创建会话 bean 之前需要在 Eclipse 中配置 XDoclet 的位置:

打开 Preferences 对话框,选择左侧的 XDoclet 分类。把版本改为 1.2.3。

浏览文件系统并选择前面解压 XDoclet 库发行版的目录。对话框发生变化,表明已经找到了所有的库,如图 11 所示。

图 11. 配置 XDoclet

还必须启用首选项,指定 ejbdoclet 和 webdoclet 要生成特定于 JBoss 的 J2EE 描述符。在 XDoclet 分类,请选择 ejbdoclet 选项。

选择 JBoss 任务旁边的复选框。

选择 webdoclet 子分类,在这个列表中也选择 JBoss 任务。图 12 和 13 显示了带有正确设置的对话框。

单击 OK 关闭 Preferences 对话框。

图 12. 配置 webdoclet

图 13. 配置 ejbdoclet

用 WTP 向导创建会话 bean

下面用 WTP 企业管理器创建无状态会话 bean:

右击 BookmarkEJB 项目,并选择 New > Other。

在 Select a Wizard 对话中,选择 EJB 分类下的 XDoclet Enterprise JavaBean,并单击 Next。

在下一个屏幕中单击 Next,会出现一个页面,要求指定 EJB 的包和类的名称。请输入 ejbs 作为包名,BookmarkSessionBean 作为类名。

单击 Finish 完成向导。XDoclet 过程开始运行,并创建了 EJB 需要的文件,然后出现在 Project Explorer 中,如图 14 所示。

图 14. 生成的 EJB 类

实现 BookmarkSessionBean

WTP 创建的 BookmarkSessionBean 只是一个基本框架。必须提供实现它的数据持久性和检索功能所需要的 XDoclet 标记和方法。首先,需要添加配置信息,让 BookmarkSessionBean 访问在这份教程前面配置的 DerbyDS 数据源。请切换到 Java 透视图,打开 BookmarkSessionBean 类。在 @ejb.bean.. 声明下面,添加来自清单 5 的 XDoclet 标记,把 DerbyDS 配置成 BookmarkSessionBean 使用的资源。

清单 5. XDoclet 标注把 DerbyDS 资源添加到 BookmarkSessionBean

* @ejb.resource-ref res-name="DerbyDS"*           res-ref-name="DerbyDS"*           description = "DerbyResource"*           type = "javax.sql.DataSource"*           res-auth = "Container"*           jndi-name="DerbyDS"** @JBoss.resource-ref res-ref-name="DerbyDS"            jndi-name="DerbyDS"

编辑器现在看起来应当与图 15 类似。

图 15. 把 XDoclet 标记添加到 EJB

现在需要一个 BookmarkValueObject 类,在视图和 BookmarkSessionBean 之间传递以完成持久性。创建此类,方法如下:

在 Java 视图中右击 ejbs 包,并选择 New > Class。

指定 BookmarkValueObject 作为类名称,并添加 java.io.Serializable 作为接口,如图 16 所示。

单击 Finish 完成向导。

把实现从清单 6 粘贴到 BookmarkValueObject 类,并保存。

图 16. 创建 BookmarkValueObject

清单 6. BookmarkValueObject 的实现代码

private String url;private String title;public BookmarkValueObject(String url, String title) {   this.url = url;   this.title = title;}public String getTitle() {   return title;}public void setTitle(String title) {   this.title = title;}public String getUrl() {   return url;}public void setUrl(String url) {   this.url = url;}

值对象创建之后,即可实现 BookmarkSessionBean 需要的其他逻辑。请删除 getFoo() 方法并关联来自 BookmarkSessionBean类的 XDoclet 注释,并粘贴进清单 7 的方法实现。然后,运行 Edit > Organize Imports,添加必要的类导入。

清单 7. BookmarkSessionBean 的持久性方法

/**  * @ejb.interface-method view-type="both"  */public List getBookmarks() {   try {     DataSource dataSource = getDerbyDataSource();     Connection connection = dataSource.getConnection();     Statement statement = connection.createStatement();     ResultSet result = statement         .executeQuery("select * from bookmarks");     List bookmarks = new ArrayList();     while (result.next()) {       BookmarkValueObject bvo = new BookmarkValueObject(result           .getString(1), result.getString(2));       bookmarks.add(bvo);     }     return bookmarks;   } catch (SQLException e) {     e.printStackTrace();   }   return null;}   /**    * @ejb.interface-method view-type="both"    */   public void saveBookmark(BookmarkValueObject bvo) {     try {       DataSource dataSource = getDerbyDataSource();       Connection connection = dataSource.getConnection();       PreparedStatement pstmt = connection            .prepareStatement("insert into bookmarks             VALUES(?, ?)");       pstmt.setString(1, bvo.getUrl());       pstmt.setString(2, bvo.getTitle());       pstmt.execute();     } catch (SQLException e) {       e.printStackTrace();     }   }   private DataSource getDerbyDataSource() {     DataSource dataSource = null;     try {       Context context = new InitialContext();       Object bj = context.lookup("java:DerbyDS");       dataSource = (DataSource)                      PortableRemoteObject.narrow(obj,           DataSource.class);     } catch (NamingException e) {       // TODO Auto-generated catch block       e.printStackTrace();     }     return dataSource;   }

创建控制器 servlet

书签应用程序需要的持久性现已完成。下一步是实现控制器 servlet,处理验证工作并用 BookmarkSessionBean 来保持 BookmarkValueObject。

用 WTP 向导创建 servlet

WTP 提供了自动创建 servlet 的向导。请按以下步骤操作:

切换回 J2EE 视图,打开 BookmarkWeb 项目。

右击树中的 servlet,并选择 New > Servlet。

在出现的向导中,指定包为 servlets,类名是 BookmarkController。

单击 Finish 完成向导。编辑器会打开生成的 servlet。

为了在 BookmarkController 中使用 BookmarkSessionBean,必须把 BookmarkEJB.jar 配置成 BookmarkWeb 项目的相关项:

右击 BookmarkWeb 项目,并选择 Properties。

选择 J2EE Module Dependencies 分类,如图 17 所示,并选中 BookmarkEJB.jar 旁边的复选框。

单击 OK,关闭 Properties 对话框。

图 17. 配置 BookmarkWeb 项目相关性

实现 BookmarkController servlet

实现 BookmarkController servlet 的第一步是添加 XDoclet 注释,指定 BookmarkSessionBean 作为资源。请将清单 8 的代码复制粘贴到 BookmarkController 中 @web.servlet.mapping 属性下面的 XDoclet 类 注释区。

清单 8. XDoclet 注释向 BookmarkController servlet 添加 BookmarkSessionBean EJB 引用

* @web.ejb-local-ref home="ejbs.BookmarkSessionLocalHome"*          local="ejbs.BookmarkSessionLocal"*          name="ejb/BookmarkSession" type="Session"*          link="BookmarkSession"** @JBoss.ejb-local-ref ref-name="BookmarkSession"*           jndi-name="ejb/ejbs/BookmarkSessionHome"*

指定了会话 bean 引用之后,下一步需要添加方法,查找 bean 实例。请将清单 9 中的复制粘贴代码到 servlet。

清单 9. BookmarkSessionBean 的查询方法

private BookmarkSessionLocalHome bookmarkSessionLocalHome;private BookmarkSessionLocal getBookmarkSession() {   if (null == bookmarkSessionLocalHome) {     try {       Context context = new InitialContext();       Object bj = context           .lookup("java:comp/env/ejb/BookmarkSession");       bookmarkSessionLocalHome =          (BookmarkSessionLocalHome) PortableRemoteObject           .narrow(obj, BookmarkSessionLocalHome.class);     } catch (NamingException e) {       e.printStackTrace();     }   }   try {     return bookmarkSessionLocalHome.create();   } catch (CreateException e) {     e.printStackTrace();   }   return null;}

这个方法查询本地 home BookmarkSessionBean 对象,并返回实现 BookmarkSessionLocal 接口的对象。

完成 BookmarkController 的最后一步是实现它的 doPost() 方法。请粘贴清单 10 中的实现方法,然后运行 Edit > Organize Imports 添加必要的类导入。

清单 10. doPost() 实现

response.setContentType("text/plain");PrintWriter ut = response.getWriter();if (request.getParameterMap().size() > 0) {   String url = request.getParameter("url");   String title = request.getParameter("title");   StringBuffer errors = new StringBuffer();   if (url == null || url.length() < 12) {     errors.append("The url must be at least 12 characters long.");   }   if (title == null || title.length()  0) {     request.setAttribute("errors", errors);     redirectPage = "/SaveBookmarkError.jsp";   } else {     getBookmarkSession().saveBookmark(new        BookmarkValueObject(url, title));     request.setAttribute("bookmarks",       getBookmarkSession().getBookmarks());     redirectPage = "/ShowAllBookmarks.jsp";   }   ServletContext sc = getServletContext();   RequestDispatcher rd =      sc.getRequestDispatcher(redirectPage);   rd.forward(request, response);} else {   out.println("Invalid Request");}

这段代码验证根据书签 URL 和标题所提供的值。如果发现错误,控制器就重定向到错误 JSP 视图。否则,就保存书签。控制器随后检索所有的书签,并重定向到显示书签的 JSP。

创建视图 JSP

书签应用程序需要实现的最后一部分是视图。视图包含三个 JSP:

CreateNewBookmark.jsp

SaveBookmarkError.jsp

ShowAllBookmarks.jsp

用 WTP 向导创建 CreateNewBookmark.jsp

右击 BookmarkWeb 项目的 WebContent 文件夹,并选择 New > JSP。在新建 Java 服务器页面向导中,输入文件名称 CreateNewBookmark.jsp,并单击 Finish 完成向导。出现一个编辑器,里面是生成的 JSP 内容。请为新 JSP 提供一个标题。

CreateNewBookmark.jsp 页面接下来要求一些内容。这个页面被用来输入书签的 URL 和标题。然后提供的信息被提交给 BookmarkController servlet。请从清单 11 将实现 HTML 代码复制粘贴到 JSP 的 标记之间。

清单 11. CreateNewBookmark.jsp 的 HTML 实现

Url: Title: 

创建 SaveBookmarkError.jsp

按照前一节的过程用 WTP 向导创建 SaveBookmarkError.jsp。这个页面显示 BookmarkController 在 request 对象中设置的错误。清单 12 显示了从控制器的 doPost() 方法中摘录的一段代码。这个代码检查提交的 URL 和标题字符串中的错误。如果发现错误,就设置 errors 属性,并把 servlet 重定向到 SaveBookmarkError.jsp。

清单 12. BookmarkController 摘录

String url = request.getParameter("url");String title = request.getParameter("title");StringBuffer errors = new StringBuffer();if (url == null || url.length() < 12) {   errors.append("The url must be at least 12 characters long.");}if (title == null || title.length()  0) {   request.setAttribute("errors", errors);   redirectPage = "/SaveBookmarkError.jsp";} else {   ...}ServletContext sc = getServletContext();RequestDispatcher rd = sc.getRequestDispatcher(redirectPage);rd.forward(request, response);

清单 13 包含的实现代码,应当粘贴到 SaveBookmarkError.jsp 的 标记之间。这个代码输出 BookmarkController 设置的错误字符串。

清单 13. SaveBookmarkError.jsp 的实现

The following errors were found attempting to save your bookmark:

Please press your browser's back button and fix the errors.

Creating the ShowAllBookmarks.jsp

按照前一节的过程用 WTP 向导创建 ShowAllBookmarks.jsp 页面。这个页面显示书签表中包含的全部书签。清单 14 显示了从控制器的 doPost() 方法中摘录的另一段代码。在保存了提交的书签之后,数据库中所有书签的列表被设置在 request 对象的 bookmarks 属性中。然后把 servlet 重定向到这个页面。

清单 14. BookmarkController 摘录

if (errors.length() > 0) {   ...} else {   getBookmarkSession().saveBookmark(new      BookmarkValueObject(url, title));   request.setAttribute("bookmarks",     getBookmarkSession().getBookmarks());   redirectPage = "/ShowAllBookmarks.jsp";}ServletContext sc = getServletContext();RequestDispatcher rd = sc.getRequestDispatcher(redirectPage);rd.forward(request, response);

清单 15 包含 ShowAllBookmarks.jsp 的实现。这个代码在 ArrayList 上迭代,并输出每个书签。

清单 15. ShowAllBookmarks.jsp 的实现

All BookmarksBookmarks:<%   ArrayList bookmarks = (ArrayList) request.getAttribute("bookmarks");   for (int i = 0; i Create Another Bookmark

部署和测试

现在已经实现了书签应用程序的所有部分。本教程的最后一步就是用配置好的 JBoss 服务器实例测试应用程序。

部署应用程序

在项目浏览器中右击 CreateNewBookmark.jsp,并选择 Run As > Run on Server。在出现的向导中,JBoss 服务器实例是突出显示的。单击 Finish 完成向导,并开始发布应用程序。若打开的浏览器视图形如图 18 所示,则说明书签 EAR 仍然在部署中。

图 18. J2EE 应用程序未完全部署时生成的错误

请等候,直到控制台包含与清单 16 类似的输出。这个输出表明 JBoss 已经完成了 BookmarkEAR.ear 文件的部署。

清单 16. 成功部署之后的 JBoss 控制台输出

00:24:03,286 INFO [Engine] StandardManager[/BookmarkWeb]:  Seeding random number generator 类 java.security.SecureRandom00:24:03,286 INFO [Engine] StandardManager[/BookmarkWeb]:  Seeding of random number generator has been completed00:24:03,296 INFO [Engine] StandardWrapper[/BookmarkWeb:default]:  Loading container servlet default00:24:03,296 INFO [Engine] StandardWrapper[/BookmarkWeb:invoker]:  Loading container servlet invoker00:24:05,750 INFO [EARDeployer] Started J2EE application:  file:/C:/wtp/JBoss-3.2.3/server/default/deploy/BookmarkEAR.ear00:24:05,750 INFO [MainDeployer] Deployed package:  file:/C:/wtp/JBoss-3.2.3/server/default/deploy/BookmarkEAR.ear

测试应用程序

刷新浏览器视图可以看到新的书签表单。如果您未填写任何字段就单击 Save,将生成如图 19 所示的输出 —— SaveBookmarkErrors.jsp。

图 19. SaveBookmarkErrors 视图 JSP 的输出

单击浏览器视图的后退按钮,并输入正确的 URL 和标题。单击 Save,将看到数据库的书签列表,如图 20 所示。

图 20. ShowAllBookmarks 视图 JSP 的输出

结束语

本教程使用 Eclipse WTP 包含的多种工具创建了 J2EE 示例书签应用程序。对 WTP 进行配置,使其使用 JBoss 应用服务器、Derby 数据库和 XDoclet 注释。用 WTP 包含的向导和编辑器 WTP 创建了一个 EJB、一个 servlet 和几个 JSP。最后,还用 WTP 提供的部署机制测试了应用程序。

阅读本教程后,您应已对 WTP 和它所包含的 Web、J2EE 和数据库开发工作有了基本的理解。

如果你在以的话,别人就会知道你害怕被说,他们就会加倍地说你,

EclipseWeb工具平台V1.0简介

相关文章:

你感兴趣的文章:

标签云: