Struts2配置文件详解

来源:互联网 发布:唐韦星追王晨星知乎 编辑:程序博客网 时间:2024/06/06 17:33

常量配置(constant)
常量的名字可以在源码中找,如下
这里写图片描述
在struts.xml中配置
(1)

<!-- 乱码解决  默认是UTF-8,不同版本可能默认不一样 -->    <constant name="struts.i18n.encoding" value="UTF-8"/>

(2)

    <!--自定义扩展名  -->    <constant name="struts.action.extension" value="action,,siggy"/>

(3)

<!--开发者模式,默认false,友好的提示信息,如报错信息很友好,很容易看懂  -->    <constant name="struts.devMode" value="true"/>

(4)

<!--设置配置文件修改后自动加载  推荐在开发中使用,需要先开启开发者模式 ,如果这个属性已经为true,那么只需要开启开发者模式就行了 -->     <constant name=" struts.configuration.xml.reload" value="true"/>

常量配置方式2:
在src下添加struts.properties(#是注释)

#set extensionstruts.action.extension=action,,siggy

团队协作配置
在struts.xml通过include添加不同人员的配置文件,struts.xmk中只需要写公共的部分,如常量配置

<include file="cn/sxt/struts/user.xml"></include>

配置文件加载顺序
struts-default.xml→struts-plugin.xml→struts.xml


package配置

<!-- 包的名字自定义,可以配置多个,namespace命名空间,窄化处理extends直接或者间接继承struts-default--><package name="default" namespace="/" extends="struts-default">        <action name="login" class="cn.sxt.siggy.LoginAction">            <result name="success">/success.jsp</result>            <result name="failed">/login.jsp</result>        </action>     </package>

注意:extends必须直接或者间接继承struts-default,这个也是第一个加载的配置文件,因为这个配置文件里面包含了设值的过程,不然光凭我们写的这个就是一个普通的class,表单的数据提交后,LoginAction的属性值就不可能自动注入了,而且也包含了转发的过程,根据result name来跳转页面,还有一系列的拦截器,都是struts-default里面的内容。调试(在LoginAction里面输出属性的值)发现,如果把extends去掉就会报错,而且里面的值也不会注入,但是extends写了但是没有任何result,值也会被注入,所以这就是必须继承struts-default的原因和作用


action配置
一个package可以配置多个action

<!-- name是url请求名,不需要加后缀(.action)        class是处理url请求对应的java类,class必须是全限定名        并且该类拥有无参的构造方法        method配置处理请求类的方法,默认是execute,方法要满足公共的,无参,返回值是String,这就造成一个action可以处理多个请求     -->        <action name="login" class="cn.sxt.siggy.LoginAction" method="execute">            <result name="success">/success.jsp</result>            <result name="failed">/login.jsp</result>        </action> 

result配置

<!--result是结果集            name:匹配请求处理方法的返回值,默认是success            type:结果处理类型,默认是dispatcher转发            type的类型有很多,包含在struts-default中,下面举几个常见的                chain:值action链,执行actionA后直接执行actionB后执行actionC,后面写的是对应下一个action的值,地址栏显示的是执行的第一个action,用的较少                dispatcher:转发,和servlet一样,如果request里面有数据需要显示到视图中,那么使用dispatcher                redirect:重定向,如果重定向到一个jsp页面,可以直接重定向,但是如果是重定向到另一个action,那要注意是否配置了后缀名,如果要求有后缀名,一定要加上后缀名                redirectAction:重定向到另一个action,不用加后缀名,会将前一个action的后缀名自动加上                stream:以流的形式显示,文件下载              -->            <result name="success" type="dispatcher">/success.jsp</result>            <result name="failed">/login.jsp</result>

全局配置

<!--  配置全局结果集,在package里面,action之前-->    <global-results>        <result name="failed">/login.jsp</result>    </global-results>

默认配置
在action中,如果不去配置class属性,将会由默认的action类来执行,默认的action类是ActionSupport(struts-default.xml中最后),里面有execute方法返回success,也可以自定义,但是注意配置的位置

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

其实这么属性配置的位置和顺序都可以在dtd里面查看
这里写图片描述
这里写图片描述

默认action配置

<!--配置默认的Action 当所请求的action不存在时,那么执行默认的action--><default-class-ref name="default"/>

通配符

<!--使用通配符来配置action,可以减少action的配置-,*表示所有,占位符{1}表示第一个*号表示的内容-><action name="user*"  class="cn.sxt.LoginAction"  method="{1}">

但是这种情况无论是什么都会与*匹配成功,如果没有对应的方法就会报错,那么默认action配置就没用了,匹配后找不到不会去调用默认的action