Struts2 使用 Convention Plugin 實現零配置

Struts2中使用Convention Plugin(CP)實現零配置。html

零配置並非沒有配置,而是經過約定來實現配置最小化,也就是人們常說的約定大於配置。java

使用CP能夠實現零配置。jsp

1CP中,struts.convention.result.path配置能夠指定結果頁面文件存放的目錄,默認的目錄是/WEB-INF/content/,經過在struts.xml中配置:spa

<constant name="struts.convention.result.path" value="/WEB-INF/mytemplates/"/>

 將頁面文件目錄指定成/WEB-INF/mytemplates/目錄 (struts.xmlstruts的主配置文件,它將覆蓋其它依賴的配置文件中相同的配置項).net

固然,也能夠指定絕對路徑(/WEB-INF/目錄開始的路徑),所以能夠不須要此配置。建議使用絕對路徑以更清晰的指定輸出的頁面文件路徑。設計

2CP會自動掃描包名中存在strutsstruts2actionactions(1),類名以Action結尾的(2),並實現了com.opensymphony.xwork2.Action(3)的全部action(這裏把(1)(2)(3)稱爲action的三要素)。這是CP掃描類的規則,這個規則也能夠經過配置更改,但不建議更改,通常來講使用默認的足夠了,應該儘可能使程序簡單化。code

3,如何訪問那些Actionsxml

在之前那種配置文件中,訪問action須要namespaceaction的資源名稱兩項htm

就以類com.example.actions.admin.IndexAction爲例繼承

首先它符合action三要素:包名存在actions關鍵字,類名以Action結尾,而且實現了com.opensymphony.xwork2.Action(假設),因此這個類可以被CP掃描到。

這個類的的namespace是什麼?在CP中,namespace是在包名中以actions(或其它3個)開始以後的部分,如本例中的便是/admin

如何定位這個action的資源名稱?按CP規則,類去掉Action,而後將大寫字母轉成小寫,即獲得它的資源名稱,如例中的資源名稱是index若是類名存在多個大寫字母,如MyIndexAction,則全部轉換成小寫後以’-’分割,即my-index

至此,能夠定位這個action的資源位置爲:/admin/index.action(以action結尾是struts2的默認規則)

4,Action能夠返回html頁面,jsp頁面,或者FreeMarkerVelocity這樣的模板頁面。如何定義返回內容?經過註解!

5,CP中一樣也支持了大量的註解(Annotations),如@Action ,@Actions ,@Results,@Result ,@Namespace ,@ResultPath等,

建議不須要學那麼多,@Results@Result 就足夠了,由於使用太多註解爲使程序複雜化,增長之後維護成本。簡單性是程序設計追求的第一原則。

在類級別定義返回結果內容,例如

@Results({
  @Result(name="success", location="success.jsp"),
  @Result(name="error", location="error.ftl", type="freemarker")
})
public class TestAction extends ActionSupport {
  
  public String execute() {
    return SUCCESS;
  }

  public String error() {
    return ERROR;
  }
}

TestAction定義了兩個結果類型,一個是返回successindex.jsp,另外一個是返回errorerror.ftl模板頁。

在方法級別也能夠定義返回結果,但不建議(使程序複雜化了)

 

6,最後,當咱們使用CP時,若是要加入本身的攔截器或者進行異常處理,則須要定義一個本身package,並繼承convention-default package(這個package是導入CP後成爲主package,它繼承了struts-default),同時還要將struts.convention.default.parent.package配置將本身的package定義成主package

 

建議你們儘可能使用CP的默認的配置,以最大程度實現零配置!

純我的經驗之談,歡迎交流~

相關文章
相關標籤/搜索