常量配置(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 extension
struts.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