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中
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容