struts1與struts2的區別

y_keven發表於2014-08-18

單例項與多例項
有狀態就是有資料儲存功能,比如購物車,買一件東西放進去,可以再次購買或者刪減。
無狀態就是一次操作,不能儲存資料。

有狀態物件,就是有成員屬性的物件,可以儲存資料,是非執行緒安全的。
無狀態物件,就是沒有成員屬性的物件.不能儲存資料,是執行緒安全的。

Struts2 的Action是有狀態的,是非執行緒安全的,所以是多例項的。
Struts1的Action是無狀態的,是執行緒安全的,所以可以單例項。

無侵入式設計
Struts2沒有像Struts1那樣跟Servlet API有著緊密的耦合,Struts2的應用可以不依賴於Servlet API和Struts API。Struts2的這種設計屬於無侵入式設計,而Struts1卻屬於侵入式設計。

使用OGNL表示式語言
OGNL提供了在Struts2裡訪問各種作用域中的資料的簡單方式,你可以方便的獲取Request,Attribute,Application,Session,Parameters中的資料。

使用了攔截器
Struts2 的攔截器是一個Action級別的AOP,Struts2中的許多特性都是通過攔截器來實現的,例如異常處理,檔案上傳,驗證等。攔截器是可配置與重用 的,可以將一些通用的功能如:登入驗證,許可權驗證等置於攔截器中以完成一些Java Web專案中比較通用的功能。在我實現的的一Web專案中,就是使用Struts2的攔截器來完成了系統中的許可權驗證功能。

全域性結果與宣告式異常
為應用程式新增全域性的Result,和在配置檔案中對異常進行處理,這樣當處理過程中出現指定異常時,可以跳轉到特定頁面,這一功能十分實用。

方便的型別轉換
Struts2提供了型別轉換器,可以把特殊的請求引數轉換成需要的的型別。Struts1中如果實現同樣的功能,必須向Struts1的底層實現BeanUtil註冊型別轉換器。

其它

Struts2支援多種表現層技術,如JSP,freeMarker,Velocity等。
Struts2的輸入校驗可以對指定方法進行校驗,解決了Struts1長久這痛。
Struts2提供了全域性範圍、包範圍、Action範圍的國際資原始檔管理實現。

 

相關文章