struts1與struts2的區別
單例項與多例項
有狀態就是有資料儲存功能,比如購物車,買一件東西放進去,可以再次購買或者刪減。
無狀態就是一次操作,不能儲存資料。
有狀態物件,就是有成員屬性的物件,可以儲存資料,是非執行緒安全的。
無狀態物件,就是沒有成員屬性的物件.不能儲存資料,是執行緒安全的。
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範圍的國際資原始檔管理實現。
相關文章
- 【Struts】:Struts1和Struts2的區別與聯絡
- springmvc與struts2的區別SpringMVC
- [JavaWeb]SpringMVC與Struts2區別與比較總結JavaWebSpringMVC
- springMVC和Struts2的區別SpringMVC
- Struts2的屬性驅動與模型驅動的區別模型
- Struts1、Struts2、Hibernate、Spring框架工作原理介紹Spring框架
- ??與?:的區別
- 【Struts2】:Struts2的型別轉換型別
- 從webwork2.2應用到struts2的移植看webwork2.x和struts2的區別Web
- MySQL的@與@@區別MySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- &與&&, |與||區別
- in與exist , not in與not exist 的區別
- CentOS 與 Ubuntu 的區別CentOSUbuntu
- artice與section的區別
- GET 與 POST 的區別
- WebSocket 與 Socket 的區別Web
- Postgresql與MySQL的區別MySql
- chown與chmod的區別
- LESS與SASS的區別
- free 與 CFRelease 的區別
- gulp與webpack的區別Web
- @Autowired 與@Resource的區別
- let與var的區別
- post與get的區別
- HashSet與HashMap的區別HashMap
- maven與ant的區別Maven
- __new()__ 與 __init()__的區別
- TCP與UDP的區別TCPUDP
- Mysql與mongodb的區別MySqlMongoDB
- typedef與define的區別
- Eureka與Zookeeper的區別
- buffer與cache的區別
- async與defer的區別
- synchronized與Lock的區別synchronized
- kill與pkill的區別
- int與Integer的區別