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

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

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

    duansky'weblog

    統計

    留言簿(3)

    友情鏈接

    閱讀排行榜

    評論排行榜

    簡述STRUTS2 Convention零配置

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

    如何使用 Convention

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

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

    1) ? 所有實現了 com.opensymphony.xwork2.Action java

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

    3. ?????? Convention 插件還允許設置如下三個常量:

    1) ? struts.Convention.exclude.packges: 指定不掃描哪些包下的 java 類,位于這些包結構下的 java 類將不會自動映射成 Action

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

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

    注意: struts.convention.package.locators struts.convention.action.packages 兩個常量的作用比較微妙,開發者在利用這兩個常量時務必小心。

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

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

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

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

    4. ?????? 映射 Action name 時,遵循如下兩步規則

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

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

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

    5. ?????? 默認情況下。 Convention 總會到 WEB 應用的 WEB-INF/content 路徑下定位物理資源 ,定位資源的約定是: actionRUL+resultCODE+suffix 。當某個邏輯視圖找不到對應的試圖資源時, Convention 會自動視圖使用 ActionURL+suffix 作為物理視圖資源。

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

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

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

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

    7.Action 鏈的約定

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

    1) ? 第一個 Action 返回的邏輯視圖字符串沒有對應的視圖資源

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

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

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

    注意:由于 Convention 插件根據 Action jsp 頁面來動態生成映射的,因此不管是 Acion 的改變,還是 JSP 頁面的改變都需要 Convention 插件重新加載映射。那么只要我們為 struts2 應用配置如下兩個常量就可以了。

    <!-- 配置 struts2 應用于開發模式 -- >

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

    <!— 配置 Convention 插件自動重加載映射 -- >

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

    幾個重要的常量

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

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

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

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

    7. ?????? Convention Annotation

    1) ? Action 相關的兩個 Annotation @Action @Actions

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

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

    4) ? @Actions 也用于修飾 Action 類里的方法,用于將該方法映射到多個 URL.@Actions 用于組織多個 @Action. 因此它可將一個方法映射成多個邏輯 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" , " 這是已經注入的了! " }),

    ?????? @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 訪問,而在訪問時, str 這個屬性已經有值,為 str=” 這是已經注入的! 返回的視圖是 login1-str.jsp

    當我們用 /login2.action 訪問時, str 的值為 null 。返回的視圖為 login2-str.jsp

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

    8. ?????? Result 配置相關的 Annotation

    1 @ResultPath @Result Results

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

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

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

    ???? location 相當于 <result>…..</result> 中間部分,用于指定實際視圖位置

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

    4)@Result 有以下兩種用法

    1 Action 級的 Result 映射:以 @Actions 組合多個 @Action 后修飾的 Action 類。這種 Result 映射對該 Action 里的所有方法都有效。

    2 方法級 Result 映射:將多個 @Result 組成數組后作為 @Action results 屬性值。這種 Result 映射僅對被修飾的方法有效。

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

    ?

    9 與包和命名空間相關的 Annotation

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

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

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

    10 異常處理相關的 Annotation

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

    ?@ExceptionMapping 用于定義異常類和物理視圖之間的對應關系,也相當于 struts.xml 文件里 <exception-mapping../> 元素的作用 使用時,必須注意以下兩個屬性:

    ? exception: 用于指定異常類

    ? result 用于指定邏輯視圖

    @ExceptionMpping 有如下兩種用法

    ?? Action 級的異常定義 : @ExceptionMappings 組合多個 @ExceptionMapping 后修飾的 Action 類。這種異常定義對 Action 中的所有方法有效

    ? 方法級的異常定義: 將多個 @ExceptionMapping 組成數組后作為 @Action exceptionMappings 屬性值,這種異常定義僅對被修飾的方法有效。

    ?

    11. 攔截器配置相關的 Annotation

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

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

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

    轉自: http://blog.csdn.net/Beacher_Ma/archive/2009/10/27/4733227.aspx

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

    主站蜘蛛池模板: 亚洲国产精品久久人人爱| 久久久久久国产a免费观看黄色大片 | 亚洲高清日韩精品第一区| 成人免费毛片内射美女-百度| 久久综合亚洲色hezyo| 国产卡一卡二卡三免费入口| 亚洲国产av玩弄放荡人妇| 亚洲乳大丰满中文字幕| 3344在线看片免费| 亚洲av无码精品网站| 免费的涩涩视频在线播放| 国产无遮挡色视频免费观看性色| 最新国产AV无码专区亚洲| 在线看片免费人成视频播| 亚洲依依成人亚洲社区| 亚洲s色大片在线观看| 国产又黄又爽又刺激的免费网址| 国产成人久久AV免费| 精品国产亚洲一区二区三区在线观看 | 特级做A爰片毛片免费看无码| 亚洲中文久久精品无码ww16| 永久免费av无码网站韩国毛片| 国产精品hd免费观看| 亚洲精品免费在线观看| 国产精品免费观看| 精品久久久久久国产免费了| 亚洲色大成网站www永久男同 | 亚洲国产日产无码精品| 国产亚洲福利精品一区| 亚洲AV蜜桃永久无码精品| 我们的2018在线观看免费高清 | 亚洲日韩在线观看| 思思99re66在线精品免费观看| 久久国产乱子免费精品| 久久国产精品免费一区| 久久无码av亚洲精品色午夜| 2019亚洲午夜无码天堂| 亚洲乱码日产精品a级毛片久久| 性盈盈影院免费视频观看在线一区| 久久一本岛在免费线观看2020| 亚洲一本到无码av中文字幕|