一、web.xml
<!-- 配置过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
二、struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- package:将action封装,一个package可配置多个action
namespace:给action的访问路径前定义一个命名空间
name:包名,标识符,无具体作用,不可重复
extends:继承的package,默认继承struts-default
abstract:是否为抽象,true表示该包抽象,不能独立运行.专门被继承
-->
<package name="hello" namespace="/" extends="struts-default">
<!-- action:
name:action对应的访问路径
class:该action所属的类
method:对应的方法,默认为execute
-->
<action name="user_*" class="com.ccy_blog.action.UserAction" method="{1}" >
<!-- result:
name:该action方法的返回值,默认为success
type:指定调用哪一个result类来执行,默认使用转发
-->
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
三、创建action
1. pojo
public class UserAction {
public String add(){
System.out.println("add user");
return "success";
}
public String delete(){
System.out.println("add user");
return "success";
}
public String update(){
System.out.println("add user");
return "success";
}
public String find(){
System.out.println("add user");
return "success";
}
}
2. 实现Action接口
3. 继承ActionSupport类
四、各类常量
<!-- i18n:国际化,解决post提交乱码 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 访问action的后缀 -->
<constant name="struts.action.extension" value="action"/>
<!-- 开发者模式,更多的错误提示信息,struts配置文件热加载 -->
<constant name="struts.devMode" value="true"/>
<!-- 动态方法调用,默认关闭 - !方法-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
五、动态方法调用
1. action
public class UserAction {
public String add(){
System.out.println("add user");
return "success";
}
public String delete(){
System.out.println("add user");
return "success";
}
public String update(){
System.out.println("add user");
return "success";
}
public String find(){
System.out.println("add user");
return "success";
}
}
2. struts.xml
<action name="user_*" class="com.ccy_blog.action.UserAction" method="{1}" >
<!-- result:
name:该action方法的返回值,默认为success
type:指定调用哪一个result类来执行,默认使用转发
-->
<result name="success">/index.jsp</result>
</action>
六、转发与重定向
1. result的type属性
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
</result-types>
1. 转发
<action name="hello1" class="com.ccy_blog.action.HelloAction">
<result name="success" type="dispatcher">
/index.jsp
</result>
</action>
2. 重定向
<action name="hello2" class="com.ccy_blog.action.HelloAction" >
<result name="success" type="redirect">
/index.jsp
</result>
</action>
3. 转发到action
<action name="hello4" class="com.ccy_blog.action.HelloAction" >
<result name="success" type="chain">
<param name="actionName">hello2</param>
<param name="namespace">/</param>
</result>
</action>
4. 重定向到action
<action name="hello3" class="com.ccy_blog.action.HelloAction" >
<result name="success" type="redirectAction">
<param name="actionName">hello1</param>
<param name="namespace">/</param>
</result>
</action>
七、整合到spring
- 配置action由spring管理(struts.xml)
<!-- 配置action交由spring管理 -->
<constant name="struts.objectFactory" value="spring"/>
<!-- spring负责装配action对象的属性 -->
<constant name="struts.objectFactory.spring.autoWire" value="name"/>
1. 半整合
- action由struts创建,由spring装配
- 配置action
<package name="user" namespace="/" extends="struts-default">
<!-- action中仍然配置class属性,即action由struts2创建,但属性由spring装配 -->
<action name="user_*" class="com.ccy_blog.action.UserAction" method="{1}">
<result name="success">/hello.html</result>
</action>
</package>
- 配置spring
<!-- 配置action -->
<bean name="userAction" class="com.ccy_blog.action.UserAction"/>
<bean name="userService" class="com.ccy_blog.service.impl.UserServiceImpl"/>
- action类
public class UserAction extends ActionSupport{
//1. 需要与spring中配置的beanName一致
private UserService userService;
//2. 需提供set方法,spring将自动根据属性名完成注入
public void setUserService(UserService userService) {
this.userService = userService;
}
public String add(){
userService.add();
return "success";
}
}
全整合
- 配置action
<package name="user" namespace="/" extends="struts-default">
<!-- class属性填写beanName,交由spring创建 -->
<action name="user_*" class="userAction" method="{1}">
<result name="success">/hello.html</result>
</action>
</package>
- 配置spring
@Autowired
private UserService userService;