struts2配置詳解

在配置struts攔截器時,如果除了核心攔截器外還有其他攔截器,其他攔截器需要放在覈心攔截器之前。

 

Struts2action開發的幾種方式

1).繼承ActionSupport

package cn.test.user;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

   private static final long serialVersionUID = 1L;

   //Action中業務邏輯處理方法

   public String login(){
             
return "success";

   }
 
}

 

2).實現Action接口,重寫execute()方法

public interface Action {

    public static final String SUCCESS = "success";

    public static final String NONE = "none";

    public static final String ERROR = "error";

    public static final String INPUT = "input";

    public static final String LOGIN = "login";

    public String execute() throws Exception;

 }

 

package cn.test.user;

 

import com.opensymphony.xwork2.Action;

 

public class UserAction implements Action{

   //Action中業務邏輯處理方法

   @Override

   public String execute() throws Exception {

      // TODO Auto-generated method stub

      return "success";

   }

 }

 

3).不實現任何接口,也不繼承類。

Struts的功能是通過攔截器來實現的,不實現接口或者類,也不會影響到其數據自動封裝的功能

package cn.test.user;

import com.opensymphony.xwork2.Action;

public class UserAction implements Action{

   //Action中業務邏輯處理方法

   private String name;

   private String password;

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;
 
}

   public String getPassword() {

      return password;
 
}

   public void setPassword(String password) {

      this.password = password;

   }

   @Override

   public String execute() throws Exception {

      // TODO Auto-generatedmethod stub

      System.out.println(name);

      return "success";

   }

}

 

Struts2的通配符

在同一個Action中有多個業務方法返回同一個值或者頁面的配置方法

可以使用通配符來配置

<action name="user_*"class="cn.test.user.UserAction" method="{1}">

        <result name="success">login.jsp</result>

</action>

*代表uer_之後輸入的字符串,被填充到{1}中進行查找,找不到則報錯

<action name="user_*"class="cn.test.user.UserAction" method="{1}">

        <result name="{1}">{1}.jsp</result>

</action>

通配符可以在struts配置信息中用來優化配置,可以在action中任何一個地方使用。

 

Struts中路徑匹配原則:

         訪問路徑 = 協議+主機名+端口號+應用程序名 + 名稱空間 + 對外訪問路徑

如果沒有名稱空間,默認爲/

Struts2訪問路徑解析

Struts2項目訪問路徑http://localhost:8080/struts02/user/a/b/user_login在服務器上的解析過程

服務器

                  查看協議:http

                  解析主機:localhost

                  解析端口號:8080

                  解析訪問的項目資源名稱:struts02

                  解析出要訪問的資源名稱:user_login

                  查看名稱空間:user/a/b是否存在,如果不存在這個名稱空間,則繼續向下找

                                        如果存在,則在該名稱空間中查找名字爲user_loginaction

                  查看名稱空間:user/a  是否存在,如果不存在這個名稱空間,則繼續向下找

                                    如果存在,則在該名稱空間中查找名字爲user_loginaction

                  查看名稱空間:user      是否存在,如果不存在這個名稱空間,則繼續向下找

                                    如果存在,則在該名稱空間中查找名字爲user_loginaction

                 查看名稱空間:/            如果還沒有找到,就報錯。
                                    如果存在,則在該名稱空間中查找名字爲
user_loginaction

 如果找到其中一個對應的名稱空間,則返回,並獲取類來響應用戶的請求。

Struts中的常量

Struts的默認訪問後綴名:

         Struts1中默認訪問後綴名是:*.do;

         Struts2中默認訪問後綴名是:*.action;

編碼之前,必須知道編碼規則。

修該struts的訪問後綴

1.      struts2.action後綴定義在哪裏?

Struts-core-2.3.4.1.jar/org.apache.struts/default.properties

2.      修改struts2的訪問後綴

<constant     name="struts.action.extension"value="action,,"></constant>

