struts2和springmvc區別?


  1. Struts2是一個請求一個Action,SpringMVC是單例模式的
  2. Struts2是基於類的橫切,SpringMVC基於方法(可以和上條結合起來思考)粒度更細
  3. 一個入口是Filter,一個入口是Servlet。則兩者個方面機制不同,比如攔截器實現機制
  4. SpringMVC開發速度和性能較優於Struts2,流程更容易理解
  5. Spring體系更加強大和活躍

有錯誤請大家指正:),已經不做web很多年


可以談一談Struts2 和SpringMVC 在請求-響應模型的上的區別。

--------------------------------------------

Struts2處理請求是為每個請求都創建一個單獨的Action類,Action類當中的Field屬性參數作為輸入和輸出參數用IOC來依賴注入的方式,是基於類的。

而SpringMVC則採用輸入Request和Reponse作為參數,返回ModelAndView的方式,是單例的模式,且是基於方法的模式。

-----------------------------------------------------------------------------------------------

無論是在web系統的開發中,還是在網路遊戲的開發中,都會牽涉到request和response參數的處理問題,如何將request和reponse參數對應到我們的設計中,採用什麼樣的方式,處理情況是各種各種的。

-------------------------------------------

-------------------------------------------

SpringMVC的幾大組件:

1)DispatcherServlet 根據請求的不同,將請求分發到不同的Controller處理器

2)Dispatcher 具體處理請求,返回邏輯視圖

3)Handler Mapping

3)ModelAndView 返回的邏輯視圖,注意,是邏輯視圖,並不是真正的視圖比如JSP頁面,而是通過通過視圖解析器VierResoler解氣邏輯視圖,返回真正的要發送給前端的視圖

4)ViewResolver View 視圖解析類

-------------------------------------------

struts2是通過filter實現的請求轉發(或者說請求的初步處理)和初始化操作

springmvc是通過servlet實現的請求轉發和初始化

-------------------待續

先上兩張圖


一個基於servlet開發的,一個基於filter開發的。

struts是基於類的,springmvc是基於方法開發的。

…………


底層技術說白了都是Servlet, 一個典型的Servlet請求都是先處理filter層, 再處理controller層.

Struts2框架基於Servlet的filter開發, 而Spring MVC是基於Servlet的controller開發, 切入點不同, 當然這只是冰山一角, Spring MVC結合Spring的Ioc/AOP特性, Spring Boot熱更新等解決方案, 開發效率比Struts2高

ps: 一個Spring MVC開源項目供參考: youzan/bugCatcher


因為struts2管真寬...

我只是簡單的想要一個servlet-mapping


Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上SpringMVC就容易實現restful url,而struts2的架構實現起來要費勁,因為Struts2中Action的一個方法可以對應一個url,而其類屬性卻被所有方法共享,這也就無法用註解或其他方式標識其所屬方法了。

由上邊原因,SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,處理結果通過ModelMap交回給框架,方法之間不共享變數,而Struts2搞的就比較亂,雖然方法之間也是獨立的,但其所有Action變數是共享的,這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩,每次來了請求就創建一個Action,一個Action對象對應一個request上下文。

由於Struts2需要針對每個request進行封裝,把request,session等servlet生命周期的變數封裝成一個一個Map,供給每個Action使用,並保證線程安全,所以在原則上,是比較耗費內存的。

攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式,這樣導致Struts2的配置文件量還是比SpringMVC大。

SpringMVC的入口是servlet,而Struts2是filter(這裡要指出,filter和servlet是不同的。以前認為filter是servlet的一種特殊),這就導致了二者的機制不同,這裡就牽涉到servlet和filter的區別了。

SpringMVC集成了Ajax,使用非常方便,只需一個註解@ResponseBody就可以實現,然後直接返迴響應文本即可,而Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己寫代碼集成進去,使用起來也相對不方便。

SpringMVC驗證支持JSR303,處理起來相對更加靈活方便,而Struts2驗證比較繁瑣,感覺太煩亂。

Spring MVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高(當然Struts2也可以通過不同的目錄結構和相關配置做到SpringMVC一樣的效果,但是需要xml配置的地方不少)。

設計思想上,Struts2更加符合OOP的編程思想, SpringMVC就比較謹慎,在servlet上擴展。

最後再補充一點SpringMVC開發效率和性能高於Struts2,SpringMVC可以認為已經100%零配置。


其實,struts2的標籤也是導致運行速度比springmvc慢的一個原因,上面的大神回答的都差不多了,也夠詳細,


都是model2的模式,但是spring融合了aop,ioc的編程模式


最經典的答案難道不是單例?


struts2有配置文件就是struts.xml

以及是dao biz action 三層

springMVC大體上是0配置

只有service和 Controller 兩層


推薦閱讀:

TAG:Java | Struts2 | SpringMVC框架 |