Struts 2 中不想要要在在處理和HTTP相關的操作,自需要使用框架的接口即可。
在Strut 2 中不再會涉及到諸如 HttpServletRequest, HttpServletResponse, HttpSession等Http相關的Servlet接口類,取而代之的是Struts 2 的接口,例如RequestAware,SessionAware等。
Struts 2 的標簽基於 CSS,標簽可以提供自己需要的HTML支持。
Struts 2 的標簽利用了CSS和模板,使用起來會非常方便,在Struts 1.x中我們需要使用Table來組織表單,但是在Struts 2中所有的標簽自帶了Table內容,可以方便的處理格式。例如<s:textfield> 標簽自動添加了 <tr> <td> 等標簽。
有狀態的Checkbox,可以以一種統一的方式記錄checkbox狀態的變化。
在Struts 2中即使沒有被選中的checkbox其內容仍然存在於Struts 2 框架中,不必像在Struts 1.x中那樣需要做特殊的存在性判斷。
靈活的取消按鈕,在取消按鈕點擊的時候可以指向一個不同的action。
@TODO
可以在制定Form的action的同時,制定cancel按鈕的action,當點擊submit和cancel的時候出現完全按不同的功能。
第一等級的AJAX的支持,在普通struts 標簽的基礎上,使用AJAX增加了交互性和靈活性。
Struts 2 的標簽內置了Ajax的支持。Struts 2 的標簽使用了Dojotoolkit Ajax框架,不但能夠使用Ajax特性,而且能夠使用非常豐富和強大的浏覽器小控件,例如日期選擇控件
見到那集成Spring框架,非常簡單的使用Spring框架提供的依賴注入功能。
可以方便的使用Spring管理Struts 2 的action的創建,通過使用Spring可以充分的利用Spring的依賴諸如功能,並且能夠很好的集成其他的框架,例如Hibernate,iBatis等。
更多的返回形式,除了JSP還支持,JasperReports,JFreeChart, Action鏈,文件下載等。
除了支持JSP的表現形式,還支持JasperResports報表, JFreechart圖標,Action鏈,文件下載等。
POJO表單,不再需要ActionForms,使用Javabean獲得客戶的收入或者將屬性表示出來,
完全消除了ActionForm組建,可以使用任意合適的類型來接受頁面傳來的數據或者將數據表現出來。ActionFrom可以使用POJO的 JavaBean來替代,JavaBean中的屬性可以使用String,也可以使用具體的類型,例如Date,Int等。
POJO Action,使用任意的類作為Action類,甚至可以使用接口。
任何類都可以作為Action類,只要接口滿足一些簡單的定義,不需要在使用Action類似的基類,你可以完全自由的發揮。
部署
插件結構,使用jar文件擴展框架功能,不需要在做手動的配置,內置了JavaServer Faces, JasperResports, JFreeChart, Tiles等插件。
擴展一個功能只需要添加一個插件,插件甚至可以熱插拔,在你的應用不停止的情況下追加新的功能。
集成了分析功能,可以方便的找到程序性能的問題點。
可以不借助外力發現程序的熱點,找到問題的所在,
准確的報告錯誤,可以非常准確的指出程序的問題點。
准確的報告運行時的錯誤,方便解決問題。
維護
Action容易測試,直接測試Struts 2的Action,不需要使用Mock Http對象來測試。
Action是普通的類,不需要特殊的環境,所以Struts 2 的Action 特別容易測試。
聰明的默認值,不需要配置不必要的配置,大部分的框架配置元素的都有非常合適的默認值,基本上你不需要在做任何配置。
Struts 2 有很多的配置項,但是每一個都有默認值,基本額上不需要更改默認的選項即可保證最佳
容易定制的控制器,可以定制每一個Action的處理過程。
可以使用Intercepter來過濾每一個Action,在Action執行前後追加自定義的操作。
集成了Debugging,可以使用內容之的debugging工具找到問題。
靈活的標簽庫,可以通過修改FreeMarker模板來定制標簽的輸出,不需要在操作像天書異樣的JSP Taglib API,模板語言支持,Freemarker和Velocity
可以自定義模板庫,或者修改已有模板的內容來定制頁面的顯示。
Struts 2 中使用的模式
Command
Chain of responsibility
Struts2 處理流程概要
上圖來源於Struts2官方站點,是Struts 2 的整體結構。
一個請求在Struts2框架中的處理大概分為以下幾個步驟
1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)
3 接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action
4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy
5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類
6 ActionProxy創建一個ActionInvocation的實例。
7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用。
8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper
在上述過程中所有的對象(Action,Results,Interceptors,等)都是通過ObjectFactory來創建的