1. 為什麼要使用Struts2的
Struts2 是一個相當強大的Java Web開源框架,是一個基於POJO的Action的MVC Web框架。它基於當年的Webwork和XWork框架,繼承其優點,同時做了相當的改進。
1.Struts2基於MVC架構,框架結構清晰,開發流程一目瞭然,開發人員可以很好的掌控開發的過程。
2使用OGNL進行參數傳遞。
OGNL提供了在Struts2里訪問各種作用域中的數據的簡單方式,你可以方便的獲取Request,Attribute,Application,Session,Parameters中的數據。大大簡化了開發人員在獲取這些數據時的代碼量。
3強大的攔截器
Struts2 的攔截器是一個Action級別的AOP,Struts2中的許多特性都是通過攔截器來實現的,例如異常處理,文件上傳,驗證等。攔截器是可配置與重用的,可以將一些通用的功能如:登錄驗證,許可權驗證等置於攔截器中以完成一些Java Web項目中比較通用的功能。在我實現的的一Web項目中,就是使用Struts2的攔截器來完成了系統中的許可權驗證功能。
4易於測試
Struts2的Action都是簡單的POJO,這樣可以方便的對Struts2的Action編寫測試用例,大大方便了5Java Web項目的測試。
易於擴展的插件機制在Struts2添加擴展是一件愉快而輕松的事情,只需要將所需要的Jar包放到WEB-INF/lib文件夾中,在struts.xml中作一些簡單的設置就可以實現擴展。常用的Struts2的擴展可以通過這個鏈接找到:http://cwiki.apache.org/S2PLUGINS/home.html
6模塊化管理
Struts2已經把模塊化作為了體系架構中的基本思想,可以通過三種方法來將應用程序模塊化:將配置信息拆分成多個文件把自包含的應用模塊創建為插件創建新的框架特性,即將與特定應用無關的新功能組織成插件,以添加到多個應用中去。
7全局結果與聲明式異常
為應用程序添加全局的Result,和在配置文件中對異常進行處理,這樣當處理過程中出現指定異常時,可以跳轉到特定頁面。
他的如此之多的優點,是很多人比較的青睞,與spring ,Hibernate進行結合,組成了現在比較流行的ssh框架,當然每個公司都要自己的框架,也是ssh變異的產品。
2. struts2中# %{} ${}等的作用
一般有三種。
1)訪問非根對象屬性,例如示例中的#session.msg表達式,由於Struts 2中值棧被視為根對象,所以訪問其他非根對象時,需要加#前綴。實際上,#相當於ActionContext. getContext();#session.msg表達式相當於ActionContext.getContext().getSession(). getAttribute(」msg」) 。
2)用於過濾和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
3)用來構造Map,例如示例中的#{』foo1′:』bar1′, 』foo2′:』bar2′}。
2.%符號
%符號的用途是在標志的屬性為字元串類型時,計算OGNL表達式的值。如下面的代碼所示:
構造Map
<s:set name=」foobar」 value=」#{』foo1′:』bar1′, 『foo2′:』bar2′}」 />
<p>The value of key 「foo1″ is <s:property value=」#foobar['foo1']」 /></p>
<p>不使用%:<s:url value=」#foobar['foo1']」 /></p>
<p>使用%:<s:url value=」%{#foobar['foo1']}」 /></p>
3.$符號
$符號主要有兩個方面的用途。
在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在min同{max}之間。
在Struts 2框架的配置文件中引用OGNL表達式,例如下面的代碼片斷所示:
<validators>
<field name=」intb」>
<field-validator type=」int」>
<param name=」min」>10</param>
<param name=」max」>100</param>
<message>BAction-test校驗:數字必須為min為{max}之間!</message>
</field-validator>
</field>
</validators