Java高級架構——spring mvc與struts的區別

spring3mvc與struts2比較

項目剛剛換了web層框架,放棄了struts2改用spring3mvc

當初還框架的時候目的比較單純---springmvc支持rest,小生對restful url由衷的喜歡

Java高級架構——spring mvc與struts的區別

不用不知道 一用就發現開發效率確實比struts2高

我們用struts2時採用的傳統的配置文件的方式,並沒有使用傳說中的0配置

spring3 mvc可以認為已經100%零配置了(除了配置springmvc-servlet.xml外)

比較了一下strus2與spring3 mvc的差別

============================================

struts2框架是類級別的攔截,每次來了請求就創建一個Action,然後調用setter getter方法把request中的數據注入

struts2實際上是通過setter getter方法與request打交道的

struts2中,一個Action對象對應一個request上下文

spring3 mvc不同,spring3mvc是方法級別的攔截,攔截到方法後根據參數上的註解,把request數據注入進去

在spring3mvc中,一個方法對應一個request上下文

好了 我們來整理一下

struts2是類級別的攔截, 一個類對應一個request上下文,

springmvc是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應

所以說從架構本身上 spring3 mvc就容易實現restful url

而struts2的架構實現起來要費勁

因為struts2 action的一個方法可以對應一個url

而其類屬性卻被所有方法共享,這也就無法用註解或其他方式標識其所屬方法了

===================================

spring3mvc的方法之間基本上獨立的,獨享request response數據

請求數據通過參數獲取,處理結果通過ModelMap交回給框架

方法之間不共享變量

而struts2搞的就比較亂,雖然方法之間也是獨立的,但其所有Action變量是共享的

這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩

====================================

spring3 mvc的驗證也是一個亮點,支持JSR303

處理ajax的請求更是方便 只需一個註解@ResponseBody ,然後直接返回響應文本即可

附上一段代碼

Java代碼

@RequestMapping(value="/whitelists")

  1. public String index(ModelMap map){
  2. Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()) ;
  3. List groupList = groupManager.findAllGroup(account.getId()) ;
  4. map.put("account", account);
  5. map.put("groupList", groupList);
  6. return "/group/group-index" ;
  7. }
  8. //@ResponseBody ajax響應
  9. @RequestMapping(value="/whitelist/{whiteListId}/del")
  10. @ResponseBody
  11. public String delete(@PathVariable Integer whiteListId){
  12. whiteListManager.deleteWhiteList(whiteListId) ;
  13. return "success" ;
  14. }

評論截選

註解和性能沒有關係,Servlet的生命週期是這樣的,在調用這個Servlet時候才創建這個Servlet的類並運行init()方法,然後另外有人運行這個Servlet的時候並沒有重啟創建Servlet和運行裡邊的init()方法,所以Servlet容器時單利的,spring就是Servlet的封裝的框架,包括所有的依賴注入都是在tomcat啟動的時候全部被初始化的,其他的註解也一樣,也就是說註解也就是以前的xml的配置的替代,以前沒個請求都要運行一次xml嗎?並不是的,xml是在tomcat啟動時就讀一次而已並利用裡邊的配置初始化很多的東西,然後就不在使用了,因為都成了單利的,這樣就保證了效率,不是每次都把我們要注入的全部new一次,而是tomcat啟動的時候全部new一次以後就不new了,保證了效率問題。

所以我不明白那個 光看註解就知道性能不好?

註解就是替代了xml配置而已,而且也是初始化一次,也就是說和編寫Servlet一樣的在init()中做了很多的事而已,並且以後不會在運行init()了,除非你重啟tomcat。

struts1也一樣,運行一個action的方法的時候創建一個action類,以後再運行就不會創建了,其實也是Servlet的封裝的框架。

struts2特殊一些,沒個請求要new一個action來保證線程安全。所以效率會低一些,但是不會低的特別離譜。

這樣也說明了spring3的mvc和struts1的mvc還有Servlet都是方法的線程安全,所以在類方法聲明的私有或者公有變量不是線程安全的,struts2的確實是線程安全的。

所有各有各的好處,用什麼當然是仁者見仁智者見智了。

不過我們確實在新項目中大量的使用了spring3,因為REST挺好的。

在Java技術方面有想要提升自己的朋友,可以關注小編私信發送暗號555

小編有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,

Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料提供。

每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!


分享到:


相關文章: