歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Struts2原理概述

Struts 2以WebWork優秀的設計思想為核心,吸收了Struts 1的部分優點,建立了一個兼容WebWork和Struts 1的MVC框架,Struts 2的目標是希望可以讓原來使用Struts 1、WebWork的開發人員,都可以平穩過渡到使用Struts 2框架。在2005年12月,WebWork與Struts Ti宣布合並。與此同時,Struts Ti改名為Struts Action Framework 2.0,成為Struts真正的繼承者。 (1)支持的表現層技術單一  那時候還沒有FreeMarker、Velocity等技術,因而沒有考慮與這些FreeMarker、Velocity等視圖技術的整合 (2)與Servlet API嚴重耦合,難於測試 (3)代碼嚴重依賴於Struts 1 API,屬於侵入式設計

Struts2優點

Struts2是在WebWork2基礎發展而來的。和struts1一樣, Struts2也屬於MVC框架。不過有一點大家需要注意的是:盡管Struts2和struts1在名字上的差別不是很大,但Struts2和struts1在代碼編寫風格上幾乎是不一樣的。那麼既然有了struts1,為何還要推出struts2。主要是因為struts2有以下優點: (1)在軟件設計上Struts2沒有像struts1那樣跟Servlet API和struts API有著緊密的耦合,Struts2的應用可以不依賴於Servlet API和struts API。 Struts2的這種設計屬於無侵入式設計,而Struts1卻屬於侵入式設計。下面為Struts1的Action設計: public class OrderListAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,   HttpServletRequest request, HttpServletResponse response)   throws Exception {   } } (2)Struts2提供了攔截器,利用攔截器可以進行AOP編程,實現如權限攔截等功能。 (3) Strut2提供了類型轉換器,我們可以把特殊的請求參數轉換成需要的類型。在Struts1中,如果我們要實現同樣的功能,就必須向Struts1的底層實現BeanUtil注冊類型轉換器才行。 (4)Struts2提供支持多種表現層技術,如:JSP、freeMarker、Velocity等 (5)Struts2的輸入校驗可以對指定方法進行校驗,解決了Struts1長久之痛。 (6)提供了全局范圍、包范圍和Action范圍的國際化資源文件管理實現

工作原理

    1.客戶端初始化一個指向Servlet容器(例如Tomcat)的請求; 2.這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin) 3.接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action 4.如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy 5.ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類 6.ActionProxy創建一個ActionInvocation的實例。 7.ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用。 8.一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper

Struts2的處理流程

StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它負責攔截由<url-pattern>/*</url-pattern>指定的所有用戶請求,當用戶請求到達時,該Filter會過濾用戶的請求。默認情況下,如果用戶請求的路徑不帶後綴或者後綴以.action結尾,這時請求將被轉入Struts 2框架處理,否則Struts 2框架將略過該請求的處理。當請求轉入Struts 2框架處理時會先經過一系列的攔截器,然後再到Action。與Struts1不同,Struts2對用戶的每一次請求都會創建一個Action,所以Struts2中的Action是線程安全的。

推薦閱讀:

Struts中異步傳送XML和JSON類型的數據 http://www.linuxidc.com/Linux/2013-08/88247.htm

Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2學習筆記-Value Stack(值棧)和OGNL表達式  http://www.linuxidc.com/Linux/2015-07/120529.htm 

struts2文件上傳(保存為BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm

Struts2的入門實例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2實現ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm

遇到的Struts2文件下載亂碼問題 http://www.linuxidc.com/Linux/2014-03/98990.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

Struts2 注解模式的幾個知識點 http://www.linuxidc.com/Linux/2013-06/85830.htm

Struts 的詳細介紹:請點這裡
Struts 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved