struts2中struts.xml配置文件詳解

struts基本配置

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "[http://struts.apache.org/dtds/struts-2.3.dtd](http://struts.apache.org/dtds/struts-2.3.dtd)">

<struts>

    <!-- **所有匹配*.action的請求都由struts2處理** -->

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

    <!-- **是否啓用開發模式** -->

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

    <!-- **struts配置文件改動後,是否重新加載** -->

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

    <!-- **設置瀏覽器是否緩存靜態內容** -->

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

    <!-- **請求參數的編碼方式** -->

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

    <!-- **每次HTTP請求系統都重新加載資源文件,有助於開發** -->

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

    <!-- **文件上傳最大值** -->

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

    <!-- **讓struts2支持動態方法調用** -->

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

    <!-- **Action名稱中是否還是用斜線** -->

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

    <!-- **允許標籤中使用表達式語法** -->

    <constant name="struts.tag.altSyntax" value="true" />

    <!-- **對於WebLogic,Orion,OC4J此屬性應該設置成true** -->

    <constant name="struts.dispatcher.parametersWorkaround" value="false" />

    <package name="basePackage" extends="struts-default">

    </package>

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "[http://struts.apache.org/dtds/struts-2.0.dtd](http://struts.apache.org/dtds/struts-2.0.dtd)" >

