### struts簡介
Struts是Apache軟件基金會(ASF)贊助的一個開源項目。它最初是jakarta項目中的一個子項目,并在2004年3月成為ASF的頂級項目。它通過采用JavaServlet/JSP技術,實現了基于JavaEEWeb應用的MVC設計模式的應用框架,是MVC經典設計模式中的一個經典產品。
### Struts發展歷史
Struts是作為ApacheJakarta項目的組成部分,項目的創立者希望通過對該項目的研究,改進和提高JavaServerPages、servlet、標簽庫以及面向對象的技術水準。
Struts這個名字的來源于在建筑和舊式飛機中使用的支持金屬架。之所以這個框架叫做“struts”,是為了提醒我們記住那些支撐我們房屋,建筑,橋梁,甚至我們踩高蹺的基礎支撐。這也是解釋struts在開發web應用程序中所扮演的角色的精彩描述。
Struts的含義是”支柱,枝干”,它的目的是為了減少程序開發的時間,項目的創建者認為JSP,servlet的存在雖然可以幫助用戶解決大部分問題,但是由于它們的編碼對項目的開發帶來了許多的不方便,可重用性也差,所以struts應運而生,幫助用戶在最短的時間內解決這些問題。Struts框架提供如下服務:
(1)作為控制器的Servlet。
(2)提供大量的標簽庫。
(3)提供了用于國際化的框架,利用不同的配置文件,可以幫助用戶選擇合適自己的語言。
(4)提供了JDBC的實現,來定義數據源和數據庫連接池。
(5)XML語法分析工具。
(6)文件下載機制。
### Struts原理
Struts是對JSPModel2設計標準的一種實現,下面分別從模型(Model)、視圖(view)和控制器3個部分介紹Struts的體系結構和工作原理。調用流程如下所示(圖1.1)。

圖1.1
(1)視圖(view)
在Struts中,視圖層包含兩個部分,JSP頁面和ActionForm。
ActionForm封裝了用戶提交的表單信息,其實ActonForm本質上就是JavaBean,這些JavaBean中沒有業務邏輯,只提供了所有屬性的getter和setter方法,這些屬性和用戶表單中的輸入項是一一對應的。在Struts中就是通過ActionForm把用戶表單信息提交給控制器。
JSP頁面是經典MVC中主要的視圖組件,主要是信息顯示和控制器處理結果顯示的功能。
除了以上,struts還提供了一個強大的struts標簽庫,來幫助用戶解決顯示邏輯,并且利用ActonForm組件將信息傳遞到控制層。
(2)控制器(Controller)
在控制層,struts提供了一個控制器組件ActionServlet,它繼承自HttpServlet,并重載了HttpServlet的doGet(),doPost()方法,可以接受HTTP的響應,并進行轉發,同時還提供了使用XML進行轉發Mapping(映射)的功能。
(3)模型(Model)
模型表示狀態和業務邏輯的處理,在一般的web應用程序中,用JavaBean或者EJB來實現系統的業務邏輯。在Struts中,struts提供Action對象,來管理業務邏輯的**調用**,幫助用戶分離業務邏輯,也就是說struts本身不實現業務邏輯,但可以調用已完成的業務邏輯。
### Struts工作流程
Struts工作流程如下(圖1.2)所示。

圖1.2
ActionServlet是struts中核心的控制器,所有的用戶請求都必須通過ActionServlet的處理,而struts-config.xml是struts中核心的配置文件,在這個文件中配置了用戶請求URL和控制器Action的映射關系,ActionServlet通過這個配置文件把用戶的請求發送到對應的控制器中。
在struts?web應用程序中,當web應用程序啟動的時候,就會初始化ActionServlet在初始化ActionServlet的時候會加載struts-config.xml配置文件,在加載成功后會把這些URL和控制器映射關系存放在ActionMapping對象或者其他對象中。當ActionServlet接收到用戶請求的時候,就會按照下面的流程對用戶請求進行處理。
(1)ActionServlet接收到用戶的請求后,會根據請求URL尋找匹配的ActionMapping對象,如果匹配失敗,說明用戶請求的URL路徑信息有誤,所以返回請求路徑無效的信息,當找到匹配的ActionMapping的時候,進入到下一步。
(2)當ActionServlet找到匹配的ActionMapping對象的時候,會根據ActionMapping中的映射信息判斷對應的ActionForm對象是否存在,如果不存在對應的ActionForm對象就創建一個新的ActionForm對應,并把用戶提交的表單信息保存到這個ActionForm對象中。
(3)在struts-config.xml中這個配置文件,可以配置表單是否需要驗證,如果需要驗證,就調用ActionForm中的validate()方法對用戶輸入的表單進行驗證。
(4)如果ActionForm的validate()方法返回了ActionErrors對象,則表明驗證失敗,ActionServlet把這個頁面返回到用戶輸入的界面,提示用戶重新輸入。如果方法的返回值為null,就表明驗證已經通過,可以進入下一步處理。
(5)ActionServlet可以根據ActionMapping對象查找用戶請求轉發給哪個控制器Action,如果對應的Action對象不存在,就創建這個對象,并調用這個Action的excute()方法。
(6)業務邏輯控制器Action的execute()方法就會返回一個ActionForward對象,ActionServlet把控制器處理的結果轉發到ActionForward對象指定的JSP頁面。
(7)ActionForward對象指定的JSP頁面根據返回的處理結果,用合適形式把服務器處理的結果展示給用戶,到這里為止,一個客戶請求的整個過程完畢。
以上初步struts框架進行了介紹,和對原理進行了簡單的分析。至于struts是如何實現MVC的,ActionServlet屬于Controller部分,Action和ActionForm屬于Model層,還是Action屬于Controller層,不同的人對struts有不同的理解。接下來真正的運用到實踐中,在實踐中深刻去體會,原理固然重要,重要的是運用,是能駕馭和使用這個框架。就像學習開車一樣,不是一蹴而就的。
下一篇講解struts配置,我們以[登錄為例](http://blog.csdn.net/lovesummerforever/article/details/17348871)。
- 前言
- Struts旅程(一)Struts簡介和原理
- struts旅程(二)Struts登錄示例
- Struts旅程(三)Struts表單處理器ActionForm(靜態動態)
- Struts旅程(四)MVC向struts MVC框架演變過程
- Struts旅程(五)struts控制器DispatchAction
- Struts旅程(六)Struts頁面轉發控制ActionForward和ActionMapping
- Hibernate旅程(一)Hibernate架構概述
- Hibernate旅程(二)Hibernate實例
- Hibernate旅程(三)Hibernate持久化對象的三個狀態
- Hibernate旅程(四)Hibernate對數據庫刪除、查找、更新操作
- Hibernate旅程(五)Hibernate映射--基本類映射和對象關系映射
- Hibernate旅程(六)Hibernate映射--繼承映射
- Hibernate旅程(七)Hibernate緩存機制--一級緩存
- Hibernate旅程(八)Hibernate緩存機制--二級緩存
- Hibernate旅程(九)Hibernate緩存機制--查詢緩存
- Spring旅程(一)為什么使用Spring
- Spring旅程(二)非Spring向Spring過渡-- Spring IOC容器的使用
- Spring旅程(三) AOP--Spring AOP容器基礎
- Spring旅程(四) AOP--Spring AOP實例
- SSH旅程(五)Spring運用到Hibernate中
- SSH旅程(六)Spring和struts結合(方案一)