一、Struts的體系結構
如圖所示,Struts 是MVC的一種實現,其體系結構包括模型、視圖和控制器三部分。
下面讓我們從MVC的角度來看看struts的體系結構與工作原理:
1. Model部分
Struts 的Model部分由 ActionFormBean和JavaBean組成。其中ActionForm用於封裝用戶請求參數,所有的用戶請求參數由系統自動封裝成ActionForm對象。該對象被ActionServlet轉發給Action;然後 Action根據ActionForm裏的請求參數處理用戶請求。
而JavaBean則封裝了底層的業務邏輯,包括數據庫訪問等。在更復雜的應用中,JavaBean所代表的絕非一個簡單的JavaBean,可能是EJB組件或者其他的業務邏輯組件。大型應用程序通常在Bean方法內部封裝事務邏輯。比如購物車Bean,就會利用擁有狀態信息的會話bean保存和讀取用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,並向倉庫發定貨信息。小型程序中,操作可能會被內嵌在Action類(它是struts框架中的業務邏輯控制器)對象中。當邏輯簡單時這個方法很適合。建議用戶將事務邏輯(要做什麼)與Action類所扮演的角色(決定做什麼)分開。
2. View部分
Struts 的View 部分採用 lSP 實現。 Struts提供了豐富的標籤庫,通過這些標籤庫可以最大限度地減少腳本的使用。這些自定義的標籤庫可以實現與Model(Bean)的有效交互,並增加了顯示功能。如<bean:write>標籤就可以用來顯示JavaBean(包括ActionFormBean)屬性。
整個應用由客戶端請求(如提交Form表單)驅動,當客戶端請求被ActionServlet類對象(程序根據web.xml中配置的ActionServlet初始化類對象)攔截時,ActionServlet根據請求決定是否需要調用Model處理用戶請求,當用戶請求處理完成後,其處理結果通過JSP 呈現給用戶。
3.Controller部分
Struts 的Controller由兩個部分組成。系統核心控制器和業務邏輯控制器。其中,ActionServlet爲系統核心控制器。該控制器由Struts框架提供,繼承HttpServlet類,因此可以配置成一個標準的Servlet。該控制器負責攔截所有Http請求,然後根據用戶請求決定是否需要調用業務邏輯控制器,如果需要調用業務邏輯控制器,則將請求轉發給Action處理,否則直接轉向請求的JSP頁面。
業務邏輯控制器負責處理用戶請求,但業務邏輯控制器本身並不具有處理能力,而是調用 Model來完成處理。業務邏輯控制器對應圖中的Action部分。
Action的業務邏輯實現,是通過調用ActionServlet傳遞給自己的ActionMapping、ActionForward等組件對象協調完成的。其中,ActionMapping與ActionForward指定了不同業務邏輯或流程的運行方向。
參考資料:
http://blog.sina.com.cn/s/blog_5f30147a0100p1o6.html