struts2 Annotation maven pom xml:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-codebehind-plugin</artifactId>
<version>2.1.6</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Struts2官方文檔在講述配置的時候,一開始就來了個“0配置”(Zero Configuration),大意就是說在struts應用中不使用任何xml文件或者properties文件,元數據(Metadate)都用通過 約定(convention)和注解(annotation)來表達的,而且這是struts2的一個新特性,目前仍在測試中,相關文檔也很粗略。接下來 的一部分講述的就是Annotation,我粗略的看了一下,估計它就是“0配置”的核心所在,我拿文檔中最簡單的一個例子來看一下:
@Result(name="success", value="/home.page", type=TilesResult.class)
public class HomeAction extends ActionSupport {
// ...
}
紅 底的部分就是我們所說的Annotation,它說明這個當這個action返回值為”success”時頁面就跳轉值/home.pag,就相當于我們 在struts.xml中配置的result元素,采用了這個Annotiation之后我們就不用寫配置文件了,實現了所謂的“0配置”。一般我們在配 置actio的時候都會出現多個result,這時Annotation就可以這么寫:
@Results({
@Result(name="success", value="/home.page", type=TilesResult.class),
@Result(name="homeError", value="/homeError.page", type=tilesResult.class)
})
還有一個問題,如果沒有配置文件我們如何知道去哪兒調用哪個action呢?為了完成這個功能我們需要這樣配置web.xml文件:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.foo.bar,com.baz.quux</param-value> <!--這里我們可以設置到com.kelven.action即可,命名空間以@namespace為準-->
</init-param>
</filter>
其實也沒什么特殊的,就是給我們的Controller加了一個參數actionPackages,從字面上理解,Controller將會從com.foo.bar和com.baz.quux這兩個包中去尋找action,具體的流程是這樣的:
1.系統首先通過web.xml文件裝載FilterDispatcher類,它要有actionPackages參數
2.FilterDispatcher會初始化一個Dispatcher,并傳遞actionPackages的值
3.Dispatcher會初始化一個ClasspathConfigurationProvider對象,用它來存放一個或多個Configuration Providers
4.Dispatcher給ConfigurationManager對象增加一個ClasspathConfigurationProvider來處理actionPackages參數
5.Someone會調用ClasspathConfigurationProvider的loadpackages方法
6.Loadpackages 會首先利用ResolverUtil從所列package(就是actionPackages參數的值)中找到所有實現了Action接口和名字帶有 Action后綴的類,然后這些類會集中放入一個Set集合中,然后這個Set中的每個類都會被傳遞給processActionClass方法
7.processActionClass首先確定命名空間,然后捕捉任何ParentPackage和Results類型的Annotation,接著創建一個ActionConfig,設置action name,package name以及results。
步驟7獲取action名字的規則是這樣的:將action name從任何“Action”后綴前面截取掉,如果action name含有“/”的話,那么將最后一個“/”后面的第一個字母變為小寫。還是舉例來進行說明吧:
如果我們的actionPackages參數是com.myapp.actions,我們的Action類是com.myapp.actions.member.EditAction,那么我們可以通過下面的url來訪問這個類:http://server/myapp/member/edit.action.也就是子包(subpackage)將成為namespace,而action類名將成為action name。如果類名有一個“Action”后綴,那么它將被去掉。
至 此我們就實現我們的“0配置”了,^_^,Annotation在其中還是扮演著非常重要的作用的,除了我們前面已提到的Result Annotation這個Action Annotations外,還有Interceptor Annotations、Validation Annotations和Type Conversion Annotations,因為項目中基本上沒有用到這個新特性,我也就沒有深入的看這些Annotations的詳細使用方法了。
from:http://blog.csdn.net/cmtobby/archive/2007/09/02/1769390.aspx

Tags: struts struts2 配置 Annotation
原創文章如轉載,請注明:轉載自:飛揚部落編程倉庫 : http://www.busfly.cn/csdn/
本文鏈接地址:http://www.busfly.cn/csdn/post/Struts-Struts2-Annotation.html
如果你喜歡本文,請頂一下,支持我,你的支持是我繼續發好文章的最大動力。謝謝。
好東西需要分享,快把本文發給你的朋友吧~!~