天天看點

struts2---src/struts.xml配置詳解

配置src/struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!--DOCTYPE struts表示根節點為struts

-//Apache Software Foundation//DTD Struts Configuration 2.0//EN一個uri

http://struts.apache.org/dtds/struts-2.0.dtd程式設計的時候通路,有自動補全的作用-->

<!DOCTYPE struts PUBLIC

          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

          "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<!-- 包的名稱自定義,可以配置多個包,但是名字必須唯一,起繼承作用,例如最原始的package的name值為struts-default,之後的包都要直接或者間接的繼承它;

namespace命名空間:定義通路package的名字空間,也表示真實存在于WebRoot目錄下的路徑,該名字空間影響到url的位址.

例如:在result标簽中,如果配置的是相對路徑,就是相對namespace的路徑,

其次,在通路http://localhost:8080/struts2demo/path1/path2/test.action

過程中,會先去找到namespace為/path1/path2的package

如果該package中不包含name為test的action,就到namespace為/path1的package

去尋找name為test的action,如果還沒有找到,最後到根目錄以及預設的namespace中尋找

如果沒有,就傳回404錯誤

可以了解為從裡到外尋找

extends  值是struts-default或者繼承了struts-default的packageName

 -->

    <package name="xxxx"   namespace="/user" extends="struts-default">

<!--

name是url請求名,不需要加字尾(.action)

name屬性+namespace唯一标志一個action,

class是處理url請求對應的java類,class要求包名+類名

并且該類是由公共的無參構造方法的。

預設為ActionSupport類

method配置處理請求類的處理的方法,預設為execute:

方法要滿足是公共的,傳回值類型是String,無參

method和name無關-->

     <action name="hello" class="cn.itcast.action.HelloAction" method="execute">

<!--

result-指結果集

name:比對請求處理方法的傳回值;預設是success

type:結果處理類型;預設是dispather轉發

-->    

<!--

其他type類型:

***chain:指action鍊,連結下一個action;執行actionA以後直接執行ActionB後直接執行ActionC,用得較少

        位址欄是執行的第一action

  ***dispatcher:轉發;和servlet一緻。如果request中有資料要到視圖顯示,那麼使用dispatcher

  ***redirect:重定向;如果是重定向到jsp頁面,可以直接重定向,如果是重定向到另一個action,需注意

      是否配置了action的字尾名。如果要求有字尾名,那麼重定向的action一定要加上字尾名

       redirect的路徑一定不能在WEB-INF路徑下,因為redirect是相當于使用者直接通路了路徑,而使用者不能通路WEB-INF目錄下的檔案,        隻有程式内部轉發的時候才能轉發到WEB-INF下的JSP。

  ***redirectAction:重定向導另一個action;不用加action的字尾名,會将前一個action的字尾名自動加上

  ***stream:以流的形式顯示---檔案下載下傳

>

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

     </action>

    </package> 

</struts>

 <!-- 使用通配符優化步驟 -->

         <!-- http://localhost:8080/struts02/user_login -->

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

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

        </action>

* 可以比對零個或多個字元, 但不包括 / 字元. 如果想把 / 字元包括在内, 需要使用 **. 如果需要對某個字元進行轉義, 需要使用 \.

<!-- 什麼情況不配置class? 即處理的aciton -->

        <!-- 答案: 當隻是需要跳轉到WEB-INF下資源的時候。 -->

         <action name="test2">

             <result name="success" type="redirect">/WEB-INF/index.jsp</result>

         </action>

總配置檔案可以引入其他配置檔案

<include file="檔案路徑"></include>

<!-- 一、全局配置 -->

    <!-- 0. 請求資料編碼 -->

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

 指定預設編碼集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的輸出

    <!-- 1. 修改Struts預設的通路字尾 ,這裡表示修改後預設*.action以及*.do以及什麼都不加,do後面的'',''是有意義的-->

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

預設情況下,如使用者請求路徑不帶字尾或者字尾以.action結尾,請求将被轉入Struts 2架構處理,否則Struts 2架構将略過該請求。

這個屬性在:struts2-core-2.1.8.1.jar\org\apache\struts2\ default.properties

    <!-- 2. 修改xml自動重新加載 -->

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

struts.xml修改後是否自動重新加載這個配置檔案(開發環境下最好開啟)

    <!-- 3. 開啟動态方法調用 (預設不開啟)-->

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

   actionName!action中的方法

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

    <!-- 4. 修改上傳檔案的最大大小為30M -->

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

    機關是位元組