struts配置文件中action元素屬性設置

在配置struts.xml的時候,對於<action>元素來說,name屬性是必須的,class屬性是可以省略的,class屬性的默認值是「com.opensymphony.xwork2.ActionSupport」。

以前配置的<action>元素都是有class屬性的,現在就來探究一下為什麼可以不寫class屬性,以及在什麼情況下可以不寫。

1:為何可以不配置<action>的class屬性呢?

在HelloWorld中, <package>元素的extends屬性配置的是「struts-default」,說明了這個包繼承了一個叫「struts-default」的包,這個包是真實存在的。可以到struts2-core-2.1.8.1.jar包的根目錄下,找到一個叫「struts-default.xml」文件,這是Struts2默認配置好的各個<package>元素的公用配置。

打開它,可以發現這個文件類似於我們熟悉的struts.xml。根元素也是<struts>,<struts>元素下面有一個子元素<package>,這個<package>的name屬性的值正是「struts-default」。前面名為helloworld的<package>正是繼承自這個struts-default包。在這裡,我們並不詳細展開講解struts-default包,只是看最後的配置<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />,這就說明了,<action>元素不寫class屬性的時候,默認配置就是使用ActionSupport類。

2:有什麼用呢

可能有朋友會想,這種做法有什麼用呢?

大多數情況下都是需要配置<action>的class屬性的值的,因為我們需要把自己寫的,用來處理請求的Action類配置上去,而不是使用默認的配置。確實是這樣,但是這種默認類配置的方式在某些情況還是有用的。

考慮這樣一種情況,在實際開發中,對安全性要求較高的web項目,往往把jsp放在WEB-INF文件夾中,這樣可以防止外界直接通過URL來訪問jsp頁面,這時的jsp就一定要是Servlet或Action的後繼頁面,才可以被訪問到了。

因此,如果我們有一個jsp頁面在WEB-INF下,但是在它之前不需要Action訪問邏輯層,就相當於需要直接訪問這個jsp頁面。就可以讓這個jsp作為ActionSupport的後繼頁面,使用default-class-ref,可以減少重複配置,示例配置如下:

[java] view plain copy

  1. <actionname="test4">
  2. <result>/WEB-INF/jsp/test4/1.jsp</result>
  3. </action>

ActionSupport類的execute方法返回字元串「success」,而<result>元素的name屬性如果不寫的話,默認就是「success」。

這時候,訪問http://localhost:9080/helloworld/helloworld/test4.action,就相當於是直接訪問WEB-INF下的/jsp/test4/1.jsp。

推薦閱讀:

盤感的文件夾【【周線看盤】】
wsyys的文件夾【效方 】
zhcx123的文件夾【夫妻之間】
老沔城人的文件夾【茶 文 化】

TAG:配置 | 文件 | 配置文件 | 設置 |