我們都知道SSH是目前比較流行的一個Web應用程序開源框架,而struts又是之中的領頭框架,究竟它有怎樣的力量竟然可以博客IT界的眼球??一起來看!!
###一、演變之處--MVC
要了解struts必須先來了解MVC,MVC并不是Java語言所特有的設計思想,也不是Web程序所特有的思想,它是所有面向對象程序設計語言都要遵守的設計規范。簡單來說,MVC將一個應用程序分為三個部分:Model(模型)、View(視圖)和Controller(控制器)。這三個部分以最小的耦合來協同工作,從而最大限度的提高程序的可擴展性。
那么它們之間如何運行才能達到上述的目標呢?請看下圖:

而struts2就是MVC的一種表現形式。下面就一起去探索初露羞面的這位姑娘!
### 二、struts的小秘密
#### 1.為什么使用
?.它是建立在MVC這種公認的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一個好的控制器和一套定制的標簽庫上,也就是說它的著力點在C和V上,因此,它天生就有MVC所帶來的一系列優點,如:結構層次分明,高可重用性,增加了程序的健壯性和可伸縮性,便于開發與設計分工,提供集中統一的權限控制、校驗、國際化、日志等等;
?.其次,它是個開源項目得到了包括它的發明者Craig R.McClanahan在內的一些程序大師和高手持續而細心的呵護,并且經受了實戰的檢驗,使其功能越來越強大,體系也日臻完善;
?.它對其他技術和框架顯示出很好的融合性。
#### 2.struts2應用程序的開發:
1)在web.xml文件中定義核心filter來攔截用戶的請求:
由于Web應用是基于請求/響應架構的應用,所以不管哪個MVC Web框架,都需要在web.xml文件中配置該框架的核心Servlet或者filter,這樣才可以讓該框架介入到Web應用中:
~~~
<!-- 配置Struts2的核心過濾器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
~~~
2)如果需要以post方式提交用戶的請求,則需要定義包含表單數據的jsp頁面。但是如果僅僅是以get方式來發送請求,則無需進行該步驟;
3)定義處理用戶的Action類:這一步是MVC框架中必不可少的,Action就相當于controller,主要負責調用Model中的方法來處理用戶的請求。
4)配置Action。一直以來我們都有一種思維定勢,使用xml文件對Action進行陪孩子,而這個過程就是指定哪個請求對應哪個Action進行處理,從而讓核心控制器根據該配置來 ? ? ? 創建合適的Action實例,并調用該Action的業務控制方法:
~~~
<action name="login" class="cn.itcast.shop.adminUser.action.LoginAction">
.............
</action>
~~~
5)配置處理結果和物理視圖資源之間的對應關系:
當Action處理用戶請求結束后,通常會返回一個處理結果可以認為該名稱就是邏輯視圖的名稱,該邏輯視圖需要和制定的物理資源產生關聯,所以我們需要配置處理結果之間的關系:
~~~
<!-- 配置用戶模塊的Action -->
<action name="user_*" class="userAction" method="{1}">
<result name="registPage">/WEB-INF/jsp/regist.jsp</result>
<result name="input">/WEB-INF/jsp/regist.jsp</result>
<result name="loginPage">/WEB-INF/jsp/login.jsp</result>
<result name="login">/WEB-INF/jsp/login.jsp</result>
<result name="loginSuccess" type="redirectAction">index</result>
<result name="quit" type="redirectAction">index</result>
<result name="checkcodeFail">/WEB-INF/jsp/regist.jsp</result>
</action>
~~~
#### 3.實現的流程:

從圖中可以看出,struts2框架的控制下,用戶請求不再需要向jsp頁面發送,而是由核心控制器strutsPreparedAndExecuteFilter 調用 jsp頁面來生成響應,此處的調用并不是直接調用,而是將請求forward到指定的jsp頁面上。
關于struts2的分析就先到這里,SSH其他框架的講解請期待接下來的博客!