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了。拦截器的拦截行为将会在Action的exceute方法执行之前被执行。
<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"/>