struts1和struts2和springMVC的區別和介紹


MVC是web開發常用的模式,M即模型層(Model):主要由javabean來實現。V即視圖層(View):主要由jsp、velocity、freemarker等。C即控制層(Controller):主要由servlet、strtus、springmvc來實現。

 
struts1
Struts1 工作流程
1  ActionServlet接收由瀏覽器發出的請求后,檢索和請求匹配的ActionMapping對象。如果不存在,返回請求無效的信息。
2  檢索和請求匹配的ActionForm對象。如果不存在,就創建一個。把提交的表單中的數據保存在ActionForm對象中
3  根據配置信息決定是否進行校驗。如果是,就進行校驗。如果通過校驗,進行下一步
4  ActionServlet根據ActionMapping對象包含的信息決定把請求轉發給哪個Action。如果這個Action的對象不存在,就創建一個,然后調用它的excute方法
5  Action的excute方法返回一個ActionForward對象。ActionServlet把請求轉發給ActionForward指定的JSP。
6  ActionFoward對象指定的JSP生成動態網頁,返回給瀏覽器


struts2
struts2是webwork升級版,跟struts1沒有關系。struts1和servlet耦合度高,各層之間耦合度高,單元測試困難,表示層技術單一,而struts2沒有和servlet耦合,更容易測試,支持更多表示層技術。
 
 
 
struts2工作流程
1)  客戶端初始化一個指向Servlet容器(例如Tomcat)的請求。
2)  這個請求經過一系列的過濾器(Filter)。
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中的配置找到對應的返回結果。
Struts2的核心就是攔截器。Struts.xml中所有的package都要extends="struts-default"。同理與所有的Java類都要extends自Object一樣。struts-default.xml里面就是要做以上事情。
 
 

springmvc

1.spring mvc將所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責對請求進行真正的處理工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.
3.DispatcherServlet將請求提交到目標Controller
4.Controller進行業務邏輯處理后,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。

 

 

struts1與struts2的比較

1、struts1要求Action類繼承一個抽象基類,而不是接口,struts2繼承ActionSupport類或者實現Action接口。

2、struts1是單例模式的,Action資源必須是線程安全的或同步的,會有線程安全問題,struts2為每一個請求都實例化一個對象,不存在線程安全問題。

3、struts1依賴servlet API 因為execute方法的參數有httpservletrequest和httpservletresponse對象,而struts2不用依賴servlet。

4、struts1依賴servlet API,所以測試要依賴web容器,測試難,struts2不依賴於容器,允許Action脫離容器單獨被測試。 

5、ActionForm,普通的JavaBean不能用作ActionForm,因此,開發者必須創建大量的ActionForm類封裝用戶請求參數,Struts 2直接使用Action屬性來封裝用戶請求屬性,避免了開發者需要大量開發ActionForm類的煩瑣。Struts 2提供了ModelDriven模式,可以讓開發者使用單獨的Model對象來封裝用戶請求參數,但該Model對象無需繼承任何Struts 2基類,是一個POJO,從而降低了代碼污染。 

6、struts1 支持jsp作為表現層技術,struts2支持velocity、freemarker等表現層技術。
7、Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。 Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達式語言OGNL
8、Struts1支持每一個模塊有單獨的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。 Struts2支持通過攔截器堆棧(Interceptor Stacks)為每一個Action創建不同的生命周期


struts2與springmvc比較

1、spring mvc的入口是servlet,而struts2是filter
2、struts2是類級別的攔截, 一個類對應一個request上下文,springmvc是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應
3、spring會稍微比struts快。spring mvc是基於方法的設計,而sturts是基於類,每次發一次請求都會實例一個action,每個action都會被注入屬性,而spring基於方法,粒度更細,但要小心把握像在servlet控制數據一樣。spring3 mvc是方法級別的攔截,攔截到方法后根據參數上的注解,把request數據注入進去,在spring3 mvc中,一個方法對應一個request上下文。而struts2框架是類級別的攔截,每次來了請求就創建一個Action,然后調用setter getter方法把request中的數據注入;struts2實際上是通過setter getter方法與request打交道的;struts2中,一個Action對象對應一個request上下文。
4、spring3mvc的驗證也是一個亮點,支持JSR303,處理ajax的請求更是方便,只需一個注解@ResponseBody ,然后直接返回響應文本即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM