簡介:了解如何在 Apache Geronimo 上使用 Spring 框架創建基本的、沒有任何修飾的應用程序, Spring 框架是在 Apache 許可協議下開發的,是一個分層的 Java™ Platform, Enterprise Edition (Java EE) 和 Java 2 Platform, Enterprise Edition (J2EE™) 應用程序框架。本系列 教程共分為六部分,涵蓋了 Spring 從前端到後端的全部內容,包括如何用 Apache Geronimo 實現其功 能的內容。第 1 部分 介紹了 Geronimo 應用服務器和 Spring 框架,包括控制反轉(Inversion of Control,IoC)和構成 Spring 框架的模塊。本期教程是本系列教程的第 2 部分,您將開發、配置和部 署第一個基於 Spring 框架的應用程序。您還將看到安裝 Geronimo 是多麼容易以及 Geronimo 的 Web 控制台如何簡化 Web 應用程序的部署和管理操作。
開始之前
本系列教程適用於需要了解 Spring 框架的更多信息以及如何在 Apache Geronimo 應用服務器上使用 Spring 框架的強大功能的 Java EE 開發人員。
關於本系列教程
本系 列教程共分為六個部分,向您介紹了 Spring 框架及 Spring 框架怎樣與 Geronimo 結合使用。我們將從 檢驗各種 Spring 框架方法及其怎樣與 Geronimo 服務器結合使用入手。在整個系列教程中,您將開發和 部署個人電話本應用程序。該應用程序包括以下功能:
顯示電話本
顯示每個條目的詳細信 息
向電話本中添加一個新條目
編輯、修改和刪除條目
第 1 部分 介紹了 Spring 框架的各個模塊,並介紹了每個模塊與在 Geronimo 應用服務器上開發 Java EE 應用程序的關系。該部 分還說明了 Spring 框架所基於的方法以及這些技術都使用的核心模式 IoC。
第 2 部分,也就是此部分回顧了如何使用 Spring 框架在 Geronimo 上構建第一個骨架系統應用程序 。
在第 3 部分中,您將采用通過 Apache Derby 數據庫添加 Java 數據庫連接 (JDBC™) 支持來擴展在第 2 部分中獲得的 Geronimo 應用程序。您還將了解如何將對象關系映射集成到使用 iBatis 的應用程序中。
在第 4 部分中,您將面對 Spring 面向方面編程 (AOP) 和 Spring Web 框架。使用 Spring AOP,任何受 Spring 框架管理的對象都可變為面向方面,並且本教程利用了通過 Spring AOP 提供的聲明式事務管理服務。
第 5 部分介紹了 Spring Model-View-Controller (MVC)。該教程向您介紹了 Spring MVC 框架及 Web 視圖,使您可以了解 Spring MVC 的入門知識。
在本教程結束的第 6 部分,介紹了如何通過 Spring 框架使用 JavaServer Page™(JSP™)、Velocity、Tile 和 PDF 導出功能。您將使 用和體驗 Spring MVC 內置的各種 Web 視圖。
關於本教程
本教程將承接 第 1 部分,向 您介紹如何創建使用 Spring 框架的基本應用程序。然後將把該應用程序部署到 Geronimo 應用服務器上 。
在本教程中,您將:
獲得要在本系列中開發的示例應用程序的說明。
安裝 Geronimo 和 Spring 框架。
創建只有骨架的應用程序。
將應用程序部署到 Geronimo 上 。
測試應用程序。
先決條件
本教程假定您熟悉面向對象的編程 (OOP) 並且熟知 Java EE 術語。了解面向方面編程更佳,但不作硬性要求。
系統要求
您的系統需要至少滿 足以下要求才能繼續學習本系列教程:
Apache Geronimo —— Geronimo 是來自 Apache 的 J2EE 認證的應用服務器。
Spring 框架 —— 本教程中使用了 1.2.8 版。
Apache Ant —— 下載並安裝 Apache Ant。您將需要用 Ant 來編譯代碼並為示例應用程序創建 .war 文件。
Sun 的 Java 1.4.2 —— 確保它安裝並運行在您的系統上。
對於 Microsoft® Windows® 用戶:Windows 2000、Windows Server 2003 或 Windows XP。
對於 Linux® 用戶:裝有經過測試的 Sun JDK 1.4.2 的幾乎所有 Linux 都受支持。
足夠的硬件配置:512MB RAM (雖然配有 256MB RAM 即可運行) 以及用於安裝 Geronimo 和 Spring 框架的大約 200MB 可用磁盤空間。
每個教程都會有具體教程所需的其他工具及 API 列表。
個人電話本示例應用程序
在本節中,您將看到將在本系列教程的其他部分中構建的示例應 用程序的概要介紹,包括本系列教程的第 3 部分至第 6 部分所需的更多詳細信息。
應用程序概 覽
您要開發並部署的應用程序是個人電話本,它類似於 Web 聯系人管理程序。該應用程序的功能 十分簡單,您可以將精力集中在開發應用程序所使用的技術上。該應用程序的基本功能包括:
顯 示電話本
顯示每個條目的詳細信息
向電話本中添加新條目
編輯、修改和刪除條目
第 3 部分:集成 DAO 和 ORM
在第 3 部分中,並沒有對用戶界面 (UI) 做大的改動,但所顯示的數據將從數據庫中讀取。您將看到 Spring 支持持久性的兩種不同方法,並將使用 JDBC 來訪問 Geronimo 附帶的 Apache Derby 數據庫。 第 3 部分將介紹以下內容:
使用 iBatis 對象關系映射 (ORM) 將數據映射到對象上
介紹 Derby 數據庫
使用 Spring Data Access Objects (DAO) 將數據保存到 Derby 數據庫中
將 DAO 和 ORM 集成到應用程序中
第 4 部分:將 Spring AOP 與 Web Flow 結合使用
在第 4 部分中,您將了解 Spring 面向方面編程 (AOP) 及如何將它引入 Geronimo 應用程序中。教 程將演示如何在應用程序中使用事務。您還要將應用程序的導航功能更改為受 Spring Web Flow (SWF) 控制。第 4 部分將介紹以下內容:
在後端,您將學習如何使用 Spring AOP 所提供的聲明式事務管理服務。
使用 Spring Web Flow 為該應用程序定義確切的頁面流。
第 5 部分:學習在應用程序中使用 Spring MVC
在本節中,您將使用 Spring 的 MVC 設計模型開發應用程序。第 5 部分深入介紹了 Spring 的 MVC 模塊提供了哪些功能,並將舉例說明 MVC 模塊比其他框架 (如 Struts) 功能強大之處。本教程還將演 示使用由 Spring 框架提供的 MVC 控制器時,將 MVC 模塊部署到 Geronimo 上是多麼輕松。在第 5 部 分中,將不會對 UI 做很多更改。但是您將學習:
使用其他 Spring MVC 控制器重新部署應用程序。
深入了解 Spring Web MVC 控制器和處理程序。
第 6 部分:Spring MVC:使用 Velocity、Tiles 及 PDF 導出
在本系列教程的最後一部分,您將學習在 Spring MVC 模型中如何使用 JSP 和標記庫。您還將學習 Spring 與模板引擎 Velocity 和另一個模板系統 Tiles 集成的方法。在第 6 部分中,您將學習:
添加或修改已有應用程序,以說明使用這些技術的方法。
了解如何導出 PDF。
事件流
下一節將幫助您了解如何處理對應用程序的請求,並舉例說明事件流和所用的容器。
事件流
圖 1 顯示了電話本應用程序將如何處理請求。在安裝 Geronimo 時,Tomcat 容器已被封裝到 Geronimo 內核中。Tomcat 提供了所有與 Web 相關的服務,如 Servlet 引擎,在 HTTP 端口 8080 上偵 聽外來連接的 Web 服務,JSP 處理程序及其他服務。本教程中的應用程序並未使用任何事務,但事務服 務是 Geronimo 非常重視的服務之一。Geronimo 提供的其他重要服務包括安全管理、JDBC 服務和 ORM 服務。
圖 1. 設計在 Geronimo 上顯示應用程序請求的請求流
構成應用程序的組件
將要在本教程中開發的電話本應用程序含有兩個用於表示邏輯和 HTML 代碼的 JSP,以及用作 MVC 架 構中的典型控制器及同時用作表示層和模型層之間接口的 Servlet。
還有兩個配置文件:
web.xml 是 Tomcat 的 Web 應用程序上下文部署描述符 (請記住,您要將 Geronimo 與 Tomcat 容 器結合使用),Tomcat 將把應用程序的相關信息告知 Geronimo。
第二個配置文件 phonebook-servlet.xml 是由 Spring 容器使用的。此配置文件為應用程序定義了應 用程序上下文。
您的 Servlet PhonebookController.java 位於 phonebook/src/phonebook/controller 目錄中,JSP 位於 phonebook/web/WEB-INF/jsp 目錄中。
庫目錄中包含編譯 Java 類所需的 JAR。您需要兩個 JAR:
Servlet-api.jar,它包含 Servlet 2.2 規范的參考實現,位於本教程的源 .zip 文件中。
Spring.jar 是必需的,因為您的 應用程序使用 Spring 框架類,並且它是 Geronimo 發行版附帶的。
注:您需要將 Spring.jar 從 <GERONIMO_HOME>/repository/springframework/jars 復制到庫目錄中,否則將無法編譯代碼 。
source .zip 文件還提供了 Ant 構建文件,因此,您可以輕松地編譯和創建 .war 文件,該 .war 文件可用於將應用程序部署到 Geronimo 上。
圖 2 顯示了此應用程序源文件的目錄結構。
圖 2. 應用程序源代碼的結構
安裝 Geronimo 和 Spring 框架
在本節中,您將學習如何安裝、配置和運行最新版的 Geronimo。本節還介紹了如 何安裝 Spring 框架。
下載 Geronimo
您可以從 apache.org 項目的 Geronimo 主頁中下 載 Geronimo 。有兩個版本可供下載:一個適用於 Jetty,另一個適用於 Tomcat。請下載附帶 Tomcat 的 1.1 版 (我選用 Tomcat 的原因是認為它更易於配置和使用)。您可以選擇與系統兼容的文件壓縮格 式;您可以選擇 .zip 或 tar.gz。
注:如果需要將 Geronimo 部署為企業應用程序,您可在 IBM® Support for Geronimo 站點獲得詳細的系統要求 。
解壓縮發行版
在下載發行 版後,請將其解壓縮到硬盤上。它將創建一個 geronimo-1.1 目錄。請調用這個 GERONIMO_HOME (例如 ,我系統上的 GERONIMO_HOME 是 K:\geronimo-1.1)。
運行它!
只要確保 JAVA_HOME 已正確設置並且 <JAVA_HOME>/bin 在系統路徑中。此時,您已經完全能 夠運行服務器了。現在,打開命令窗口 (對於 Linux 用戶,則為 bash shell),轉到 <GERONIMO_HOME>/bin 目錄,然後鍵入以下命令:java -jar server.jar。
另外,您還可以使用以下命令來啟動 Geronimo 應用服務器: <GERONIMO_HOME>/bin/startup.bat 或 <GERONIMO_HOME>/bin/geronimo.bat start。
如果運行正常,命令行窗口應當類似 清單 1 所示。
清單 1. 啟動 Geronimo 後的命令行窗口
K:\geronimo-1.1\bin>java -jar server.jar
Booting Geronimo Kernel (in Java 1.4.2_04)...
Starting Geronimo Application Server v1.1
[**********************] 100% 16s Startup complete
Listening on Ports:
1099 0.0.0.0 RMI Naming
1527 0.0.0.0 Derby Connector
4201 0.0.0.0 ActiveIO Connector EJB
4242 0.0.0.0 Remote Login Listener
8009 0.0.0.0 Tomcat Connector AJP
8080 0.0.0.0 Tomcat Connector HTTP
8443 0.0.0.0 Tomcat Connector HTTPS
9999 0.0.0.0 JMX Remoting Connector
61616 0.0.0.0 ActiveMQ Message Broker Connector
Started Application Modules:
EAR: geronimo/webconsole-tomcat/1.1/car
RAR: geronimo/activemq/1.1/car
RAR: geronimo/system-database/1.1/car
WAR: geronimo/remote-deploy-tomcat/1.1/car
WAR: geronimo/welcome-tomcat/1.1/car
Web Applications:
http://tez:8080/
http://tez:8080/console
http://tez:8080/console-standard
http://tez:8080/remote-deploy
Geronimo Application Server started
注:您可以按 Ctrl-C 組合鍵來停止服務器;服務器應當會順序關閉。另外,您也可以使用以下命令 停止服務器:<GERONIMO_HOME>/bin/geronimo.bat stop <admin user> <password> 或 <GERONIMO_HOME>/bin/shutdown.bat。
查看服務器的運行狀態
現在,快速查看服務器是否在正常運行。您可以訪問 URL http://localhost:8080/console 轉到 Geronimo Web 控制台進行測試。您的窗口應當如 圖 3 所示。
圖 3. Geronimo Web 控制台窗口
注:您必須以管理員用戶身份登錄來訪問管理控制台。默認的用戶名為 system,密碼為 manager。
恭喜您!此時,您已使 Apache Geronimo 應用服務器啟動並運行了起來,但願您還沒有忙到出汗!
下載 Spring 框架
安裝 Spring 十分容易,其安裝步驟與 Geronimo 的安裝步驟類似。第一步是從 Spring 框架站點下 載最新的 Spring 二進制文件。
您將使用 Spring 框架 1.2.8,它是編寫本教程時最新的產品版本。單擊下載鏈接後,您將有兩個選 項:一個附帶依賴性,另一個僅附帶核心 Spring 框架。請下載 SpringFramework-1.2.8-with- dependencies.zip;該文件包含整個系列教程中開發樣例應用程序所需的所有 Spring 模塊。
解壓縮 Spring 發行版
下載後,您可以將 Spring 發行版解壓縮到 Geronimo 的安裝磁盤。默認情況下,將創建名為 spring-framework-1.2.8 的目錄。您將引用此目錄作為 <SPRING_HOME> (在我的安裝上,此目錄 名為 K:\spring-framework-1.2.8)。
現在,您已經滿足了使用 Spring 框架所需的全部條件。在本教程中,由於將構建只有骨架的應用程 序,因此只需 <SPRING_HOME>/dist 目錄中的 spring.jar,此 jar 文件將與應用程序一起部署。
構建骨架應用程序
現在,您已經安裝並運行了 Geronimo,可以開始開發應用程序了。
應用程序概覽
由於這可能是您部署到 Geronimo 上的第一個 Spring 應用程序,因此請盡量使它小而簡單。這個骨 架應用程序的基本元素包括:
電話本的主頁。
用於顯示拒絕信息的頁腳頁面。
主頁上的電話條目列表。
三個按鈕,目前這三個按鈕不能起任何作用。
頁面上顯示的所有數據都將是靜態的 —— 您無需擔心數據項的格式、驗證或會話 (其他內容除外) 。請記住,本教程的主要目的是要說明如何在 Geronimo 上開發和部署第一個 Spring 骨架應用程序,因 此,您不必在此投入過多精力。
應用程序布局
本節將讓您了解應用程序中有哪些文件以及這些文件在源 .zip 文件中的位置。本教程假定您從頭開 始,並在手動創建目錄結構。
在名為 workspace/phonebook 的 <GERONIMO_HOME> 目錄中創建一個工作目錄。建議在 workspace/phonebook 目錄下創建所有應用程序源文件和構建文件。
開始開發名為 home.jsp 和 footer.jsp 的兩個 JSP 中定義的應用程序視圖。要執行此操作,您必須 在名為 web/WEB_INF/jsp 的 workspace/phonebook 目錄中創建子文件夾。
下一步是創建用於將應用程序部署到 Geronimo 上的配置文件。由於您使用 Tomcat 作為 Geronimo 內的 Web 容器,因此必須讓 Tomcat 知道該應用程序。為此,您需要按照 Tomcat Web 應用程序部署規 范的要求編寫 web.xml 文件。此文件將放在上一步中創建的 WEB-INF 目錄中。
確定 Web 應用程序配置後,下一步是根據 Spring 框架容器在 Geronimo 中運行的需要引入依賴性。 根據 Spring 規范,只有一種方法能完成此操作。必須創建一個新的配置文件,該配置文件的名稱取決於 您的 Servlet 名稱。對於您的應用程序,該配置文件將是 phonebook-servlet.xml,並且它將放在同一 WEB-INF 目錄。
最後,定義應用程序中惟一一個 Java 類:PhoneController.java。它用於實現 Spring 框架所提供 的一個基本控制器。此 Java 類將被定義到 phonebook/src 目錄中。
構建電話本應用程序
此應用程序的起始頁面將被定義為 home.jsp。它包含一個電話本條目列表和三個按鈕。該頁面還包括 已在 footer.jsp 中定義的頁腳。配有不同頁腳的目的是要保存代碼以實現主頁整潔。它還讓您可以選擇 更改拒絕信息,而不影響主頁布局。看看每個頁面。
home.jsp
這是電話本應用程序的主頁。在本教程中,該主頁包含的是靜態信息 (在以後的教程中將改為從數據 庫中東態讀取數據)。它還包括 footer.jsp。清單 2 顯示了 home.jsp 的 JSP 代碼。home.jps 位於 <GERONIMO_HOME>/web/WEB-INF/jsp。
清單 2. home.jps 的 JSP 代碼
<%@page contentType="text/html"%>
>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Phone Book</title>
</head>
<body>
<!--The Heading of the Phone Book Page-->
<h1 align=center>Phone Book</h1>
<BR>
<BR>
<!-- The table containing phone book contents. -->
<TABLE border="1" width="100%">
<TH width="5%" align=center>Select</TH>
<TH width="25%" align=center>Name</TH>
<TH width="15%" align=center>Home Phone</TH>
<TH width="15%" align=center>Work Phone</TH>
<TH width="15%" align=center>Cell Phone</TH>
<TH width="25%" align=center>Email</TH>
<!-- Some static entries. Will be replaced with dynamic
content in following tutorials. -->
<TR>
<TD align=center><input type=checkbox
name=cb_1 alt="Select to Delete" align="middle"></TD>
<TD align=center>Adam Clark</TD>
<TD align=center>1 978 234 7839</TD>
<TD align=center>1 978 134 7830</TD>
<TD align=center>1 978 378 7578</TD>
<TD align=center>[email protected]</TD>
</TR>
<TR>
<TD align=center><input type=checkbox
name=cb_2 alt="Select to Delete" align="middle"></TD>
<TD align=center>Charlie Smearlas</TD>
<TD align=center>1 617 456 6783</TD>
<TD align=center>1 617 290 3556</TD>
<TD align=center>1 617 980 2467</TD>
<TD align=center>[email protected]</TD>
</TR>
<TR>
<TD align=center><input type=checkbox
name=cb_2 alt="Select to Delete" align="middle"></TD>
<TD align=center>Don Brownie</TD>
<TD align=center>1 345 333 5680</TD>
<TD align=center>1 533 290 3556</TD>
<TD align=center>1 678 980 2837</TD>
<TD align=center>[email protected]</TD>
</TR>
<TR>
<TD align=center><input type=checkbox
name=cb_2 alt="Select to Delete" align="middle"></TD>
<TD align=center>Harry potter</TD>
<TD align=center>1 221 456 6453</TD>
<TD align=center>1 567 389 2356</TD>
<TD align=center>1 908 354 2467</TD>
<TD align=center>[email protected]</TD>
</TR>
</TABLE>
<BR>
<BR>
<table align=center>
<!-- The row containing command buttons -->
<TR align=center>
<TD><input type=button name="Add"
value="Add an Entry"></TD>
<TD><input type=button name="Modify"
value="Save Modifications"></TD>
<TD><input type=button name="Delete"
value="Delete Selected Entries"></TD>
</TR>
</table>
</body>
<BR><BR><BR><BR><BR><BR>
<jsp:include page="/WEB-INF/jsp/footer.jsp" />
</html
如您在 清單 2 的 JSP 代碼中所見,首先將創建包含所有電話本條目的表。表中的每一行都有四列, 包括名稱、家庭電話號碼、工作電話和移動電話號碼。您還會注意到,行定義後跟著要使用實際值定義的 表頭。您將在此表中定義條目並用數據填充這些條目。在本系列教程的下一部分中,您將了解如何從數據 庫動態填入這些值。
這個 JSP 頁面中另一個值得注意的一點是三個按鈕的定義。這三個按鈕不起任何作用。您在此處所做 的工作只是為了以後的功能創建基礎。
在此 JSP 的末尾,添加一個調用以包括 footer.jsp,該文件沒什麼用只包含一個聲明。您可以在此 處輕松地添加該文件,但如果將該文件放在一個單獨的 JSP 中,可使 HTML 代碼更加模塊化。
footer.jsp
頁腳頁面向主頁中添加了一個聲明。擁有單獨的頁腳頁面將幫助您把這一段 HTML 代碼輕松地添加到 為應用程序定義的任何 JSP 上。您將看到應用程序的所有頁面中都使用了頁腳頁面。如果需要對聲明信 息作任何更改,則只需更改一個文件而無需在多個不同位置作出更改。清單 3 顯示了 footer.jsp。 footer.jsp 位於 <GERONIMO_HOME>/web/WEB-INF/jsp。
清單 3. footer.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<body>
<font size="1">
<p align=center>
This example is developed to demonstrate the Spring Framework on the
Geronimo application server.
<BR>This example is designed purely for demonstrating the
capabilities of the framework.
It should, under no circumstances, be used for production use.
</p>
</font>
</body>
</html>
Web 應用程序部署描述符:web.xml
您的應用程序是一個 Web 應用程序,因此它需要部署描述符,而 web.xml 提供了該定義。在 web.xml 文件中,開始定義 Servlet 來處理對您應用程序的請求。您可以看到為電話本應用程序指定的 Servlet 是來自 Spring MVC 模塊的 DispatcherServlet。
由於各種原因,我選擇了 DispatcherServlet 來啟動 Spring 應用程序。引入 DispatcherServlet 可使應用程序更靈活。您可以配置此 Servlet 來為頁面解析視圖、語言環境和主題。另一個原因是 Spring MVC 是 Spring 框架入門學習的最簡單的方法,並且它還可以輕松地部署到 Geronimo 上。
DispatcherServlet 只是冰山一角,是 Spring MVC 框架所提供的眾多功能之一。在本系列教程的第 5 部分中,您將了解到關於 Spring 的 MVC 框架的更多信息。該部分介紹了 Spring MVC 附帶的各種控 制器和處理程序。
DispatcherServlet 要求在 <servlet-name>-servlet.xml 文件 (本例中為 phonebook- servlet.xml) 中定義控制器和其他配置。您很快就會看到此文件。您還要為電話本 Servlet 定義 URL 映射。*.do 模式的所有 URL 請求都將被分發到電話本 Servlet 中。清單 4 顯示了 web.xml 代碼。 web.xml 位於 <GERONIMO_HOME>/web/WEB-INF/ 目錄中。
清單 4. 電話本應用程序的 web.xml 部署描述符
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Phone Book</display-name>
<servlet>
<servlet-name>phonebook</servlet-name>
<servlet-class>org.springframework.web.servlet.
DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>phonebook</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
現在,您已經定義完應用程序的視圖和將應用程序部署到 Geronimo 中所需的部署描述符。下一節將 向您說明如何為應用程序定義 Spring Web 應用程序上下文。
Web 應用程序上下文簡介
本節介紹了用於應用程序的應用程序上下文。在 第 1 部分 的應用程序上下文概覽中,您了解了應用 程序上下文可提供的功能。功能之一是 URL 映射,而且您也要在此使用該功能。
應用程序上下文定義文件:phonebook-servlet.xml
phonebook-servlet.xml 文件用於為已在 web.xml 文件中定義的 DispatcherServlet 指定應用程序 上下文。該文件的文件名是根據 web.xml 中的 servlet 名稱再附加 -servlet 而得來的。這是 Spring 框架所遵循的命名約定。您還要在此文件中將應用程序要使用的控制器定義為 PhonebookController。
在此文件中,您將完成兩件事:
為電話本指定將用作控制器的 Bean。
添加 URL 映射使 DispatcherServlet 知道應當為不同的 URL 調用哪些控制器 (本例中為 /home.do )。
清單 5 顯示了 phonebook-servlet.xml 文件,可在 <GERONIMO_HOME>/web/WEB-INF/ 目錄中 找到。
清單 5. phonebook-servlet.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<!--
- Application Context definition for "phonebook" DispatcherServlet.
-->
<beans>
<bean name="PhonebookController"
class="phonebook.controller.PhonebookController"/>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop
key="/home.do">PhonebookController</prop>
</props>
</property>
</bean>
</beans>
電話本 Controller Bean
您的應用程序的最後一部分是 Controller Bean,在這裡名為 PhonebookController.java,位於 <GERONIMO_HOME>/src/phonebook/controller/PhonebookController 目錄中。此控制器將處理請 求並將 ModelAndView 對象返回給 Spring 容器。本例中的視圖是您在前一節中定義的 home.jsp。這是 您可以獲取的原始控制器!代碼如 清單 6 所示。
清單 6. PhonebookController.java 文件
package phonebook.controller;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
/*
* PhonebookController.java
*
* This class is a simple Spring controller. This controller is
registered as a
* Bean in the PhoneBook ApplicationContext.
*
* @author Arun Chhatpar
* @version 1.0
*/
public class PhonebookControllerimplements
Controller{
/** Creates a new instance of PhonebookController */
public PhonebookController() {
}
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
return new ModelAndView("/WEB-INF/jsp/home.jsp");
}
}
好啦!您已經完成了應用程序的編碼工作。
構建應用程序
您將使用 Ant build 腳本來構建應用程序,因此,請確保滿足運行 Ant 的下列所有要求:
將 ANT_HOME 設為系統變量。
正確設定 JAVA_HOME。
<JAVA_HOME>/bin 已在路徑中。
<ANT_HOME>/bin 已在路徑中。
接下來,打開一個命令行窗口 (對於 Linux 用戶,則是 bash shell),轉至 <GERONIMO_HOME>/workspace/phonebook 目錄,然後鍵入以下命令:ant dist。如果運行正常,您 的窗口應當顯示 清單 7 中的內容。
清單 7. 使用 Ant 腳本創建 .war 文件
K:\geronimo-1.0\workspace\phonebook>ant dist
Buildfile: build.xml
build:
[mkdir] Created dir: K:\geronimo-1.0\workspace\phonebook\.classes
[javac] Compiling 1 source file to
K:\geronimo-1.0\workspace\phonebook\.clas
ses
dist:
[mkdir] Created dir: K:\geronimo-1.0\workspace\phonebook\dist
[war] Building war:
K:\geronimo-1.0\workspace\phonebook\dist\phonebook.war
BUILD SUCCESSFUL
Total time: 2 seconds
K:\geronimo-1.0\workspace\phonebook>
Ant build 將在 <GERONIMO_HOME>/dist 目錄中創建一個 phonebook.war 文件。
您的應用程序現在就可以部署到 Geronimo 上了。
把應用程序部署到 Geronimo 上
在本節中,您將把示例應用程序部署到 Geronimo 上。
使用 Web 管理控制台
部署應用程序的最簡單方法就是通過 Web 管理控制台來執行部署任務。您可以使用該控制台提供的 Deploy New 選項。單擊 Deploy New 後,Web 控制台應當顯示如 圖 4 所示的界面。
圖 4. Deploy New 應用程序控制台
在此控制台中,您只需在 Archive 字段中浏覽並選擇應用程序的 .war 文件,然後單擊 Install 按 鈕。此時,請不要在 Plan 字段中放入任何內容。如果運行正常,您應當會看到一條消息,告訴您 Application deployed successfully。
測試已部署的應用程序
部署後,您可以通過 URL http://localhost:8080/phonebook/home.do 來測試應用程序。如果您看到 如 圖 5 所示的頁面,那麼,恭喜您!您已經成功地完成了骨架應用程序的開發、配置和部署工作。
圖 5. 在 Geronimo 上運行的電話本應用程序
接下來會發生什麼?
現在,圖 1 中所示的設計圖表就有用了。
對 home.do 頁面的請求轉到了 Geronimo。運行在 Geronimo 容器內部的 Tomcat Web 容器將為應用 服務器處理請求。然後,Tomcat 將讀取配置文件,尤其是 web.xml,並發現已將 DispatcherServlet 配 置為處理此請求。請求將被轉發給 DispatcherServlet。
DispatcherServlet 是 Spring MVC 框架的一部分,因此 Spring 容器將從此處接管,並將嘗試算出 如何處理此請求或者由哪個控制器來處理此請求。它將使用依賴性注入來計算這個問題。phonebook- servlet.xml 中定義的應用程序上下文是用於幫助 Spring 容器將 /home.do 請求與 PhonebookController 關聯起來的文件。該請求將被轉發給 PhonebookController 類,然後該類將返回 home.jsp 頁面。該應答將被轉發給 Tomcat 容器,該容器將編譯 JSP 並將應答返回給浏覽器。
好啦 —— 這就是您的應用程序在 Geronimo 上使用 Spring 框架運行的過程。您深入學習本系列教 程的後續內容後,將可了解關於此工作流程的更多信息。
Spring 的優點
本教程中介紹的示例應用程序是部署到 Geronimo 上並可以使用其他框架 (例如 Struts) 的,但我 認為如果使用 Spring 在以下幾方面會更有優勢:
Spring 不會強制您使用特定的技術 —— 例如,JSP。您可以輕松地將 Servlet 甚至普通舊式 Java 對象 (POJO) 用於應用程序中,而且 Spring 不會有任何不兼容的情況,並一如既往地服務於此應用程序 。
Spring 對各種組件的劃分十分清晰。您可能在開發應用程序時就注意到了 Spring 是怎樣清晰地劃分 了控制器 (DispatcherServlet)、JavaBean 模型 (PhonebookController 類) 和視圖 (您定義的兩個 JSP)。Spring 容器在運行時使用配置文件將所有組件整合在一起。
Spring 提供了一個瘦 Web 層。使用 Spring,可以將業務邏輯與視圖完全分隔開,不僅如此,視圖不 需要知道或考慮如何管理業務對象。Spring 容器可以關注業務邏輯與視圖的關系,還可以管理對象的生 命周期。
Spring 提供了簡單的單元測試。當應用程序各組件之間的依賴性較弱時,單獨測試這些應用程序組件 就會變得更簡單。
敬請期待下一部分
下一個教程第 3 部分將繼續介紹將該應用程序構建到的位置。您將使用 Spring DAO 和 ORM 框架展 開應用程序以顯示從 Apache Derby 數據庫中動態獲取的電話本內容。
結束語
在本教程中,您了解了如何開發、配置和部署第一個基於 Spring 框架的應用程序,並把它部署到了 Geronimo 應用服務器上。您看到了安裝 Geronimo 是多麼簡單以及 Geronimo 中的 Web 控制台怎樣簡化 了 Web 應用程序的部署和管理工作。
您還簡單地體驗了在本系列教程中將要開發的應用程序。這樣做的目的是保持示例應用程序簡單性, 使您可以在繼續學習下一個教程時仍把注意力放在 Geronimo 和 Spring 框架上。
隨文源碼:http://www.bianceng.net/other/201212/687.htm