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}">