<struts>

    <!-- **include節點是struts2中組件化的方式 可以將每個功能模塊獨立到一個xml配置文件中 然後用include節點引用** -->

    <include file="struts-default.xml"></include>

    <!-- **package提供了將多個Action組織爲一個模塊的方式**

        package的名字必須是唯一的 package可以擴展 當一個package擴展自

        另一個package時該package會在本身配置的基礎上加入擴展的package

        的配置 父package必須在子package前配置

        name:package名稱

        extends:繼承的父package名稱

        abstract:設置package的屬性爲抽象的 抽象的package不能定義action 值true:false

        namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間爲/test那麼訪問是的地址爲[http://localhost:8080/struts2/test/XX.action](http://localhost:8080/struts2/test/XX.action)

     -->

    <**package** name="com.kay.struts2" extends="struts-default" namespace="/test">

        <interceptors>

            <!**-- 定義攔截器**

                name:攔截器名稱

                class:攔截器類路徑

             -->

            <**interceptor** name="timer" class="com.kay.timer"></interceptor>

            <interceptor name="logger" class="com.kay.logger"></interceptor>

            <!-- **定義攔截器棧** -->

            <**interceptor-stack** name="mystack">

                <interceptor-ref name="timer"></interceptor-ref>

                <interceptor-ref name="logger"></interceptor-ref>

            </interceptor-stack>

        </interceptors>

        <!-- **定義默認的攔截器 每個Action都會自動引用**

         如果Action中引用了其它的攔截器 默認的攔截器將無效 -->

        **<default-interceptor-ref name="mystack"></default-interceptor-ref>**

        <!-- **全局results配置** -->

        <**global-results**>

            <result name="input">/error.jsp</result>

        </global-results>

        <!-- Action配置 一個Action可以被多次映射(只要action配置中的name不同)

             name:action名稱

             class: 對應的類的路徑

             method: 調用Action中的方法名

        -->

        <**action** name="hello" class="com.kay.struts2.Action.LoginAction">

            <!-- **引用攔截器**

                name:攔截器名稱或攔截器棧名稱

             -->

            <**interceptor-ref** name="timer"></interceptor-ref>

            <!-- **節點配置**

                name : result名稱 和Action中返回的值相同

                type : result類型 不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher

             -->

         <**result** name="success" type="dispatcher">/talk.jsp</result>

         <!-- **參數設置**

             name:對應Action中的get/set方法

         -->

         <**param** name="url">[http://www.sina.com](http://www.sina.com/)</param>

        </action>

    </package>

</struts>

實例
struts.xml配置

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

<!DOCTYPE struts PUBLIC

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

    "[http://struts.apache.org/dtds/struts-2.0.dtd](http://struts.apache.org/dtds/struts-2.0.dtd)">

<struts>

   <!-- 該屬性指定視圖標籤默認的視圖主題,該屬性的默認值是xhtml,將值設置爲simple,即不使用UI模板。這將不會生成額外的html標籤 -->

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

     <!--該**屬性指定視圖主題所需要模板文件的位置,該屬性的默認值是template,即默認加載template路徑下的模板文件**  -->

     <constant name="struts.ui.templateDir" value="template" />

    <!-- **該屬性指定模板文件的後綴,該屬性的默認屬性值是ftl。該屬性還允許使用ftl、vm或jsp,分別對應FreeMarker、Velocity和JSP模板**-->

     <constant name="struts.ui.templateSuffix" value="ftl" />

     <!-- 設置用戶自定義的資源文件路徑列表(用,隔開) -->

     <constant name="struts.custom.i18n.resources" value="messageResource_zh_CN" />

     <!-- 設置用戶自定義的資源文件路徑列表(用,隔開) -->

     <constant name="struts.custom.i18n.resources" value="struts_format"/>

     <!-- 主要用於設置請求編碼(默認值(UTF-8)) ,Head和Include標籤的解析編碼。資源和配置文件的解析編碼 -->

     <constant name="struts.i18n.encoding" value="gbk" />

     <!-- 設置struts2的對象工廠,默認(struts),類名 -->

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

            <!-- struts配置文件改動後,是否重新加載 -->

     <constant name="struts.configuration-struts-config.xml.reload" value="false" />

         <!-- struts是否支持動態方法調用 -->

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

     <!-- 在開發模式下,struts2的動態重新加載配置和資源文件的功能會默認生效。同時開發模式下也會提供更完善的日誌支持 -->

     <!-- <constant name="struts.devMode" value="falue" /> -->

          <!-- 文件上傳最大值 -->

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

            **<!--** **(默認false)設置是否總是以自動裝配策略創建對象 -->**

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

     <!-- 指定配置文件 -->

     <include file="struts/interceptor.xml" />

     <include file="struts/interceptor-struts-config.xml" />

     <include file="struts/admin-struts-config.xml" />

</struts>

admin-struts-config.xml

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

<!DOCTYPE struts PUBLIC

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

        "[http://struts.apache.org/dtds/struts-2.3.dtd](http://struts.apache.org/dtds/struts-2.3.dtd)">

<struts>

                <!-- package提供了將多個Action組織爲一個模塊的方式

                        package的名字必須是唯一的 package可以擴展 當一個package擴展自

                        另一個package時該package會在本身配置的基礎上加入擴展的package

                        的配置 父package必須在子package前配置

                        name:package名稱

                        extends:繼承的父package名稱

                        abstract:設置package的屬性爲抽象的 抽象的package不能定義action 值true:false

                        namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間爲/test那麼訪問是的地址爲                            [http://localhost:8080/struts2/test/XX.action](http://localhost:8080/struts2/test/XX.action)

                     -->

    <package name="redjason_manager_admin" extends="web_action_default" namespace="/admin">

                         <!-- 定義默認的攔截器 每個Action都會自動引用,如果Action中引用了其它的攔截器 默認的攔截器將無效 -->

       <default-interceptor-ref name="webDefaultStack"></default-interceptor-ref>

        <!-- 圖表改爲全局定義 -->

            <!-- 全局results配置 -->

        <global-results>

            <!-- 以下爲圖表配置 -->

            <result name="one-line-chart">/admin/commCharts/commLineCharts.jsp</result>

            <result name="more-line-chart">/admin/commCharts/commMSLineCharts.jsp</result>

            <result name="more-bar-chart">/admin/commCharts/commColumn3D.jsp</result>

            <result name="more-bar-2dChart">/admin/commCharts/commColumn2D.jsp</result>

            <result name="more-bar-chart2">/admin/commCharts/commStacked3dCharts.jsp</result>

            <result name="bar-chart">/admin/commCharts/commBarCharts.jsp</result>

            <result name="excel" type="stream">  

                <param name="contentType">application/vnd.ms-excel</param>  

                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>  

                <param name="bufferSize">1024</param>

                <param name="inputName">excelFile</param>

               </result>  

        </global-results>

                <!-- Action配置 一個Action可以被多次映射(只要action配置中的name不同)

                    name屬性可支持通配符,然後可以在class、method屬性中使用表達式。通配符用星號 * 表示

                         name:action名稱

                         class: 對應的類的路徑

                         method: 調用Action中的方法名

                    -->

        <!--  用戶管理 -->

        <action name="admin_*" class="com.jason.manager.admin.action.AdminAction" method="{1}">

                <!-- result 節點配置

                    name : result名稱 和Action中返回的值相同

                    type : result類型 不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher 

                 -->

            <result name="user-list">/admin/z-user/user-list.jsp</result>

            <result name="update-view">/admin/z-user/update-user.jsp</result>

            <result name="update-passwd">/admin/z-user/update-pwd.jsp</result>

            <result name="success">/admin/z-user/success.jsp</result>

            <result name="fail">/admin/z-user/fail.jsp</result>

            <result name="addPage">/admin/z-user/add-user.jsp</result>

        </action>

        <action name="gameVersionApkUpload_*" class="com.jason.manager.action.game.GameVersionApkUploadAction" method="{1}"> 

            <!-- 引用攔截器   name:攔截器名稱或攔截器棧名稱-->           

            <interceptor-ref name="fileUpload">

                <!-- 文件過濾 -->

                    <!-- 參數設置 name:對應Action中的get/set方法 -->

                <param name="allowedTypes">application/x-zip-compressed,application/octet-stream</param>

                <!-- 文件大小, 以字節爲單位 -->

                <param name="maximumSize">120000000</param>

            </interceptor-ref>

            <!-- 默認攔截器必須放在fileUpload之後,否則無效 -->

            <interceptor-ref name="defaultStack" />

        </action>

    </package>

</struts> 

struts2配置文件中的method={1}詳解

<action name="admin_*" class="com.jason.manager.admin.action.AdminAction" method="{1}">

            <result name="user-list">/admin/z-user/user-list.jsp</result>

            <result name="update-view">/admin/z-user/update-user.jsp</result>

            <result name="update-passwd">/admin/z-user/update-pwd.jsp</result>

            <result name="success">/admin/z-user/success.jsp</result>

            <result name="fail">/admin/z-user/fail.jsp</result>

            <result name="addPage">/admin/z-user/add-user.jsp</result>

 </action>

    此時method={1}中的{1}代表admin_*中的*,即假如訪問路徑是/admin_addUserView.action,則此刻訪問的是該Action中的addUserView方法。*同理,如果通配符* == delete,則就訪問的是delete方法。

當name中含有多個通配符的時候,method={2} ,就代表第二個通配符,同理以此類推。

這種方式更靈活的簡化了struts.xml的配置文件。

function addUser(){
              window.location.href="<%=request.getContextPath()%>/admin/z-user/admin_addUserView.action";

         }

  admin_addUserView.action對應 name="admin_*",通配符*就是addUserView,method="{1}"裏面的{1}就是代表addUserView()方法,
這個addUserView()方法存在於com.jason.manager.admin.action.AdminAction中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章