咱們知道一般狀況下,Struts2是經過struts.xml配置的。可是隨着系統規模的加大咱們須要配置的文件會比較大,雖然咱們能夠根據不一樣的系統功能將不一樣模塊的配置文件單獨書寫,而後經過<include>節點將不一樣的配置文件引入到最終的struts.xml文件中,可是畢竟仍是要維護和管理這些文件,所以也會給維護工做帶來很大的困擾。爲了解決這個問題,能夠考慮使用struts2的註解。實際上struts2中最主要的概念就是package、action以及Interceptor等等概念,因此只要明白這些註解就能夠了。
使用struts2的註解功能,必須使用一個包struts2-convention-plugin-2.1.8.1.jar,我使用的環境是struts2.1.8.1。若是你使用了不一樣的版本,找名字就行。 java
在以上所述的jar文件中定義了一系列的註解,其中比較主要的是: express
- @ParentPackage:這個註解對應了xml文件中的package節點,它只有一個屬性叫value,其實就是package的name屬性;
/**
* Action包
*/
@ParentPackage("manager")
package cn.javass.ssh.doc.action;
import org.apache.struts2.convention.annotation.ParentPackage;
-
- @Namespace:命名空間,也就是xml文件中<package>的namespace屬性;
/**
* Action命名空間
*/
@Namespace(value="/test")
-
@Action :
這個註解對應
<action>
節點。這個註解能夠應用於
action
類上,也能夠應用於方法上。 這個註解中有幾個屬性:
- value(),表示action的URL,也就是<action>節點中的name屬性;
- results(),表示action的多個result;這個屬性是一個數組屬性,所以能夠定義多個Result;
- interceptorRefs(),表示action的多個攔截器。這個屬性也是一個數組屬性,所以能夠定義多個攔截器;
- params(),這是一個String類型的數組,它按照name/value的形式組織,是傳給action的參數;
- exceptionMappings(),這是異常屬性,它是一個ExceptionMapping的數組屬性,表示action的異常,在使用時必須引用相應的攔截器;
/**
* Action參數
*/
@Action(value = "file-manager",
interceptorRefs = {
@InterceptorRef(value = "fileUpload",params= {"maximumSize","1024000","allowedTypes","image/pjpeg"}
),
@InterceptorRef(value = "basicStack")
},
results = {
@Result(
name = ActionSupport.SUCCESS,
location = "/view/file-manager-sucess.jsp"
),
@Result(
name = ActionSupport.ERROR,
location = "/view/file-manager-error.jsp"
)
},
exceptionMappings = {
@ExceptionMapping(
exception = "java.lang.Exception",
result = ActionSupport.ERROR
)
}
) apache
-
@Result
:這個註解對應了
<result>
節點。這個註解只能應用於
action
類上。這個註解中也有幾個屬性:
- name(),表示action方法的返回值,也就是<result>節點的name屬性,默認狀況下是 【success】;
- location(),表示view層文件的位置,能夠是相對路徑,也能夠是絕對路徑;
- type(),是action的類型,好比redirect;
- params(),是一個String數組。也是以name/value形式傳送給result的參數;
驗證註解:
@Validations(
requiredStrings={
@RequiredStringValidator(fieldName="username",message="用戶名不能爲空!"),
@RequiredStringValidator(fieldName="telNum",message="電話號碼不能爲空!")
},
regexFields= {
@RegexFieldValidator(
fieldName="telNum",
expression="^(\\+86|0|1)\\d{10,11}$",
message="電話號碼格式不正確!"
)
}
)
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。
與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("/view")修飾該Action,系統將回到view目錄下尋找物理視圖資源。
與包和命名空間相關的Annotation:
@Namespace:修飾Action類或其所在的包。該Annotation中指定一個value屬性值,用於指定被修飾的Action所在的命名空間
@Namespaces:修飾Action類或其所在的包,用於組合多個@Namespace
@ParentPackage: 用於指定被修飾的Action所在包的父包。
與異常處理相關的Annotation
@ExceptionMappings 用於組織多個@ExceptionMapping,所以它只需指定一個value屬性值,該value屬性值爲多個@ExceptionMapping。
@ExceptionMapping 用於定義異常類和物理視圖之間的對應關係,也至關於struts.xml文件裏<exception-mapping../>元素的做用 使用時,必須注意如下兩個屬性:
exception: 用於指定異常類
result:用於指定邏輯視圖
@ExceptionMpping有以下兩種用法
Action級的異常定義:以@ExceptionMappings組合多個@ExceptionMapping後修飾的Action類。這種異常定義對Action中的全部方法有效
方法級的異常定義:將多個@ExceptionMapping組成數組後做爲@Action的exceptionMappings屬性值,這種異常定義僅對被修飾的方法有效。
與攔截器配置相關的Annotation
與攔截器配置的Annotation有@InterceptorRef、@InterceptorRefs和@DefaultInterceptorRef
@InterceptorRefs用於組織多個@InterceptorRef,所以它只須要指定一個value屬性值,該value屬性值爲多個@InterceptorRef
@InterceptorRef用於爲指定Action引用lanjieq或者是攔截器棧。也就至關於strut.xml中位於<action../>元素內部的<interceptor-ref../>子元素的做用。使用@InterceptorRefAnnotation時,必須制定一個value屬性,用於指定所引用的攔截器或攔截器棧的名字。至關於<interceptor-ref../>子元素裏name屬性的做用。
查看struts2配置
爲了看到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插件的首頁。