struts2入门之基本配置

2012/05/11 1933点热度 0人点赞 0条评论

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名称的搜索顺序

     如路径:/yxk/yxk1/yxk2/test.action的搜索顺序

        先在yxk2这个包中找,如果没有向后退到yxk1中,如果还没有则退到yxk这个包中查找,只要最后这个yxk这个包里有就不会报错

       如果没有给action配置class,这个会执行默认的class:com.opensymphony.xwork2.ActionSupport

       在struts-default.xml中的default-class-ref配置执行的默认class

       如果没有为action指定执行的方法,则默认执行execute方法

       如果没有为result的name属性指定值,则默认的值为success

     配置默认执行的action  在package包里配置指定的,

<default-action-ref name="指定的action"></default-action-ref>

    如果请求的action找不到的情况下,则执行上面配置指定的action

 在package下面配置

ActionSupport 实现了Action,等

配置默认的后缀

  在default.properties

     struts.action.extension=action,,  默认为action 或者空

   在properties中选中指定的值,双击完成,然后在源里打开默认会指定到选中的位置

 在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 配置常量

      * 当配置文件struts.xml修改以后,不用重启服务器会自动加载,访问的时候才回去加载,修改后只加载一次,

          默认为false

配置i18n

 <constant name="struts.i18n.reload" value="true"></constant>

   当资源文件.properties修改时,true自动加载,默认为false

配置开发模式

<constant name="struts.devMode" value="true"></constant>

     * false:表示生产模式

              指开发完毕给客户演示的时候就是生产模式

     * true:表示开发模式:可以打印更多的调试信息,用于调试

               为true的时候包含了重新加载和和i18n

 struts.configuration.xml.reload=true

 struts.i18n.reload=true

在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="">

        * name:结果类型起的唯一的名称,可以在其他的地方使用,对应的值就是name

        * class:类路径

        * defalut=true默认就是使用这个

在struts中获取request中的方法

HttpServletRequest request=ServletActionContext.getRequest();

 简洁写法:

<result name="success" type="dispatcher"></result>
<result name="success" type="dispatcher">
   <param name="location"></param>
</result>

     * type:表示程序运行时的结果类型

            * dispatcher:默认值,表示转发

            * redircet: 表示重定向jsp

            * redirectAction:重定向到action

            dispatcher:对应的是struts-default.properties中的param:

    * name=location:是struts定义的一个属性,对应标签中的文本值会在加载的时候指定给struts的这个属性,到时转向的时候用的就是这个文本的值

 重定向到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中增加新的方法

         *  增加的方法与execute方法的唯一区别是方法的名不同,其他的都相同

     通配符映射规则:

         * 如果找到多个匹配,没有通配符的则会被选中

         * 如果指定的动作不存在,则struts会把这个uri与任何一个包含着通配符*的动作名进行匹配{0}匹配这个uri

       不能匹配/字符,如果想把/字符包含在内,需要使用**,如果需要对某个字符进行转义,需要使用\

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

  访问路径http://localhost/.......Action!del

 在配置的时候可以直接写<action name="Action" class="" >

动态方法启用/方法名

<constant name="struts.enable.SlashesInActionNames" value="true"></constant>
<action name="actionname/*" class="" method="{1}">

 

yxkong

这个人很懒,什么都没留下

文章评论