多個訪問後綴名稱之間用英文逗號隔開

         一般來說,任何一個框架的常用配置文件,都會放在其包文件的根目錄下或者第一個包目錄中。對於所有應用都是用的配置,一般會放在全局變量中。

 其他常量:

    指定默認編碼集,作用於HttpServletRequestsetCharacterEncoding方法 freemarker velocity的輸出

   <constant name="struts.i18n.encoding"value="UTF-8"/>

    自定義後綴修改常量

   <constant name="struts.action.extension"value="do"/>

    設置瀏覽器是否緩存靜態內容,默認值爲true(生產環境下使用),開發階段最好關閉

   <constant name="struts.serve.static.browserCache"value="false"/>

    struts的配置文件修改後,系統是否自動重新加載該文件,默認值爲false(生產環境下使用),開發階段最好打開

   <constant name="struts.configuration.xml.reload"value="true"/>

    開發模式下使用,這樣可以打印出更詳細的錯誤信息

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

    默認的視圖主題

   <constant name="struts.ui.theme" value="simple"/>

    spring集成時,指定由spring負責action對象的創建

   <constant name="struts.objectFactory"value="spring" />

    該屬性設置Struts 2是否支持動態方法調用,該屬性的默認值是true。如果需要關閉動態方法調用,則可設置該屬性

    false

   <constant name="struts.enable.DynamicMethodInvocation"value="false"/>

    上傳文件的大小限制

   <constant name="struts.multipart.maxSize"value=“10701096"/>

Struts2動態方法的調用

<!—-開啓動態方法的調用-->

<constant name="struts.enable.DynamicMethodInvocation"value="true"></constant>

<!—-在總配置文件中引入其他struts文件-->

<include file="/cn/test/user/config/actionstruts.xml">

</include>

struts訪問路徑中,如果出現兩個相同的訪問路徑,後面的訪問路徑會覆蓋前面的訪問路徑。

<!-- 動態方法調用

           訪問方式:

           http//localhost:8080/struts02/user!login

           協議://主機名:端口號/項目名/actionName!需要訪問的方法

        -->

      <action name="user"class="cn.test.user.config.UserAction" >

        <result name="success">login.jsp</result>

      </action>

不建議使用動態方法調用

 全局配置的常量,應該單獨放在一個struts文件中去配置和維護,在總配置文件中引入這個文件即可。

 全局視圖

對於多個action返回同一個結果,也可以同過全局視圖的方式配置來跳轉結果。

<global-results>

             <result name="success">/success.jsp</result>

 </global-results>

在返回同一個結果的action中,不必再配置這個跳轉結果。如果在某一個action中配置了跳轉結果,則會覆蓋全局視圖配置的跳轉結果。在查找跳轉結果是,會先查找action中配置的跳轉結果,如果當前action沒有配置,則會到全局視圖中去查找對應的頁面,如果全局視圖中也沒有找到跳轉結果配置,則會報錯。

 全局視圖的配置,必須在action配置之前。

 配置各項默認值

1.      strutsaction中默認執行的業務邏輯方法是execute()方法

<action    name="login"

class="cn.test.action.HelloAction" >

</action>  method的默認值是execute

    2action中沒有配置class時,默認值爲com.opensymphony.xwork2.ActionSupport

<action    name="login">

</action>

       執行的是actionstruts-default中的配置

    <default-class-ref calss=”com.opensymphony.xwork2.ActionSupport”/>

    默認執行的方法是execute()方法,返回值爲success,對應的頁面在全局視圖配置中去找。

 

重定向跳轉不到項目的web-inf目錄下的資源。但是轉發可以跳轉到web-inf目錄下的資源。

Web-inf中放置的是資源文件,一般不允許客戶直接訪問。

action中可以通過type來配置轉發或者重定向。

什麼情況下不配置actionclass

答案:當只是需要跳轉到web-inf下的資源時,可以不配置classtype的默認值爲forward


發佈了70 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章