天天看點

SpringMVC和Struts2的比較

整體的架構機制

    1.Struts2的入口是StrutsPrepareAndExecuteFilter,SpringMVC的入口是通過DispatcherServlet實作.

    2.Struts2的Filter的過濾器是在容器啟動之後進行初始化,服務停止之後進行銷毀,SpringMVC是在Servlet在調用的時候進行初始化,優先于Filter調用,服務停止後銷毀.

攔截機制

    Struts2的攔截是基于類進行攔截,每次請求就會建立一個Action,和Spring整合的時候Struts2的ActionBean注入的作用于是原型模式即prototype(因為Struts2每次的請求過來都會建立一個Action他是一個多例模式,線程安全存在問題,是以要在配置prototype),通過setter/getter把request的資料注入到屬性中.

    Struts2中Action的方法可以對應一個url,但是其中類屬性确是被所有的方法共享,無法使用注解辨別器屬性所屬的具體的方法.

    Struts2中一個Action對應一個Request,Response上下文,在接受參數的時候,可以通過屬性接受,屬性參數是被多個方法共享的.    

    Struts2的攔截是Interceptor機制,SpringMVC用獨立AOP方式,Struts2的配置檔案量還是閉SpringMVC的要大.

SpringMVC

    SpringMVC是方法級别的攔截,一個方法對應一個request,方法基本上是獨立的,獨自享有request和response資料.而在每個方法的上面又對應一個url,參數的傳遞是直接注入到方法中通過@RequestMapping(value="/login",method="RequestMethod.POST")直接注入,然後Controller處理完結果傳回ModelAndView,最後在通過視圖解析器傳回給使用者.

    SpringMVC是一個單例的線程是安全的.在和Spring整合的時候,預設對所有的請求隻會建立一個Controller,如果改變預設的作用域需要添加@Scope注解.

性能比較

    SpringMVC實作零配置,SpringMVC是基于方法的攔截,加載一次單例模式bean注入.而Struts2是類級别攔截,每次請求需要對應創一個新的Action執行個體,需要加載所有的屬性值注入,是以性能的話SpringMVC高于Struts2

配置方面

SpringMVC是Spring家族的相對于Struts2來說原裝的肯定好,實作無縫契合.安全上也比Struts2高

 設計思想

    Struts2是OOP的程式設計思想,而SpringMVC是在Servlet上的擴充

內建方面

    SpringMVC內建了Ajax,使用隻需要注解@ResponseBody實作,然後傳回資料即可,Strtus2攔截器也內建了Ajax,在Action的進行中一般需要安裝插件或者寫代碼,使用起來相對于SpringMVC有點不友善.

總之使用什麼架構是根據業務的需求來進行的,本人的觀點沒有抨擊任何架構的意思,能實作業務功能的架構就是好架構沒有好壞之分.