一、首先,一個新版本的程序 是爲了解決老版本的一些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類:
- public class UserLogonAction extends Action {
- @Override
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- return mapping.findForward("success");
- }
- }
注意:可以看到UserLogonAction 同時跟Servlet API和struts API有着緊密的耦合關係.
而Struts2的出現已經很好地解決了這個問題,一個簡單的Action類如下:
- public class UserLogonAction {
- public String execute(){
- return "success";
- }
- }
提示:可以看到,在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