Struts2的註解功能Struts2的註解功能

來源:互聯網
上載者:User
Struts2的註解功能

我們知道通常情況下,Struts2是通過struts.xml配置的。但是隨著系統規模的加大我們需要配置的檔案會比較大,雖然我們可以根據不同的系統功能將不同模組的設定檔單獨書寫,然後通過<include>節點將不同的設定檔引入到最終的struts.xml檔案中,但是畢竟還是要維護和管理這些檔案,因此也會給維護工作帶來很大的困擾。為瞭解決這個問題,可以考慮使用struts2的註解。實際上struts2中最主要的概念就是package、action以及Interceptor等等概念,所以只要明白這些註解就可以了。

如果希望使用struts2的註解功能,必須使用一個包struts2-convention-plugin-2.1.8.1.jar,我使用的環境是struts2.1.8.1。如果你使用了不同的版本,找名字就行。

在以上所述的jar檔案中定義了一系列的註解,其中比較主要的是:

  • @ParentPackage,這個註解對應了xml檔案中的package節點,它只有一個屬性叫value,其實就是package的name屬性;
  • @Namespace,命名空間,也就是xml檔案中<package>的namespace屬性;
  • @Action,這個註解對應<action>節點。這個註解可以應用於action類上,也可以應用於方法上。這個註解中有幾個屬性:
    • value(),表示action的URL,也就是<action>節點中的name屬性;
    • results(),表示action的多個result;這個屬性是一個數組屬性,因此可以定義多個Result;
    • interceptorRefs(),表示action的多個攔截器。這個屬性也是一個數組屬性,因此可以定義多個攔截器;
    • params(),這是一個String類型的數組,它按照name/value的形式組織,是傳給action的參數;
    • exceptionMappings(),這是異常屬性,它是一個ExceptionMapping的數組屬性,表示action的異常,在使用時必須引用相應的攔截器;
  • @Result,這個註解對應了<result>節點。這個註解只能應用於action類上。這個註解中也有幾個屬性:
    • name(),表示action方法的傳回值,也就是<result>節點的name屬性,預設情況下是【success】;
    • location(),表示view層檔案的位置,可以是相對路徑,也可以是絕對路徑;
    • type(),是action的類型,比如redirect;
    • params(),是一個String數組。也是以name/value形式傳送給result的參數;

實際上,struts2中的主要註解就是這些,當然了,還有上面提到的@interceptorRef和@exceptionMapping;基本上,掌握了這些註解就可以了。

但是如果想讓這些註解真正工作,必須在設定檔增加幾個常量的定義:

  • struts.convention.default.parent.package:這個常量表示預設的包名是什麼,因為在實際應用中,我們常常定義一個預設的包,這個包中定義了一大堆的攔截器等等,然後其他的包繼承自這個包。這個常量可以配也可以不配;
  • struts.convention.package.locators:這個常量表示你的action類的java包的包名的尾碼是啥:比如action。這個常量也可以不配;
  • struts.convention.package.locators.basePackage:這個常量表示你的action類的java包package的名字是啥;這個常量也可以不配;

以上三個常量都是輔助作用的,為了讓註解真正的工作,必須在設定檔中增加<package>節點的配置,至少是<package name="myPackage" extends="struts-default" />,這樣註解就可以使用了。

我們知道通常情況下,Struts2是通過struts.xml配置的。但是隨著系統規模的加大我們需要配置的檔案會比較大,雖然我們可以根據不同的系統功能將不同模組的設定檔單獨書寫,然後通過<include>節點將不同的設定檔引入到最終的struts.xml檔案中,但是畢竟還是要維護和管理這些檔案,因此也會給維護工作帶來很大的困擾。為瞭解決這個問題,可以考慮使用struts2的註解。實際上struts2中最主要的概念就是package、action以及Interceptor等等概念,所以只要明白這些註解就可以了。

如果希望使用struts2的註解功能,必須使用一個包struts2-convention-plugin-2.1.8.1.jar,我使用的環境是struts2.1.8.1。如果你使用了不同的版本,找名字就行。

在以上所述的jar檔案中定義了一系列的註解,其中比較主要的是:

  • @ParentPackage,這個註解對應了xml檔案中的package節點,它只有一個屬性叫value,其實就是package的name屬性;
  • @Namespace,命名空間,也就是xml檔案中<package>的namespace屬性;
  • @Action,這個註解對應<action>節點。這個註解可以應用於action類上,也可以應用於方法上。這個註解中有幾個屬性:
    • value(),表示action的URL,也就是<action>節點中的name屬性;
    • results(),表示action的多個result;這個屬性是一個數組屬性,因此可以定義多個Result;
    • interceptorRefs(),表示action的多個攔截器。這個屬性也是一個數組屬性,因此可以定義多個攔截器;
    • params(),這是一個String類型的數組,它按照name/value的形式組織,是傳給action的參數;
    • exceptionMappings(),這是異常屬性,它是一個ExceptionMapping的數組屬性,表示action的異常,在使用時必須引用相應的攔截器;
  • @Result,這個註解對應了<result>節點。這個註解只能應用於action類上。這個註解中也有幾個屬性:
    • name(),表示action方法的傳回值,也就是<result>節點的name屬性,預設情況下是【success】;
    • location(),表示view層檔案的位置,可以是相對路徑,也可以是絕對路徑;
    • type(),是action的類型,比如redirect;
    • params(),是一個String數組。也是以name/value形式傳送給result的參數;

實際上,struts2中的主要註解就是這些,當然了,還有上面提到的@interceptorRef和@exceptionMapping;基本上,掌握了這些註解就可以了。

但是如果想讓這些註解真正工作,必須在設定檔增加幾個常量的定義:

  • struts.convention.default.parent.package:這個常量表示預設的包名是什麼,因為在實際應用中,我們常常定義一個預設的包,這個包中定義了一大堆的攔截器等等,然後其他的包繼承自這個包。這個常量可以配也可以不配;
  • struts.convention.package.locators:這個常量表示你的action類的java包的包名的尾碼是啥:比如action。這個常量也可以不配;
  • struts.convention.package.locators.basePackage:這個常量表示你的action類的java包package的名字是啥;這個常量也可以不配;

以上三個常量都是輔助作用的,為了讓註解真正的工作,必須在設定檔中增加<package>節點的配置,至少是<package name="myPackage" extends="struts-default" />,這樣註解就可以使用了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.