頊 聰 王雅軒
摘要:Struts 是當前應用開發中最為流行的框架之一。它提供一個非常好的MVC框架,在Web應用開發中把界面和業務邏輯分離,提高了代碼的可重用性和靈活性,便于組件式開發。文章簡要介紹MVC設計模式和Struts框架的體系結構和工作原理,然后結合一個實例,講述Struts實現MVC模式Web應用的過程。
關鍵詞:MVC模式;Struts;Web應用
中圖分類號:G642 文獻標識碼:A
傳統的Web應用開發工具(ASP、JSP)將頁面顯示、商業邏輯和數據處理大部分都集中在頁面代碼中,Web應用擴展維護比較困難,在大型Web應用開發中愈發顯得力不從心。MVC設計模式將頁面顯示、商業邏輯和數據處理相分離,最大限度地降低系統各部分之間的耦合性,提高代碼重用率,易于分工協作。而Struts是一個為開發基于MVC模式的應用架構的開源框架。
1MVC設計模式
MVC設計模式是一種著名的用戶界面軟件開發設計模式,它是模型-視圖-控制器(Model-View-Controller)縮寫。在MVC設計模式中,它把應用程序分成了3個核心部分,原理如圖1所示。
(1) 模型(Model)。模型封裝了用戶數據和處理數據的業務邏輯,體現了應用程序的當前狀態,而且可以將用戶數據狀態的變化提供給多個顯示該數據的視圖共用。
(2) 視圖(View)。視圖提供了用戶界面,是用戶和應用程序的交互的窗口,既接受用戶輸入,也把模型數據狀態顯示給用戶,但是視圖不負責任何業務邏輯處理,僅僅是將用戶輸入數據傳遞給控制器或將模型數據顯示給用戶。
(3) 控制器(Controller)??刂破鬟B接了模型和視圖,根據用戶請求判斷將請求交給哪個模型來完成,然后調用視圖來顯示模型處理后的用戶請求結果。
MVC設計模式將應用程序進行了分層,提高了軟件的可擴展性、可維護性。
2Struts框架
Struts框架繼承了MVC設計模式的特性,是J2EE體系架構的一種輕量級實現。其工作原理如圖2所示:
(1) 控制器的實現。Struts框架中采用了ActionServlet和Action類以及Struts-config.xml配置文件作為控制器的實現。其中,Struts-config.xml配置文件配置了不同用戶請求及對應的具體業務邏輯組件來供ActionServlet類查詢。ActionServlet類是中心Servlet,負責處理所有的用戶請求。當用戶提出請求,ActionServlet類最先對請求進行處理,它將根據Struts-config.xml配置文件將用戶請求映射到具體的Action類;而當Action類調用模型組件處理好用戶請求,并返回了處理結果后,仍然由ActionServlet類根據Struts-config.xml配置文件將結果轉發到視圖提供給用戶,或者轉發另外一個Action做進一步處理。Action類實現了具體的業務邏輯,它接受用戶的輸入,然后調用具體的模型組件來完成用戶請求。
(2) 視圖的實現。Struts構架主要采用了JSP作為視圖的實現,它提供了豐富的JSP標簽庫支持應用程序的開發,而且引入了ActionForm組件(實質為JavaBean)作為用戶表單的封裝來完成數據的傳輸。
(3) 模型的實現。Struts框架對模型——即復雜的數據持久化層沒有提供太多的支持,但是這也就是說開發人員有更多自由來選擇合適量級的持久化技術,比如Hibernate、EJB等。
3Struts工作流程
對于采用Struts 框架的Web應用,其具體工作流程如下:
(1) 客戶端通過本地瀏覽器向服務器發出一個請求;
(2) 控制器接收請求,找到對應的Action;
(3) Action類執行建立在模型組件基礎上的業務邏輯;
(4) 一旦Action類處理完業務邏輯,它把控制權返回給ActionServlet;
(5) 當ActionServlet把Action類的處理結果傳送到指定的視圖中。
4Web開發中的應用
以一個Web考試系統中的考生注冊子系統為例,說明Struts 在Web程序開發中的應用。考生在注冊頁面上輸入考生名、密碼等相關信息,若注冊成功,控制將轉向一個顯示注冊成功的頁面,否則控制將轉向一個顯示失敗的頁面。具體步驟如下:
(1) 項目建立。
(2) 實現視圖功能的用戶界面的設計。Struts中,JSP 頁面中利用Struts框架提供的taglib 標記庫的標記能夠大大提高開發效率。在該系統中,其注冊頁面reguserinfo.jsp 概要如下:
…
//引用Struts bean 標記
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
…
…
(3) 實現模型功能的組件設計。模型部分包含了應用程序的業務邏輯。
① 系統狀態組件(FormBean),即實體模型類,它繼承自ActionForm類,用來存放表單數據,與注冊頁面的表單對應的數據Bean如下:
…;
public class UserForm extends ActionForm{
…
public String getUserID(){return userID;}
public void setUserID(String userID)
{this.userld= userID;}
…
}
② 指令類組件(ActionBean),它擴展了Action 類,主要是用來控制應用程序的流程,當注冊考生按“Submit”按鈕后,來自用戶的請求被Servlet 送到指令類組件RegUserAction,指令類調用相應的業務邏輯進行處理,然后把請求轉發給相關的JSP,其程序概要為:
…;
public class RegUserAction extends Action
{
public ActionForward perform(ActionMapping
mapping, ActionForm form, HttpServletRequest
req, HttpServletResponse response) {
//獲取注冊信息,并據此做相應操作
…
}
}
(4) 實現控制器功能的指令。控制器類ActionServlet的核心是Struts-config.xml 配置文件,它包含了應用程序的整個邏輯流程。在考生注冊信息過程中,用reguserinfo.jsp實現注冊頁面;用UserForm(擴展了ActionForm)封裝了表單數據;用RegUserAction實現了考生注冊信息并控制了應用程序流程;而在Struts-config.xml 配置文件里實現了注冊頁面(reguserinfo.jsp)、數據Bean(UserForm)、邏輯Bean(RegUserAction)之間的聯系,其配置信息為:
…
name="userForm"scope="request">
…
當在注冊頁面上單擊“Submit”按鈕時,考生請求被提交給ActionServlet, ActionServlet 根據Struts-config.xml 中的配置信息,把/reguser.do 的URL映射到RegUserAction,把考生注冊信息封裝到UserForm,由RegUserAction 完成
注冊操作,然后轉發給“/regsuccess.jsp”。
(5) 系統運行。 完成整個系統的功能實現。
5總結
Struts體系框架自從2001年7月發布了1.0版之后,已經越來越得到Java開發者的支持,實踐證明,Struts體系框架的確是一個優秀的框架,大大縮短了Java Web應用程序的開發周期,提高了系統開發效率。
參考文獻:
[1] 孫衛琴. 精通Struts:基于MVC的JavaWeb設計與開發[M]. 北京:電子工業出版 ,2004.
[2] 閻宏. Java與模式[M].北京:電子工業出版社,2002.
[3] Ted Husteel, Cedric Dumoulin, David Wiwerfeldt, et al.《Struts in Action》[M]. ManningPublication co.2001.
Application Methods of Struts Framework Based on MVC Designed Pattern
XU Cong, WANG Ya-xuan
(Software College, Dalian University of Foreign Language, Dalian 116044, China)
Abstract: Struts is one of the most popular frameworks for Web applications and developments nowadays. It brings a very good MVC framework and separate interface and business logic. It aided in the code reusability and flexibility for components developments. This paper briefly introduces MVC(Model/View/Controller)designing mode and the Struts framework. An example is given to illustrate how to design web application of MVC patterns using Struts.
Key words: MVC pattern; Struts; Web application