1. 程式人生 > >SpringMVC和Struts2的區別,為什麼要用SpringMVC

SpringMVC和Struts2的區別,為什麼要用SpringMVC

注意本篇文章是基於已經學過並且理解SpringMVC和Struts2的人寫的,如果沒有學過閱讀本篇文章很可能是不理解的。

至於共同點就不想多說了,就是都為檢視層框架,

區別:

        1.SpringMVC是基於方法開發的,而Struts2是基於類開發的。

                解釋:學過SpringMVC的人都知道,如果不用註解的話,其實每一個訪問路徑都會對映到一個handler上面,而這個handler只有一個方法。就是public ModelAndView handleRequest(HttpServletRequest request,           HttpServletResponseresponse) throws

Exception。但是用了註解之後就可以在一個類中寫多個方法了,可是這個從本質上來說每個方法就是一個handler類,這個方法就是其中的handleRequest,為什麼呢,因為SpringMVC將URL通過處理器對映器,然後經過處理器介面卡找到了這個帶有註解的方法,這個時候對映成功之後就生成一個handler物件。所以這一個方法就是一個類,所以說SpringMVC是基於方法開發的。而Struts2是經過一個過濾器,找到了這個Struts.xml的配置檔案,去裡面載入一個action類,所以是基於類開發的。

    2.SpringMVC是可以單例開發的,但是Struts2是必須多例開發。

            解釋:因為SpringMVC是基於方法開發的,原因上面那條已經寫過了,所以在用註解的時候在一個類中定義的service介面不會因為是在一個類的成員變數位置而產生多執行緒安全問題,因為每一方法都是一個新的service物件,並且獲取頁面中的封裝資料是在方法的引數中定義的,所以才可以放心的用單例開發,而Struts2是基於類開發的,在進行頁面資料封裝的時候,必須有成員變數,因為底層是基於內省機制,所以還必須提供set方法,這就會導致執行緒安全問題。

    3.SpringMVC速度比Struts2快。

            解釋:第一點;由於SpringMVC是可以用單例開發,所以建立物件的個數就會比較少,但是Struts2是多例開發,隨意對於記憶體的消耗是比較費時和浪費空間的。第二點:Struts2使用了自己提供的標籤庫,為了 取到值棧,而在頁面中大量引用自己標籤庫的時候,也會引起速度變慢,jstl的標籤速度比較快,所以在開發的時候想要Struts2快一點,應該儘量用el表示式和jstl。

總結:經過幾番PK,大家應該明白了這兩個框架的區別,也應該知道了,為什麼現在企業越來越多的使用SpringMVC了吧,