本章講解了一個簡單的Struts應用例子helloapp應用,這個例子可以幫助讀者迅速入門,獲得開發Struts應用的基本經驗。該應用的功能非常簡單,接受用戶輸入的姓名<name>,然後輸出"Hello <name>" 。開發helloapp應用涉及以下內容:
分析helloapp應用的需求
在開發應用時,首先從分析需求入手,列舉該應用的各種功能,以及限制條件。helloapp應用的需求非常簡單,包括如下需求:
?接受用戶輸入的姓名<name>,然後返回字符串"Hello <name> !"
?假如用戶沒有輸入姓名就提交表單,將返回出錯信息,提示用戶首先輸入姓名。
?假如用戶輸入姓名為"Monster",將返回出錯信息,拒絕向"Monster"打招呼。
為了演示模型組件的功能,本應用使用模型組件來保存用戶輸入的姓名。
運用Struts框架
下面把Struts框架運用到helloapp應用中。Struts框架可以方便迅速的把一個復雜的應用劃分成模型、視圖和控制器組件,而Struts的配置文件struts-config.XML則可以靈活的組裝這些組件,簡化開發過程。
以下是helloapp應用的各個模塊的構成:
?模型包括一個JavaBean組件PersonBean,它有一個userName屬性,代表用戶輸入的名字。它提供了get/set方法,分別用於讀取和設置userName屬性,它還提供一個save()方法,負責把userName屬性保存到持久化存儲系統中,如數據庫或文件系統。對於更為復雜的Web應用,JavaBean組件可以作為EJB或Web服務的前端組件。
?視圖包括一個jsp文件hello.jsp,它提供用戶界面,接受用戶輸入的姓名。視圖還包括一個ActionForm Bean,它用來存放表單數據,並進行表單驗證,假如用戶沒有輸入姓名就提交表單,將返回出錯信息。
?控制器包括一個Action類HelloAction,它完成三項任務:1.進行業務邏輯驗證,假如用戶輸入的姓名為"Monster", 將返回錯誤消息;2.調用模型組件PersonBean的save()方法,保存用戶輸入的名字;3.決定將合適的視圖組件返回給用戶。
除了創建模型、視圖和控制器組件,還需要創建Struts的配置文件struts-config.xml,它可以把這些組件組裝起來,使它們協調工作。此外,還需要創建整個Web應用的配置文件web.xml。
創建JSP文件和ActionForm Bean
本例中,視圖包括兩個組件:
?一個JSP文件:hello.jsp
?一個ActionForm Bean: HelloForm Bean
下面分別講述如何創建這兩個組件。
Struts框架的數據驗證功能
幾乎所有和用戶交互的應用都需要數據驗證,而從頭設計並開發完善的數據驗證機制往往很費時。幸運的是,Struts框架提供了現成的、易於使用的數據驗證功能。
創建控制器組件:HelloAction.java
控制器組件包括ActionServlet類和Action類。ActionServlet類是Struts框架自帶的,它是整個Struts框架的控制樞紐,通常不需要擴展。Struts框架提供了可供擴展的Action類,它用來處理特定的HTTP請求,例程2-4為HelloAction類的源程序。
創建模型組件:PersonBean.java
PersonBean是一個非常簡單的JavaBean,它包括一個userName屬性,以及相關的get/set方法。此外,它還有一個業務方法saveToPersistentStore()。
創建存放常量的Java文件
HelloAction類和視圖組件之間通過HttpServletRequest的setAttribute()和getAttribute()方法來共享request范圍內的數據。下面再看一下HelloAction類調用HttpServletRequest的setAttribute()方法的細節。
創建Web應用和Struts框架的配置文件
對於Struts應用,它的配置文件web.xml應該對ActionServlet類進行配置,此外,還應該聲明Web應用所使用的Struts標簽庫,本例中聲明使用了三個標簽庫: Struts Bean、Struts Html和Struts Logic標簽庫。
發布和運行helloapp應用
helloapp應用作為Java Web應用,它的目錄結構應該符合Sun公司制定的Java Web應用的規范,此外,由於helloapp應用使用了Struts框架,因此應該把Struts框架所需的JAR文件和標簽庫描述文件TLD文件包含進來。
小結
本章通過簡單完整的helloapp應用例子,演示了如何把Struts框架運用到Web應用的開發中。通過這個例子,讀者可以把握以下內容:
?分析應用需求,把應用分解為模型、視圖和控制器來實現這些需求。
?利用Struts的標簽庫來創建視圖組件。視圖組件中的文本內容保存在專門的消息資源文件中,在JSP文件中通過Struts的bean:message標簽來訪問它,這樣可以很方便的實現Struts應用的國際化,支持多國語言。
?Struts框架采用ActionForm Bean把視圖中的表單數據傳給控制器組件。ActionForm Bean被存放在request或session范圍內,它能夠被JSP組件、Struts標簽以及Action類共享。
?數據驗證分為兩種類型:HTML表單驗證和業務邏輯驗證。表單驗證由ActionForm Bean的validate()方法來實現。業務邏輯驗證由Action類或模型組件來實現。
?ActionMessage可以表示數據驗證錯誤,它被保存在ActionMessages(或其子類ActionErrors)集合對象中。ActionMessages對象被保存在request范圍內,Struts的視圖組件可以通過html:errors標簽來訪問它。
?Action類的execute()方法調用模型組件來完成業務邏輯,它還能決定把客戶請求轉發給哪個視圖組件。
?模型組件具有封裝業務實現細節的功能,開發者可以方便的把模型組件移植到遠程應用服務器上,這不會對MVC的其它模塊造成影響。
?通過調用HttpServletRequest或HttpSession的setAttribute()以及getAttribute()方法,可以保存或訪問在request或session范圍內的Java對象,從而實現視圖組件和控制器組件之間信息的交互與共享。
?利用struts-config.xml文件來配置Struts應用。(T111)