springmvc是單例,非線程安全前端
Struts2是線程安全的對每一個請求都產生一個實例spring
springmvc的入口是Servlet,而Struts2的filterjson
spring的前段控制器是DispatcherServlet安全
Struts2的前端的核心控制器是FilterDispatcher併發
struts2框架是類級別的攔截,每次來了請求就建立一個Action,而後調用setter getter方法把request中的數據注入
struts2其實是經過setter getter方法與request打交道的
struts2中,一個Action對象對應一個request上下文
spring3 mvc不一樣,spring3mvc是方法級別的攔截,攔截到方法後根據參數上的註解,把request數據注入進去
在spring3mvc中,一個方法對應一個request上下文
springmvc是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,參數的傳遞是直接注入到方法中的,是該方法獨有的。
struts2是類級別的攔截, 一個類對應一個request上下文, struts是在接受參數的時候,能夠用屬性來接受參數, 這就說明參數是讓多個方法共享的,這也就沒法用註解或其餘方式標識其所屬方法了
intercepter的實現機制。struts有以本身的interceptor機制,spring mvc 用的是獨立的AOP方式。這樣致使struts的配置文件量仍是比spring mvc大,雖然struts的配置能繼承,spring mvc使用更加簡潔。
- 他們都是控制層框架,都是用來跳轉頁面和接受參數的;
- springmvc和spring是兄弟級別的關係,可是做用不同;
- 區別
- springmvc是單例的,struts2是多例的;由於struts2中存在全局變量,若是是單利模式,遇到併發狀況會發生衝突;
- springmvc的前段控制器是dispatcherServlet,而Struts2的前段控制器是filterDispatcher;
- struts的註解是@action,經過value和result來定義訪問路徑和返回的結果集;
- springmvc的註解是@controller,經過@RequestMapping("")來定義訪問路徑,經過return返回字符串跳轉頁面;
- 普通參數的傳遞;Struts2傳參時經過私有屬性,提供get,set方法來傳遞參數;springmvc是經過方法括號中定義變量來接受參數的,經過ModelMap來傳參;
- 日期類型的傳遞;Struts2直接傳遞字符串,後臺Date就能夠接受到,springmvc傳參時須要定義一個註解@DateTimeFormat(pattern="yyyy-MM-dd")
- 文件格式的傳遞;struts2是私有化的文件和文件名,提供get set方法來獲取到文件
- springmvc是經過註解@RequestParam('文件名')
- json傳參,struts2一般是經過提供的beasAction工具類來傳遞;springmvc是經過@responseBody註解來定義傳遞
- request和response的獲取,struts是經過beasAction提供的;springmvc是在方法後括號中定義來獲取到的;HttpServletResponse ;HttpServletRequest