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官方文檔在講述配置的時(shí)候,一開(kāi)始就來(lái)了個(gè)“0配置”(Zero Configuration),大意就是說(shuō)在struts應(yīng)用中不使用任何xml文件或者properties文件,元數(shù)據(jù)(Metadate)都用通過(guò) 約定(convention)和注解(annotation)來(lái)表達(dá)的,而且這是struts2的一個(gè)新特性,目前仍在測(cè)試中,相關(guān)文檔也很粗略。接下來(lái) 的一部分講述的就是Annotation,我粗略的看了一下,估計(jì)它就是“0配置”的核心所在,我拿文檔中最簡(jiǎn)單的一個(gè)例子來(lái)看一下:

@Result(name="success", value="/home.page", type=TilesResult.class)
public class HomeAction extends ActionSupport {
    // ...
}

紅 底的部分就是我們所說(shuō)的Annotation,它說(shuō)明這個(gè)當(dāng)這個(gè)action返回值為”success”時(shí)頁(yè)面就跳轉(zhuǎn)值/home.pag,就相當(dāng)于我們 在struts.xml中配置的result元素,采用了這個(gè)Annotiation之后我們就不用寫配置文件了,實(shí)現(xiàn)了所謂的“0配置”。一般我們?cè)谂? 置actio的時(shí)候都會(huì)出現(xiàn)多個(gè)result,這時(shí)Annotation就可以這么寫:

@Results({
    @Result(name="success", value="/home.page", type=TilesResult.class),
    @Result(name="homeError", value="/homeError.page", type=tilesResult.class)
})

還有一個(gè)問(wèn)題,如果沒(méi)有配置文件我們?nèi)绾沃廊ツ膬赫{(diào)用哪個(gè)action呢?為了完成這個(gè)功能我們需要這樣配置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> <!--這里我們可以設(shè)置到com.kelven.action即可,命名空間以@namespace為準(zhǔn)-->
  </init-param>
</filter>

其實(shí)也沒(méi)什么特殊的,就是給我們的Controller加了一個(gè)參數(shù)actionPackages,從字面上理解,Controller將會(huì)從com.foo.bar和com.baz.quux這兩個(gè)包中去尋找action,具體的流程是這樣的:

1.系統(tǒng)首先通過(guò)web.xml文件裝載FilterDispatcher類,它要有actionPackages參數(shù)

2.FilterDispatcher會(huì)初始化一個(gè)Dispatcher,并傳遞actionPackages的值

3.Dispatcher會(huì)初始化一個(gè)ClasspathConfigurationProvider對(duì)象,用它來(lái)存放一個(gè)或多個(gè)Configuration Providers

4.Dispatcher給ConfigurationManager對(duì)象增加一個(gè)ClasspathConfigurationProvider來(lái)處理actionPackages參數(shù)

5.Someone會(huì)調(diào)用ClasspathConfigurationProvider的loadpackages方法

6.Loadpackages 會(huì)首先利用ResolverUtil從所列package(就是actionPackages參數(shù)的值)中找到所有實(shí)現(xiàn)了Action接口和名字帶有 Action后綴的類,然后這些類會(huì)集中放入一個(gè)Set集合中,然后這個(gè)Set中的每個(gè)類都會(huì)被傳遞給processActionClass方法

7.processActionClass首先確定命名空間,然后捕捉任何ParentPackage和Results類型的Annotation,接著創(chuàng)建一個(gè)ActionConfig,設(shè)置action name,package name以及results。

步驟7獲取action名字的規(guī)則是這樣的:將action name從任何“Action”后綴前面截取掉,如果action name含有“/”的話,那么將最后一個(gè)“/”后面的第一個(gè)字母變?yōu)樾憽_€是舉例來(lái)進(jìn)行說(shuō)明吧:

如果我們的actionPackages參數(shù)是com.myapp.actions,我們的Action類是com.myapp.actions.member.EditAction,那么我們可以通過(guò)下面的url來(lái)訪問(wèn)這個(gè)類:http://server/myapp/member/edit.action.也就是子包(subpackage)將成為namespace,而action類名將成為action name。如果類名有一個(gè)“Action”后綴,那么它將被去掉。

至 此我們就實(shí)現(xiàn)我們的“0配置”了,^_^,Annotation在其中還是扮演著非常重要的作用的,除了我們前面已提到的Result Annotation這個(gè)Action Annotations外,還有Interceptor Annotations、Validation Annotations和Type Conversion Annotations,因?yàn)轫?xiàng)目中基本上沒(méi)有用到這個(gè)新特性,我也就沒(méi)有深入的看這些Annotations的詳細(xì)使用方法了。

from:http://blog.csdn.net/cmtobby/archive/2007/09/02/1769390.aspx


Tags: struts  struts2  配置  Annotation  

原創(chuàng)文章如轉(zhuǎn)載,請(qǐng)注明:轉(zhuǎn)載自:飛揚(yáng)部落編程倉(cāng)庫(kù) : http://www.busfly.cn/csdn/

本文鏈接地址:http://www.busfly.cn/csdn/post/Struts-Struts2-Annotation.html

如果你喜歡本文,請(qǐng)頂一下,支持我,你的支持是我繼續(xù)發(fā)好文章的最大動(dòng)力。謝謝。
好東西需要分享,快把本文發(fā)給你的朋友吧~!~