一.struts2配置
注意1:
在web.xml文件中,struts的核心过滤器为:
<!-- 引入structs核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
如果想引入其他过滤器,要放在struts的核心过滤器的上面。
注意2:
servlet可以和structs一起使用,但是在:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
中,struts对你访问的所有资源都进行了处理,所以直接用servlet会有问题,所以可以对struts限定。
1. struts2的action开发的几种方式
方式1:继承ActionSupport
extends ActionSupport
如果用struts的数据效验功能,必须继承此类!
方式2:实现Action接口
public class UserAction3 implements Action {
// Action中业务处理方法
public String login() {
System.out.println("UserAction.login()");
return "success";
}
@Override
public String execute() throws Exception {
return null;
}
// Action中业务处理方法
public String login() {
System.out.println("UserAction.login()");
return "success";
}
@Override
public String execute() throws Exception {
return null;
}
}
方式3:不继承任何类,不实现任何接口
2.通配符
通配符:
在struts配置信息中,可以用*与{1}可以优化配置!
<action name="user_*" class="com.demo.struts_config.Useraction" method="{1}">
</action>
3.struts中路径匹配原则
4.struts常量
struts默认采用的编码是utf-8:
Struts中默认访问后缀:
Struts1中默认访问后缀是*.do
*Struts2中默认访问后缀是*.action*
如何修改默认访问后缀:
-
Struts2的.action访问后缀在哪里定义?
在文件Struts-core-2.3.jar/org.apache.struts/default.properties
中找到:
struts.action.extension=action,, -
在struts.xml中通过常量修改
指定访问后缀为action/do/没有访问后缀都可以
<constant name="struts.action.extension"
> value="action,do,"></constant>
value="action,do," 访问后缀:action/do/不带后缀
value="action,do" 访问后缀:action或do
value="action,do" 访问后缀:action或do
value="action" 只能是action
动态方法调用语法:
actionName+!即为动态调用,如:
动态方法调用: http://locahost:8080/struts02/user!login
<action name="user" class="cn.itcast.b_config2.UserAction">
<result name="success">/index.jsp</result>
</action>
<result name="success">/index.jsp</result>
</action>
5.struts2的全局配置、配置的各项默认值
1.
配置全局跳转视图
<!--配置全局跳转视图 --> <global-results> <result
> name="success">/index.jsp</result> </global-results>
> <action name="user_*" class="com.demo.struts_config.Useraction" method="{1}"> </action>
<action name="test" class="com.demo.struts_config.Testaction" method="execute">
<!--返回结果标记success对应的页面在当前页面中没有配置,所以会去找全局配置 -->
</action>
其中全局跳转视图一定要放在action的上面不然不满足dtd的语法。
2.配置各项默认值
如果action中方法是execute则method可以不用写。
<!-- 配置各项默认值 -->
<!--
name 只配置了访问路径名称
class 默认执行的action在struts-default有配置
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
method 默认为execute
默认的方法execute返回值为success,对应的页面去全局视图找。
-->
<action name="test"></action>
<!-- 什么情况不配置class? 即处理的aciton -->
<!-- 答案: 当只是需要跳转到WEB-INF下资源的时候。 -->
<action name="test2">
<result name="success" >/WEB-INF/index.jsp</result>
</action>
不能用重定向,重定向访问不到web-inf目录下。
(地址虽然正确,但是tomcat拦截了,不让外部访问web-inf目录。)