<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    duansky'weblog

    統(tǒng)計(jì)

    留言簿(3)

    友情鏈接

    閱讀排行榜

    評(píng)論排行榜

    簡(jiǎn)述STRUTS2 Convention零配置

    struts2.1 開始, struts2 不再推薦使用 Codebehind 作為零配置插件,而是改為使用 Convention 插件來支持零配置,和 Codebehind 相比, Convention 插件更徹底,該插件完全拋棄配置信息,不僅不需要是使用 struts.xml 文件進(jìn)行配置,甚至不需要使用 Annotation 進(jìn)行配置,而是由 struts2 根據(jù)約定自動(dòng)配置。

    如何使用 Convention

    1. ?????? struts-Convention-plugin-2.1.6.jar 文件復(fù)制到 WEB-INF/lib 路徑下

    2. ?????? 對(duì)于 Convention 插件而言,它會(huì)自動(dòng)搜索位于 action actions struts struts2 包下的所有 java 類, Convention 插件會(huì)把如下兩種 java 類當(dāng)成 Action 處理:

    1) ? 所有實(shí)現(xiàn)了 com.opensymphony.xwork2.Action java

    2) ? 所有類名以 Action 結(jié)尾的 java

    3. ?????? Convention 插件還允許設(shè)置如下三個(gè)常量:

    1) ? struts.Convention.exclude.packges: 指定不掃描哪些包下的 java 類,位于這些包結(jié)構(gòu)下的 java 類將不會(huì)自動(dòng)映射成 Action

    2) ? struts.convention.package.locators:Convention 插件使用該常量指定的包作為搜尋 Action 的根包。對(duì)于 actions.fore.LoginAction 類,按約定原本應(yīng)映射到 /fore/login; 如果將該常量設(shè)為 fore ,則該 Action 將會(huì)映射到 /login

    3) ? struts.convention.action.packages:Convention 插件以該常量指定包作為根包來搜索 Action 類。 Convention 插件除了掃描 action,actions,struts,struts2 四個(gè)包的類以外,還會(huì)掃描該常量指定的一個(gè)或多個(gè)包, Convention 會(huì)試圖從中發(fā)現(xiàn) Action 類。

    注意: struts.convention.package.locators struts.convention.action.packages 兩個(gè)常量的作用比較微妙,開發(fā)者在利用這兩個(gè)常量時(shí)務(wù)必小心。

    如:下面 Action 所在包被映射的命名空間如下:

    com.fun.actions.LoginAction 映射到 ?? /

    com.fun.actions.myoffice.CarInfoAction 映射到 /myoffice

    com.fun.struts.myoffice.EntINfoAction 映射到 /myofiice

    4. ?????? 映射 Action name 時(shí),遵循如下兩步規(guī)則

    1) ? 如果該 Action 類名包含 Action 后綴,將該 Action 類名的 Action 后綴去掉。否則不做任何處理。

    2) ? Action 類名的駝峰寫法(每個(gè)單詞首字母大寫、其他字母小寫的寫法)轉(zhuǎn)成中畫線寫法(所有字母小寫,單詞與單詞之間以中畫線隔開)

    如: LoginAction 映射的 Acion name 屬性為 login GetBooks 映射的 Action name 的屬性為 get-books AddEmployeeAction 映射的 Action name 屬性為 add-employee

    5. ?????? 默認(rèn)情況下。 Convention 總會(huì)到 WEB 應(yīng)用的 WEB-INF/content 路徑下定位物理資源 ,定位資源的約定是: actionRUL+resultCODE+suffix 。當(dāng)某個(gè)邏輯視圖找不到對(duì)應(yīng)的試圖資源時(shí), Convention 會(huì)自動(dòng)視圖使用 ActionURL+suffix 作為物理視圖資源。

    ???? ?? 如: actions.fore.LoginAction 返回 success 字符串時(shí), Convention 優(yōu)先考慮使用 WEB-INF/content/fore 目錄下的 login-success.jsp 作為視圖資源。如果找不到該文件, login.jsp 也可作為對(duì)應(yīng)的試圖資源。如果返回 input 字符串, Convention 會(huì)將 WEB-INF/content/fore 里面查找 login-input.jsp

    6. ?????? 為了看到 struts2 應(yīng)用里的 Action 等各種資源的影射情況, struts2 提供了 Config Browser 插件。 使用方法,將 struts2-config-browser-plugin-2.1.6.jar 文件復(fù)制到 struts2 應(yīng)用的 WEB-INF\lib 目錄中。

    打開首頁地址: http://localhost:8080/ 應(yīng)用名字 /config-browser/actionNames.action 這里可以看到 Config Browser 插件的首頁。

    注意:這里不管開發(fā)者是否使用 struts.xml 文件進(jìn)行配置,一樣可以看到 struts 的配置信息。

    7.Action 鏈的約定

    如果希望一個(gè) Action 處理結(jié)束后不是進(jìn)入一個(gè)試圖頁面,而是進(jìn)行另一個(gè) Action 形成的 Action 鏈。通過 Convention 插件則只需遵守如下三個(gè)約定即可。

    1) ? 第一個(gè) Action 返回的邏輯視圖字符串沒有對(duì)應(yīng)的視圖資源

    2) ? 第二個(gè) Action 與第一個(gè) Action 處在同一個(gè)包下

    3) ? 第二個(gè) Action 影射的 URL 為: firstActionURL+resultCODE

    如,第一個(gè) Action OneAction ,里面有個(gè)方法返回為“ two , 那么就得保證, WEB-INF/content/ 下沒有 one.jsp one-two.jsp 對(duì)于第二個(gè) action 它的名字應(yīng)該是 OneTwoAction ,而對(duì)應(yīng)的 url 應(yīng)該是:“ one-two.action

    注意:由于 Convention 插件根據(jù) Action jsp 頁面來動(dòng)態(tài)生成映射的,因此不管是 Acion 的改變,還是 JSP 頁面的改變都需要 Convention 插件重新加載映射。那么只要我們?yōu)?/span> struts2 應(yīng)用配置如下兩個(gè)常量就可以了。

    <!-- 配置 struts2 應(yīng)用于開發(fā)模式 -- >

    <constant name=”struts.devMode” value=”true”/>

    <!— 配置 Convention 插件自動(dòng)重加載映射 -- >

    <constant name=”struts.convention.classes.reload” value=”true”/>

    幾個(gè)重要的常量

    struts.convention.action.disableJarScanning--- 是否從包中搜索 Action

    struts.convention.action.package--------Convention 插件以該常量指定包作為根包

    struts.convention.result.path --- 設(shè)置 Convention 插件定位視圖資源的根路徑。默認(rèn)值為 /WEB-INF/content

    struts.convention.result.flatLayout— 如果是為 false 則可以將試圖放置 Action 對(duì)應(yīng)的目錄下,無需放入 WEB-INF/content

    7. ?????? Convention Annotation

    1) ? Action 相關(guān)的兩個(gè) Annotation @Action @Actions

    2) ? @Action 中可指定一個(gè) value 屬性。類似于指定 <action name=””/> 屬性值

    3) ? @Action 中還可以指定一個(gè) params 屬性,該屬性是一個(gè)字符串?dāng)?shù)組,用于該 Acion 指定的參數(shù)名和參數(shù)值。 params 屬性應(yīng)遵守如下格式: {“name1”,”value1”,”name2”,”value2”}

    4) ? @Actions 也用于修飾 Action 類里的方法,用于將該方法映射到多個(gè) URL.@Actions 用于組織多個(gè) @Action. 因此它可將一個(gè)方法映射成多個(gè)邏輯 Action

    如:

    package com.fun.actions;

    ?

    ?

    ?

    import org.apache.struts2.convention.annotation.Action;

    import org.apache.struts2.convention.annotation.Actions;

    ?

    import com.fun.service.LoginService;

    import com.opensymphony.xwork2.ActionSupport;

    ?

    public class LoginAction extends ActionSupport {

    ??? private String str ;

    ??? @Actions ({

    ?????? @Action (value= "login1" ,params={ "str" , " 這是已經(jīng)注入的了! " }),

    ?????? @Action (value= "login2" )

    ??????

    ??? })

    ??? public String login(){

    ?????? return "str" ;

    ??? }

    ??? @Action (value= "ggg" )

    ??? public String abc(){

    ?????? return "abc" ;

    ??? }

    ??? public String getStr() {

    ?????? return str ;

    ??? }

    ??? public void setStr(String str) {

    ?????? this . str = str;

    ??? }

    ???

    }

    我們可以通過 /login1.action 訪問,而在訪問時(shí), str 這個(gè)屬性已經(jīng)有值,為 str=” 這是已經(jīng)注入的! 返回的視圖是 login1-str.jsp

    當(dāng)我們用 /login2.action 訪問時(shí), str 的值為 null 。返回的視圖為 login2-str.jsp

    而我們通過 /ggg.action 調(diào)用的是 abc ()方法,返回的視圖為 /ggg-abc.jsp

    8. ?????? Result 配置相關(guān)的 Annotation

    1 @ResultPath @Result Results

    2 @Results 用于組織多個(gè) @Result 因此它只需指定一個(gè) value 屬性值,該 value 屬性值為多個(gè) @Result

    3 @Result 相當(dāng)于 struts.xml 文件中的 <result/> 元素的做喲歐諾個(gè)。使用 @Result 必須指定一個(gè) name 屬性,相當(dāng)于 <result name=””/> 另外,它還有幾個(gè)可選的屬性。

    ??? ? type 相當(dāng)于 <result type=””/> 指定返回視圖資源的類型

    ???? location 相當(dāng)于 <result>…..</result> 中間部分,用于指定實(shí)際視圖位置

    ???? params :該屬性相當(dāng)于 <result/> 元素里多個(gè) <param../> 子元素的作用,用于為該 Result 指定參數(shù)值。該屬性應(yīng)滿足 {“name1”,”value1”,”name2”,”value2”} 格式

    4)@Result 有以下兩種用法

    1 Action 級(jí)的 Result 映射:以 @Actions 組合多個(gè) @Action 后修飾的 Action 類。這種 Result 映射對(duì)該 Action 里的所有方法都有效。

    2 方法級(jí) Result 映射:將多個(gè) @Result 組成數(shù)組后作為 @Action results 屬性值。這種 Result 映射僅對(duì)被修飾的方法有效。

    5 @ResultPath 則用于修飾包和 Action 類,用于改變被修飾 Action 所對(duì)應(yīng)的物理視圖資源的根路徑。舉例說:默認(rèn)情況下, Convention 都會(huì)到 WEB-INF/content 路徑下找物理視圖資源,一旦我們使用 @ResultPath(“/abc”) 修飾該 Action ,系統(tǒng)將回到 abc 目錄下尋找物理視圖資源。舉例:在默認(rèn)情況下, Convention 都會(huì)到 WEB-INF/content 路徑下需找物理視圖資源,一旦我們使用 @ResultPath(“/abc”) 修飾該 Action ,系統(tǒng)會(huì)到 abc 目錄下尋找物理視圖資源。

    ?

    9 與包和命名空間相關(guān)的 Annotation

    ?? @Namespace :修飾 Action 類或其所在的包。該 Annotation 中指定一個(gè) value 屬性值,用于指定被修飾的 Action 所在的命名空間

    ? @Namespaces :修飾 Action 類或其所在的包,用于組合多個(gè) @Namespace

    ? @ParentPackage: 用于指定被修飾的 Action 所在包的夫包。

    10 異常處理相關(guān)的 Annotation

    ? @ExceptionMappings 用于組織多個(gè) @ExceptionMapping ,因此它只需指定一個(gè) value 屬性值,該 value 屬性值為多個(gè) @ExceptionMapping

    ?@ExceptionMapping 用于定義異常類和物理視圖之間的對(duì)應(yīng)關(guān)系,也相當(dāng)于 struts.xml 文件里 <exception-mapping../> 元素的作用 使用時(shí),必須注意以下兩個(gè)屬性:

    ? exception: 用于指定異常類

    ? result 用于指定邏輯視圖

    @ExceptionMpping 有如下兩種用法

    ?? Action 級(jí)的異常定義 : @ExceptionMappings 組合多個(gè) @ExceptionMapping 后修飾的 Action 類。這種異常定義對(duì) Action 中的所有方法有效

    ? 方法級(jí)的異常定義: 將多個(gè) @ExceptionMapping 組成數(shù)組后作為 @Action exceptionMappings 屬性值,這種異常定義僅對(duì)被修飾的方法有效。

    ?

    11. 攔截器配置相關(guān)的 Annotation

    ? 與攔截器配置的 Annotation @InterceptorRef @InterceptorRefs @DefaultInterceptorRef

    @InterceptorRefs 用于組織多個(gè) @InterceptorRef ,因此它只需要指定一個(gè) value 屬性值,該 value 屬性值為多個(gè) @InterceptorRef

    @InterceptorRef 用于為指定 Action 引用 lanjieq 或者是攔截器棧。也就相當(dāng)于 strut.xml 中位于 <action../> 元素內(nèi)部的 <interceptor-ref../> 子元素的作用。使用 @InterceptorRefAnnotation 時(shí),必須制定一個(gè) value 屬性,用于指定所引用的攔截器或攔截器棧的名字。相當(dāng)于 <interceptor-ref../> 子元素里 name 屬性的作用。

    轉(zhuǎn)自: http://blog.csdn.net/Beacher_Ma/archive/2009/10/27/4733227.aspx

    posted on 2010-11-23 21:02 duansky 閱讀(640) 評(píng)論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 国产免费一区二区三区免费视频| 亚洲欧洲国产综合AV无码久久| 男人和女人高潮免费网站| 亚洲区视频在线观看| 亚洲AV男人的天堂在线观看| 亚洲视频日韩视频| 亚洲第一AAAAA片| 亚洲精品无码久久一线| 中文字幕精品亚洲无线码一区| 亚洲精品无码永久在线观看| 国产免费131美女视频| 久久亚洲国产成人影院网站| 亚洲综合精品一二三区在线| 亚洲AV无码专区在线亚| 国产尤物在线视精品在亚洲| 女同免费毛片在线播放| 97在线免费视频| 久久精品免费观看| 三年片在线观看免费观看大全动漫 | 少妇高潮太爽了在线观看免费| 天天影院成人免费观看| 国产美女无遮挡免费视频| 国产亚洲精品资源在线26u| 亚洲精品亚洲人成在线麻豆| 亚洲大香伊人蕉在人依线| 亚洲国产成人AV网站| 国偷自产一区二区免费视频| 波多野结衣在线免费观看| 成人午夜18免费看| 国产成人亚洲精品狼色在线 | 在线观看亚洲人成网站| 亚洲成在人线在线播放无码| 99精品免费视品| 在线免费观看一级片| 免费观看四虎精品国产永久| 亚洲AV无码乱码国产麻豆| 国产成人人综合亚洲欧美丁香花| 久久狠狠躁免费观看2020| 国产成人精品高清免费| 中文字幕亚洲精品| jizz免费在线影视观看网站|