當你提交一個HTML表單到這個框架中的時候,輸入并不是被發送到服務頁,而是被發送到你提供的Java類,這些類被稱為Action。在這些Action執行完后,選擇某一個資源來呈現返回結果,這個資源一般是頁面,但也可以是PDF文件,或者是Excel文件,亦或是Java applet窗口。
假設你想要創建一個“Hello World”的例子來呈現歡迎信息,在你準備好開發環境后,為了創建一個“Hello World”的例子,你需要做如下三件事情:
1. 創建一個jsp頁面來呈現歡迎信息;
2. 創建一個Action類來創建信息;
3. 在配置文件中配置action和頁面的映射關系。
注意:為了創建這個組件,我們將工作流分成幾乎無人不曉的三部分:視圖、模型和控制器。分離這三部分的原因是當系統變得越來月復雜的時候,我們能夠更好的管理。
一. 準備工作
建立web工程,其中工程名為tutorial,在WebRoot下引入struts2的lib下的如下4個包:
commons-logging-1.1.jar
freemarker-
ognl-
struts2-core-
xwork-
在web.xml文件中增加struts2的FilterDispatcher,修改后的web.xml如下:




















二. 代碼
首先,我們需要一個jsp頁面來呈現信息,HelloWorld.jsp頁面代碼如下所示:











接著,我們需要一個Action類來創建信息,代碼如下:


























第三步,我們需要在配置文件中進行相應配置來將兩者聯系起來。讓我們編輯src下的struts.xml文件,該文件內容如下:












代碼已經完成,讓我們來嘗試運行它。部署該應用程序并打開http://localhost:8080/tutorial/HelloWorld.action,我們可以看到標題欄為:Hello World,并且顯示“Struts is up and running!”的頁面呈現在我們面前。
三. 代碼是如何工作的?
你的瀏覽器向Web服務器發送了的http://localhost:8080/tutorial/HelloWorld.action(注:tutorial為部署在Tomcat中的的項目名稱)的URL請求后,服務器做了如下工作:
1. 容器接收到了Web服務器對資源HelloWorld.action的請求,根據web.xml中的配置,服務器將包含有.action后綴的請求轉到org.apache.struts2.dispatcher.FilterDispatcher類進行處理。這個FilterDispatcher是框架的一個進入點;
2. 框架在struts.xml配置文件中找到名為HelloWorld的action對應的類。框架初始化該Action并且執行該Action類的execute方法;
3. execute方法將信息放入message變量中,并返回成功。框架檢查配置以查看當返回成功時對應的頁面。框架告訴容器來獲得請求返回的結果頁面HelloWorld.jsp;
4. 在HelloWorld.jsp執行完后,<s:property value="message" />標簽調用HelloWorld的Action類中的getMessage方法來獲得message的值,并將合并了值的頁面呈現給用戶;
5. 一個純粹的HTML頁面顯示在用戶的瀏覽器上。
四. 測試Action
測試Action很簡單,以下是上述HelloWorld的Action類的測試類的代碼:



















五. 需要記住的東西
本框架利用Action來處理HTML的表單以及其余請求。Action返回一個結果的名字字符串,例如SUCCESS、ERROR以及INPUT等,從struts.xml中獲取映射信息。一個給定的結果字符串將選擇一個頁面或其他資源(圖片或PDF)來返回給用戶。
當一個jsp被載入的時候,通常有一些動態變化的元素需要Action來載入。為了更加容易的顯示動態數據,本框架提供了一些可以跟HTML配合使用的標簽。
六. 問題匯總
對于出現啟動失敗,例如Cannot locate the chosen ObjectFactory implementation: spring等錯誤的朋友,請仔細檢查你引入的包。關于需引入的包,請參見第一節(準備工作)。也希望遇到其余問題的朋友留言或發Email給我,在此進行匯總。
下一篇:基礎篇:使用Struts2的標簽
上一篇:基礎篇:序言