struts的常用配置解析

 

Struts.xml主要负责管理应用中的Action映射,以及该Action包含的Result定义等;struts.xml主要包括Action,Interceptor,Packages和 Namespace等 

 

如果 struts.xml内配置的 内容 太多 ,可以 将 struts.xml分配成 多个 配置文件 ;然后 在 struts.xml配置文件 中使用 <include> 标签引用这些配置文件 ;

例如 :<include file="newstruts.xml">

 

action的 配置

在默认 情况下,Struts2会调用 action里 的 execute()方法;但是 有些时候,需要在 一个动作中处理不同的动作;可以在<action>标签中通过method方法指定要执行的动作类的方法名;

 

result配置

在默认的时候,result里面的type属性值dispatcher(转发forward),name属性的值是"success";

如果一个result被很多action使用,可以使用<global-results>

例如:<global-results>

    <result name="print">........</result>

  </global-results>

如果action没有相应的result,Struts2会采用全局的<result>

 

拦截器配置

 在执行Action的execute方法之前,Struts2会首先执行struts.xml中引用的拦截器,然后会执行Action的execute()方法;

在struts.xml里面定义全局的配置设置

      此处代码省略

在struts.xml里面配置Action如下:

    此处代码省略

 

包配置

 Package可以继承其他的Package,也可以被其他的Package继承,甚至可以定义为抽象的Package  

由于struts.xml是自上而下解析的,所以被继承的package要放在继承的package前面;

namespace将action分成逻辑上不同的模块,每个模块由自己独立的前缀;

 

Action的配置



一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦截器栈来拦截Action了。拦截器的拦截行为将会在Actionexceute方法执行之前被执行。

<action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">

            <result name="success">/success.jsp</result>

            <result name="error">/error.jsp</result>

<!-- 使用拦截器,一般配置在result之后, -->

<!-- 引用系统默认的拦截器 -->

<interceptor-ref name="defaultStack"/>

            <interceptor-ref name="拦截器名或拦截器栈名"/>

        </action>

 

为Action注入值 

 

<action.....>

<param name="savePath">/image</param>

</action>

 

public class HelloWorldAction{

  private String savePath;

 

  public String getSavePath() {

  return savePath;

  }

  public void setSavePath(String savePath) {

  this.savePath = savePath;

  }

 

使用 通配符定义action


<package name="itcast" namespace="/test" extends="struts-default">

  <action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">

  <result name="success">/WEB-INF/page/hello.jsp</result>

  </action>

</package>


public class HelloWorldAction{

  private String message;

  ....

  public String execute() throws Exception{

  this.message = "我的第一个struts2应用";

  return "success";

  }

 

  public String other() throws Exception{

  this.message = "第二个方法";

  return "success";

  }

}

要访问other()方法,可以通过这样的URL访问:/test/helloworld_other.action


全局结果 

 当多个action中 都 使用了 相同 的 result时候,我们 应该把 result定义为全局结果;

<package>

<global-results>

   <result name="message">/message.jsp</result>

</global-results>

</package>

 

常量 

通常,struts2按如下搜索顺序加载struts2常量:

struts-default.xml

struts-plugin.xml

struts.xml

struts.properties

web.xml

如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.

 

常用的常量 

<!-- 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出 -->

    <constant name="struts.i18n.encoding" value="UTF-8"/>

    <!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->

    <constant name="struts.action.extension" value="do"/>

    <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->

    <constant name="struts.serve.static.browserCache" value="false"/>

    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->

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

    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->

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

     <!-- 默认的视图主题 -->

    <constant name="struts.ui.theme" value="simple" />

    <!– 与spring集成时,指定由spring负责action对象的创建 -->

    <constant name="struts.objectFactory" value="spring" />

 <!–该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。 -->

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

posted @ 2011-12-05 15:39  Chen20121202  阅读(104)  评论(0)    收藏  举报