struts1和struts2的區別!

一、首先,一個新版本的程序 是爲了解決老版本的一些bug而出世.一名話:沒有最後的程序,只有更好的程序.這樣的程序纔會發展,而不會被淘汰出局. struts框架也是一樣的. 我想,可能是struts1.x升級的過程中出現了瓶頸,有一些存在的問題很難得到解決,在這個時候,他們發現WebWork框架的總體設計思想非常好,並且他們發現,使用WebWork框架的思想正好可以很容易地解決struts1.x存在的問題.由於WebWork在推廣方面做得不夠好,於是兩個社區決定把WebWork框架與struts1.x框架合併,簡稱爲struts2.之所以struts2與struts1.x的區別比較大,就是因爲struts2大部分的實現都是依靠WebWork框架裏面的東西的.

 

 

二、struts2框架的優點及解決strus1.x存在的問題.

     2.1、在程序設計思想上看Struts2.

            Struts2並沒有像struts1那樣跟Servlet API和struts API有着緊密的耦合,在沒有Struts2之前,基於struts1.x框架來解決這個問題幾乎是不太可能的,我們都知道,在struts1.x裏編寫 一個簡單的Action類,是一定繼承一個struts1.x 提供的類的(如繼承Action類或DispatchAction類),這樣就完全與struts API耦合在一起(可能在struts1.x當初開始設計的時候並沒有考慮到這個問題,因此問題一直延續下去,問題存在得越久,發現得越晚,當要解決的時候就會越難.最後導致struts1.x出現瓶頸),如下就struts1.x定義的一個Action類:

Java代碼  收藏代碼
  1. public class UserLogonAction extends Action {  
  2.     @Override  
  3.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  4.             HttpServletRequest request, HttpServletResponse response)  
  5.             throws Exception {  
  6.         return mapping.findForward("success");  
  7.     }  
  8. }  

    注意:可以看到UserLogonAction 同時跟Servlet API和struts API有着緊密的耦合關係.

 

        而Struts2的出現已經很好地解決了這個問題,一個簡單的Action類如下:

Java代碼  收藏代碼
  1. public class UserLogonAction {  
  2.     public String execute(){  
  3.         return "success";  
  4.     }  
  5. }  

    提示:可以看到,在struts2裏定義一個Action類,其實就是一個簡單POJO類,非常乾淨,沒有半點Servlet API和struts API的影子.這是我們程序追求的一種思想:低耦合或鬆耦合設計模式.

 

   2.2、struts2很好地利用了AOP編程模式(即面向切面編程,在Spring框架也提供了這種編程模式),我們可以利用攔截器進行AOP編程,它 不僅可以攔截指向的Action,還可以攔截指定Action內的某些方法(更加地細粒度)。其次,struts2裏的很多功能都是通過struts2攔 截器(Interceptor)來實現的.  Struts2的攔截器跟struts1.x的過濾的設計非常相似,但struts2攔截器要比其更爲強大,它可以說是struts2的核心.(具體用法不在這裏細說,想學struts2的程序員們可以參看我寫的struts2兩天快速入門教程)

 

   2.3、struts2也提供了類似struts1.x的類型轉換器,但在struts1.x中,如果我們要實現同樣的功能,就必須向struts1.x的底層實現BeanUtil註冊類型轉換器才行,實現起來較麻煩. struts2的類型轉換器不僅編寫簡單,而且還提供節雙向類型轉換功能.

   

    2.4 、struts2提供支持多種表現層技術,如:JSP、freeMarker、Velocity、stream等.

   

    2.5 、struts2的輸入校驗可以對指定方法進行校驗(更加的細粒度)。

   

    2.6、 提供了全局範圍、包範圍和Action範圍的國際化資源文件的配置,這是一種模塊化的思想. 

 

    2.7、Struts2是線程安全的.當請求轉入Struts 2框架處理時會先經過一系列的攔截器,然後再到Action。與Struts1不同的是,Struts2對用戶的每一次請求都會創建一個Action,所 以Struts2中的Action是線程安全的.也正因爲如此,Struts2的Action可以有自己的成員變量。同時擁有了Struts1.x的 Form Bean的功能.Form Bean的存在在業界裏有一些爭議,認爲Form Bean是一個很多餘的角色,跟java實體類有些重複.因此在Struts2裏,已經廢棄了.

     其他細節上的區別,唯有大家使用過後纔會有所體會.

 

三、總體來說,struts2可以提高開發效率,開發效率的提高必須使得公司總體收益增加.公司總體收益增加,老闆就開心,老闆開心,作爲程序員的我們當然也就開心,說不定老闆一開心,就會給你加薪.哈哈

 

轉發:http://www.iteye.com/topic/554060

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章