Springmvc與Struts區別?

在一個技術羣裏看到機器人解釋的兩者區別,在此Mark下。html

1、框架機制spring

spring mvc 和 struts2的加載機制不一樣:spring mvc的入口是servlet,而struts2是filter。編程

一、Struts2採用Filter(StrutsPrepareAndExecuteFilter)實現,SpringMVC(DispatcherServlet)則採用Servlet實現。安全

二、Filter在容器啓動以後即初始化;服務中止之後銷燬,晚於Servlet。Servlet在是在調用時初始化,先於Filter調用,服務中止後銷燬。併發

2、攔截機制mvc

一、Struts2框架

a、Struts2框架是類級別的攔截,每次請求就會建立一個Action,和Spring整合時Struts2的ActionBean注入做用域是原型模式prototype(不然會出現線程併發問題),而後經過setter,getter吧request數據注入到屬性。性能

b、Struts2中,一個Action對應一個request,response上下文,在接收參數時,能夠經過屬性接收,這說明屬性參數是讓多個方法共享的。url

c、Struts2中Action的一個方法能夠對應一個url,而其類屬性卻被全部方法共享,這也就沒法用註解或其餘方式標識其所屬方法了spa

二、SpringMVC

a、SpringMVC是方法級別的攔截,一個方法對應一個Request上下文,因此方法直接基本上是獨立的,獨享request,response數據。而每一個方法同時又何一個url對應,參數的傳遞是直接注入到方法中的,是方法所獨有的。處理結果經過ModeMap返回給框架。

b、在Spring整合時,SpringMVC的Controller Bean默認單例模式Singleton,因此默認對全部的請求,只會建立一個Controller,有應爲沒有共享的屬性,因此是線程安全的,若是要改變默認的做用域,須要添加@Scope註解修改。

3、性能方面

SpringMVC實現了零配置,因爲SpringMVC基於方法的攔截,有加載一次單例模式bean注入。而Struts2是類級別的攔截,每次請求對應實例一個新的Action,須要加載全部的屬性值注入,因此,SpringMVC開發效率和性能高於Struts2。

4、攔截機制

Struts2有本身的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式,這樣致使Struts2的配置文件量仍是比SpringMVC大。

5、配置方面

spring MVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高(固然Struts2也能夠經過不一樣的目錄結構和相關配置作到SpringMVC同樣的效果,可是須要xml配置的地方很多)。
SpringMVC能夠認爲已經100%零配置。

6、設計思想

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

7、集成方面

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

原文出處:https://www.cnblogs.com/Jashinck/p/10412424.html

相關文章
相關標籤/搜索