程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Eclipse Web工具平台V1.0簡介

Eclipse Web工具平台V1.0簡介

編輯:關於JAVA

預備知識

關於本教程

本教程使用 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 中使用的數據源配置

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
   <local-tx-datasource>
    <jndi-name>DerbyDS</jndi-name>
    <connection-url>jdbc:derby://localhost:1527/wtp;create= 
     true</connection-url>
    <driver-class>org.apache.derby.jdbc.ClientDriver</driver-class>
    <user-name>APP</user-name>
    <password>password</password>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <idle-timeout-minutes>5</idle-timeout-minutes>
    <track-statements/>
   </local-tx-datasource>
</datasources>

請把 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.xml
15:51:10,719 INFO [RARDeployment] Started\
jboss.jca:service=ManagedConnectionFactory,name=DerbyDS
15: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 obj = 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 obj = 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 out = 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.<br>");
   }
   if (title == null || title.length() < 5) {
     errors.append("The title must be at least 5 characters long.<br>");
   }

   String redirectPage;
   if (errors.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("<html>Invalid Request</html>");
}

這段代碼驗證根據書簽 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 的 <body></body> 標記之間。

清單 11. CreateNewBookmark.jsp 的 HTML 實現

<form action="/BookmarkWeb/BookmarkController" method="post">
Url: <input type="text" name="url"><br>
Title: <input type="text" name="title"><br>
<input type="submit" value="Save">
</form>

創建 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.<br>");
}
if (title == null || title.length() < 5) {
   errors.append("The title must be at least 5 characters long.<br>");
}

String redirectPage;
if (errors.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 的 <body></body> 標記之間。這個代碼輸出 BookmarkController 設置的錯誤字符串。

清單 13. SaveBookmarkError.jsp 的實現

The following errors were found attempting to save your bookmark:<p>

<%
   out.println(request.getAttribute("errors"));
%>
<p>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 的實現

<%@ page language="java" \
contentType="text/html; charset=ISO-8859-1" \
import="java.util.ArrayList, ejbs.BookmarkValueObject"
   pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>All Bookmarks</title>
</head>
<body>
Bookmarks:<br>
<%
   ArrayList bookmarks = (ArrayList) request.getAttribute("bookmarks");
   for (int i = 0; i < bookmarks.size(); i++) {
     BookmarkValueObject bvo = (BookmarkValueObject) bookmarks.get(i);
     out.println("<a href=\"" + bvo.getUrl()+ "\">" + bvo.getTitle() + "</a><br>");
   }
%>
<br>
<a href="CreateNewBookmark.jsp">Create Another Bookmark</a>
</body>
</html>

部署和測試

現在已經實現了書簽應用程序的所有部分。本教程的最後一步就是用配置好的 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.SecureRandom
00:24:03,286 INFO [Engine] StandardManager[/BookmarkWeb]:
  Seeding of random number generator has been completed
00:24:03,296 INFO [Engine] StandardWrapper[/BookmarkWeb:default]:
  Loading container servlet default
00:24:03,296 INFO [Engine] StandardWrapper[/BookmarkWeb:invoker]:
  Loading container servlet invoker
00:24:05,750 INFO [EARDeployer] Started J2EE application:
  file:/C:/wtp/jboss-3.2.3/server/default/deploy/BookmarkEAR.ear
00: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 和數據庫開發工作有了基本的理解。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved