struts2和spring mvc的區別

在項目中使用struts2和spring mvc爲了實現後臺的業務代碼和前臺數據之間的傳遞,如今基本上不會有用struts2的了,幾回面試問的最多的關於struts2的問題就是struts2和spring mvc之間的區別,其中關於使用配置文件和註解的問題就回答錯誤了。 css

  • struts2也是可使用註解的,可是struts2相比於spring mvc不能實現真正的零配置,struts2在使用註解的時候仍是須要用struts.xml一小段配置。而spring mvc能夠實現真正的零配置實用註解。詳見:struts2基於註解配置action
  • 這兩個框架都是須要對數據進行攔截,可是struts2是類級別的攔截,一個類對應一個request上下文,struts2是基於類設計,每次請求都會實例一個Action,每一個Action都會被注入屬性,而spring mvc是方法級別的攔截,說這個可能有些不理解,大部分文章這麼說完以後沒有進一步解釋,拿具體配置說明一下會更好理解

下面是struts2的配置文件(一部分),每次都是根據配置去找對應的Action,struts2是經過類的成員變量接收數據,在多線程的環境下,這些變量是共享的。java

<package name="user" namespace="/user" extends="struts-default">
        <action name="login" class="com.struts2.action.UserAction"
            method="login">
            <result name="a">/Success.jsp</result>
            <result name="b">/login.jsp</result>
        </action>
    </package>

接下來是spring mvc使用註解完成的功能,spring mvc處理的時候根據RequestMapping找對應的url,和struts2相比,spring mvc對於數據比較安全,每一個方法之間都是經過形參傳遞數據,方法結束,形參結束生命被銷燬。面試

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("add")
    public String add(User user) {
        return "add";
    }
}
  • 在攔截機制上struts2和spring mvc是兩種徹底不一樣的方式,struts2採用的是相似於鏈式堆棧結構的攔截(責任鏈模式),須要在配置文件中配置攔截器。每個Action請求都包含在一系列攔截器的內部。

spring mvc採用的是AOP思想,能夠實現預處理(實現處理器的預處理(如登陸檢查)),後處理(實現處理器的後處理(但在渲染視圖以前)),整個請求處理完畢回調方法,即在視圖渲染完畢時回調 spring

  • 在設計思路上,spring mvc更加的處理流程更加規範,每一個處理流程劃分爲不少的步驟,每一個處理步驟都交給不一樣的組件進行處理,struts2就顯得比spring mvc亂。
  • spring mvc和spring都是一家的可能在一塊兒使用更加方便。
相關文章
相關標籤/搜索