控制器(Controller)的作用是從客戶(hù)端接受請求,并且選擇執行相應的業(yè)務(wù)邏輯,然后把響應結果送回到客戶(hù)端。在Struts中Controller由ActionServlet類(lèi)和Action類(lèi)來(lái)實(shí)現。ActionServlet主要負責接受HTTP請求信息,Action類(lèi)負責調用模型的方法,更新模型的狀態(tài),并幫助控制應用程序的流程。
小區物業(yè)管理系統是物業(yè)部門(mén)用來(lái)對住宅小區內的建筑、住戶(hù)、設備、人員等信息進(jìn)行綜合管理的一個(gè)信息管理系統。根據客戶(hù)要求,系統要能對小區內建筑、公共設備、住戶(hù)等基本信息實(shí)現錄入、修改、查詢(xún)和刪除等操作,并且還要實(shí)現包括水、電、煤氣費在內的各項物業(yè)管理費用的統計、查詢(xún)和報表生成。因此,實(shí)現該物業(yè)管理系統功能模塊圖如下:
該模塊主要實(shí)現對已經(jīng)入住的住戶(hù)進(jìn)行費用(物業(yè)管理費、水費、電費和煤氣費)繳納的各方面管理,具體包括以下幾個(gè)部分:收費類(lèi)別設置、收費項目設置、
計量單位設置、表設置、用戶(hù)抄表、應收款和收款單等?!?/div>
2、系統開(kāi)發(fā)流程
采用B/S模型的多層
框架結構開(kāi)發(fā)的小區物業(yè)管理系統,MVC模式主要對應應用服務(wù)器的部分,前端響應用戶(hù)的請求,后端負責與數據庫服務(wù)器之間的數據變換,中間為應用邏輯層,負責具體業(yè)務(wù)的處理?,F依據Struts框架的3個(gè)基本組成部分:視圖、模型和控制器,簡(jiǎn)要描述系統的設計過(guò)程
[4]。
?。?)視圖設計
應用系統的用戶(hù)界面通常由JSP頁(yè)面組成。在系統的六個(gè)模塊中,各類(lèi)信息的添加、刪除、修改和瀏覽都通過(guò)JSP頁(yè)面進(jìn)行表現。系統在處理每個(gè)數據表示主要是用兩個(gè)JSP頁(yè)面進(jìn)行表示:一個(gè)頁(yè)面用于數據的添加、刪除、修改,另一個(gè)頁(yè)面用于數據的瀏覽。
?。?)構建模型
Struts應用框架通常預先為每個(gè)應用所需要的輸入表單創(chuàng )建一個(gè)ActionForm Bean。如果這些bean定義在A(yíng)ctionMapping配置文件中,Struts控制器Servlet將自動(dòng)執行這些預先設定的操作。因此,在系統開(kāi)發(fā)中,首先為每個(gè)模塊建立相應的ActionForm Bean,再根據每個(gè)模塊的實(shí)際功能為每個(gè)Bean定義用戶(hù)操作狀態(tài)和視圖中所需要顯示數據信息的參數,視圖可以通過(guò)操作狀態(tài)的不同進(jìn)行不同的界面表示。
?。?)構建控制器
在Struts應用框架中,中心控制器(ActionServlet)接受所有來(lái)自客戶(hù)端的請求,并根據系統的配置文件Struts-config.xml制定用戶(hù)HTTP請求到其他Action對象的路徑。中心控制器是由Struts框架本身所提供,在系統開(kāi)發(fā)中我們無(wú)須對ActionServlet進(jìn)行再開(kāi)發(fā),而負責具體業(yè)務(wù)處理的Action類(lèi)則是系統開(kāi)發(fā)的重點(diǎn)。
在視圖、模型、控制器對象設計完成后,需要編輯兩個(gè)配置文件:web.xml和struts-config.xml,通過(guò)它們配置Struts系統中各個(gè)模塊之間的交互。
Struts框架在系統開(kāi)發(fā)中的應用
小區物業(yè)管理系統是一個(gè)復雜的大型Web應用系統,為了能夠清楚地描述Struts在系統開(kāi)發(fā)中的應用,本文將以收費管理模塊中用戶(hù)成功登入系統并進(jìn)行數據錄入和查詢(xún)這一應用為例進(jìn)行較詳盡的說(shuō)明。
1、分析應用需求
在該應用中,主要事件包括:
?。?)提供
用戶(hù)登錄界面,提示用戶(hù)輸入用戶(hù)名和密碼,并能夠對用戶(hù)在客戶(hù)端輸入的數據進(jìn)行簡(jiǎn)單的數據格式驗證。若登錄成功,轉入主操作界面,否則給出錯誤提示信息,重新登錄。
?。?)由主操作界面轉入物業(yè)管理費錄入界面,用戶(hù)在表單中輸入相關(guān)信息(用戶(hù)ID、日期),提交表單。若提交表單成功,則轉入確認界面,顯示用戶(hù)輸入的信息。
?。?)由主操作界面轉入查詢(xún)界面,用戶(hù)輸入相關(guān)信息后,查詢(xún)出某段時(shí)間內該用戶(hù)的物業(yè)管理費用。
?。?)用戶(hù)退出系統,返回主菜單頁(yè)面。
2、該應用的具體設計
2.1 數據庫設計
針對該應用,需在數據庫中創(chuàng )建兩張表:PORPERTY_TABLE和USER_TABLE,各表結構如下:
表1 USER_TABLE
字段 | 類(lèi)型 | 說(shuō)明 |
UserName | char(25) | 記錄登錄到系統的用戶(hù)名 |
Password | char(25) | 記錄登錄用戶(hù)的登錄密碼 |
表2 PORPERTY_TABLE
字段 | 類(lèi)型 | 說(shuō)明 |
OwnerID | char(8) | 記錄唯一表示每個(gè)用戶(hù)的ID |
Date | datetime(8) | 記錄繳費日期 |
RAre | float(8) | 記錄用戶(hù)的房屋面積 |
Charge | float(8) | 記錄應該繳納的物業(yè)管理費 |
FeeState | char(20) | 顯示用戶(hù)是否繳費 |
2.2 設計模型組件
在Struts框架中,模型組件負責完成業(yè)務(wù)邏輯。在該應用中,模型組件包括一個(gè)實(shí)用類(lèi)DbConnect和兩Jave Bean:UserBean和PorpertyBean。
實(shí)用類(lèi)DbConnect負責建立和數據庫的連接,所提供的connectToDb()方法具體來(lái)實(shí)現和數據的連接并返回這個(gè)連接。UserBean代表用戶(hù)信息,包括UserName和Password這兩個(gè)屬性。PorpertyBean代表物業(yè)費用信息,包括OwnerID、Data、OwnerName等幾個(gè)屬性。這兩個(gè)JavaBean提供了相應的get/set方法,此外還負責查詢(xún)以及向數據庫中對應的表添加/查詢(xún)記錄。
2.3 用戶(hù)界面設計
用戶(hù)界面是Web應用和用戶(hù)的窗口,既可以接受用戶(hù)的輸入信息也可以向用戶(hù)輸出信息。表3列出了該應用中用到的用戶(hù)界面及其說(shuō)明。
表3 用戶(hù)界面及其說(shuō)明
界面 | 說(shuō)明 |
Welcome界面(index.jsp) | 顯示歡迎光臨信息,提供到登入界面的鏈接 |
登入界面(logon.jsp) | 提示輸入用戶(hù)名和密碼 |
主操作菜單界面(mainmenu.jsp) | 提供系統所有操作菜單 |
物業(yè)收費數據錄入界面(input.jsp) | 提示輸入有關(guān)物業(yè)費用相關(guān)信息 |
收費確認界面(confirmation.jsp) | 根據用戶(hù)錄入的信息返回該用戶(hù)物業(yè)費用的所有信息(如:應繳的費用,是否已繳費等) |
物業(yè)費查詢(xún)界面(search.jsp) | 提供用戶(hù)輸入相關(guān)查詢(xún)條件 |
顯示查詢(xún)結果界面(display.jsp) | 根據用戶(hù)查詢(xún)條件顯示查詢(xún)結果 |
為保持該應用中所有界面風(fēng)格的一致性,在設計上述這些界面的過(guò)程中,我們除了使用標準的JSP<include>語(yǔ)句外,還使用了Struts的Titles框架來(lái)創(chuàng )建復合式的JSP頁(yè)面,使所有界面具有相同的頁(yè)頭和頁(yè)腳。
2.4、設計ActionForm
ActionForm Bean用于在視圖組件和控制器組件之間傳遞HTML表單數據。通常每個(gè)HTML表單對應一個(gè)ActionForm Bean,每個(gè)ActionForm的validate( )方法用于實(shí)現對用戶(hù)輸入數據進(jìn)行格式和語(yǔ)法檢查。在該應用中包含三個(gè)ActionForm Bean:LogonForm、InputForm和SearchForm。
2.5、設計Action和Action映射
在Struts框架中,Action實(shí)現各個(gè)事件的流程控制,Action映射決定Action與其他web組件之間的關(guān)聯(lián)關(guān)系。表4列出了該應用中用到的Action、每個(gè)Action的入口(調用Action的組件)、傳遞給Action的ActionForm以及每個(gè)Action把請求轉發(fā)到的目標組件即出口。
表4 該應用中的Action
Action | 入口 | ActionForm | 出口 |
LogonAction | logon.jsp | LogonForm | mainmenu.jsp |
InputAction | input.jsp | InputForm | confirmation.jsp |
SearchAction | search.jsp | SearchForm | display.jsp |
LogoffAction | mainmenu.jsp | 無(wú) | index.jsp |
圖3給出了該應用中Action組件與其它組件的映射關(guān)系圖。
圖3 Action映射圖
上述所有Action組件需要在Struts的配置文件struts-config.xml中配置其映射關(guān)系。
應用Struts框架的優(yōu)點(diǎn)
?。?)整個(gè)物業(yè)管理系統包括上百個(gè)文件,若采用傳統的結構,要弄清楚某個(gè)視圖是使用什么模型來(lái)處理邏輯是件很復雜的事。而采用Struts框架來(lái)開(kāi)發(fā)的應用系統,依靠JSP和Struts-config.xml以及它們間的統一命名規則卻很容易地進(jìn)行系統流程的查勘、修改和理解。只要根據視圖Form表單的Action,在配置文件中找到同名的Action定義,就可以得知其路徑以及相應的FormBean。
?。?)Struts中所有邏輯處理都封裝在class內,視圖部分不再介入邏輯的處理,計算和顯示清楚地分開(kāi)了,在JSP頁(yè)面上沒(méi)有出現處理過(guò)程,在Servlet或商業(yè)邏輯中沒(méi)有數據格式。并且基于Struts框架開(kāi)發(fā)出的JSP代碼也很簡(jiǎn)潔,JSP頁(yè)面中不含有Java代碼,只含有Script和使用Struts標簽庫的HTML,頁(yè)面開(kāi)發(fā)人員不必為修改視圖而必須先理解模型,很大程度上提高程序開(kāi)發(fā)效率。
結束語(yǔ)
Struts是一個(gè)實(shí)現良好的MVC框架,在現代軟件開(kāi)發(fā)中,越來(lái)越多的應用于大型Web應用系統的開(kāi)發(fā)?;赟truts框架的小區物業(yè)管理系統的順利開(kāi)發(fā),也證實(shí)了Struts框架是一種非常優(yōu)秀的J2EE/MVC實(shí)現方式。該物業(yè)管理系統將為小區物業(yè)管理部門(mén)提供一個(gè)全新的工作環(huán)境,給物業(yè)管理的日常工作帶來(lái)了極大的方便,提高了工作效率,具有很好的推廣價(jià)值和應用前景。