Struts2配置
Struts2的Action的开发的几种方式
1.继承ActionSupport
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
public String login(){
System.out.println("UserAction.login()");
return "success";
}
}
如果用Struts的数据校验功能,必须继承此类!
2.实现Action接口
接口内容如下:
public interface Action{
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public String execute() throws Exception;
}
可以直接使用内部定义的常量来代替硬编码。
3.不继承任何类,不实现任何接口
不继承不实现对拦截器执行没有任何影响。
通配符
<!-- 占位符写法:用{1}{2}传入到*的位置 -->
<action name="user_*"
class="com.dmm.a_config.UserAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
<!-- 通配符的其他用法 -->
<action name="user_*" class="com.dmm.a_config.UserAction" method="{1}">
<result name="{1}">/{1}.jsp</result>
<result name="register">/register.jsp</result>
</action>
Struts中的路径访问原则
访问路径=名称空间+action名称。
假定传入的值为login
,项目路径为Http://localhost:8080/struts02
:
<package name="config" namespace="/user" extends="struts-default" abstract="false">
<action name="user_*" class="com.dmm.a_config.UserAction" method="{1}">
<result name="{1}">/{1}.jsp</result>
</action>
</package>
上述配置的访问路径为:
Http://localhost:8080/struts02/user/user_login
在user
和user_login
中加入任何路径亦可。如:
Http://localhost:8080/struts02/user/a/b/user_login
而在其余部分加入字符则不会被匹配:
Http://localhost:8080/struts02/a/user/user_login
报错
系统首先寻找有没有/user/a/b
的命名空间,没有找到,继续向下;
寻找·/user/a
的命名空间,没有找到,继续向下;
寻找/user
的命名空间,找到;若仍未找到,继续向下;
寻找/
默认命名空间,若仍未找到,报错。
在上述过程中,找到一项路径就返回,不再向下。
Struts常量
Struts1中默认访问后缀.do
Struts2中默认访问后缀.action
如何修改默认访问后缀?
若项目约定修改访问后缀:
1.Struts2的.action
访问后缀在何处定义?
在Struts-core-2.3.4.1/org/apache/struts2/default.properties
中。
struts.action.extension=action,,
2.如何全局修改默认后缀?
在Struts.xml中修改
<!-- 全局配置 -->
<!-- 修改Struts默认的访问后缀 -->
<constant name="struts.action.extension" value="action,do,"></constant>
此处修改为action或do或空。注意,如果删去最后的逗号则必须加后缀才能访问。
其他常量的修改
<!-- 默认编码集 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!--设置浏览器是否缓存静态内容,默认值为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"/>
<!-- 上传文件的大小限制-->
<constant name="struts.multipart.maxSize" value=“10701096"/>
全局跳转视图配置,配置的各项默认值
全局视图配置:
<!-- 配置全局跳转视图 -->
<global-results>
<result name="success">/index.jsp</result>
</global-results>
Struts会先从action中寻找跳转,之后才会从全局配置中寻找。
注意:该配置应在所有action前。
配置各项默认值
<!-- 配置各项默认值 -->
<!--
name 只配置了访问路径名称
class 在struts-default包中配置了默认执行的类 ActionSupport
method 默认为execute
默认方法execute返回值为success,对应的页面去全局视图找
-->
<action name="test"></action>
上述配置为最简单的action配置,如果全局视图没有配置对应的返回页则输出404。
<!-- 什么情况不配置class?即处理的action -->
<!-- 当只是需要跳转到WEB-INF下资源的时候 -->
<action name="test2">
<result name="success">/WEB-INF/index.jsp</result>
</action>