struts2的基本配置
可以在类路径下(src)下创建struts.properties配置常量,也可以在struts.xml文件中配置
访问struts2中的action的路径由两部分组成
包的命名空间+action的名称
如下action的访问路径是:http://localhost:端口/内容路径/test/helloWorldAction.action
<package name="test" namespace=“/test“ extends="struts-default">
<action name="helloWorldAction" class="com.yxkong.test.HelloWorldAction">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
</package>
action名称的搜索顺序
在struts-default.xml中的default-class-ref配置执行的默认class
配置默认执行的action 在package包里配置指定的,
<default-action-ref name="指定的action"></default-action-ref>
ActionSupport 实现了Action,等
配置默认的后缀
在default.properties
struts.action.extension=action,, 默认为action 或者空
在struts中修改action请求的后缀,默认请求时action或者是空,如果有多个后缀名中间使用,隔开,修改以后是覆盖了原来的后缀名
<constant name="struts.action.extension" value="do,go">
配置重新加载
struts.configuration.xml.reload=true
<constant name="struts.configuration.xml.reload" value="true"></constant>
* constant 配置常量
配置i18n
<constant name="struts.i18n.reload" value="true"></constant>
当资源文件.properties修改时,true自动加载,默认为false
配置开发模式
<constant name="struts.devMode" value="true"></constant>
* false:表示生产模式
在struts.xml中一般只配置全局的常量,如果其他的配置,可以配置到外置的xml中
<include file="cn/yxk/servlet/***.xml"></include>
配置命名空间
如果没有命名空间使用一个/配置
<!--
package标签:相当于java中的包,规范化管理,struts2包可以继承
* name:包的名称,主要作用用于继承,唯一的
* namespace:命名空间,相当于房间号,唯一的,也可以看成包的唯一标识
* extends:用于继承其他的包,
* 这里继承了struts-default.xml包.该包存放在struts2-core-2.*.jar/struts-default".xml文件
<package name="struts-default" abstract="true">
* 为什么要继承呢?[如果不继承struts-default,则struts2框架没有意义],在后面讲
-->
<package name="primer" namespace="/primer" extends="struts-default">
<!-- 如果请求的action找不到的情况下,则执行该配置指定的action -->
<default-action-ref name="helloWorldAction"></default-action-ref>
<!-- action:配置请求的路径和action之间的对应关系
* name:请求的action的名称,在同一个包中要唯一
* class:action所在类的完整路径
-->
<action name="helloWorldAction" class="com.yxkong.struts2demo.HelloWorldAction">
<!--
public String execute() throws Exception {
System.out.println("HelloWorldAction execute");
return "success";
}
result:返回的结果:
* name:对应的action中execute方法的值
* 文本内容:转向的路径.
-->
<result name="success">/struts2demo/success.jsp</result>
</action>
<!--
* 如果没有为action指定class,则执行默认的class[com.opensymphony.xwork2.ActionSupport]
public class ActionSupport implements Action
* 如果没有为action执行执行的方法,则默认执行execute方法
public String execute() throws Exception {
return SUCCESS;
}
* 如果没有为result的name属性执行值,则默认的值为"success"
-->
<action name="actionNoClass">
<result >/struts2demo/success.jsp</result>
</action>
</package>
配置返回页面
resultType
在struts-default.xml中
result-types 中
<result-type name="" class="" defalut="">
在struts中获取request中的方法
HttpServletRequest request=ServletActionContext.getRequest();
简洁写法:
<result name="success" type="dispatcher"></result>
<result name="success" type="dispatcher">
<param name="location"></param>
</result>
* type:表示程序运行时的结果类型
重定向到action,先执行指定的action,然后根据指定的action跳转到指定的页面
<result name="" type="">
<param name="actionName">指定action的名称</param>
<param name="namespace">指定action的命名空间这里可以使用$</param>
</result>
在包中指定整个的全局结果
<global-results>
<result name="返回值">/指定的页面</result>
</global-results>
如果配置了局部的result则会使用局部的,就近原则
通配符和动态方法调用
如何在struts2的action中增加新的方法
* 如果找到多个匹配,没有通配符的则会被选中
<action name="*_add" class="cn.yxk.pattern.{1}" method="add">
<result name="add">/pattern/{1}.jsp</result>
</action>
<action name="*_*" class="cn.yxk.pattern.{1}" method="{2}">
<result name="add">/pattern/{1}.jsp</result>
</action>
最常用的是指定是
<action name="Action_*" class="cn.yxk.pattern.Action" method="{1}">
<result name="add">/pattern/{1}.jsp</result>
</action>
配置是否允许动态方法调用
<constant name="struts.enable.DynamicMethodeInvocation" value="false"></constant>
默认为true
在struts中配置的action中就不需要指定method
访问的时候根据Action!方法名 调用指定的方法
使用!可以认为是这种方式<action name="Action!*" class="" method="{1}">
<constant name="struts.enable.SlashesInActionNames" value="true"></constant>
<action name="actionname/*" class="" method="{1}">