a.方式一:动作类就是一个POJO(Plain Old Java Object: 原始的老的java对象),是非常简单的JavaBean。示例代码如下:
package com.itheima.web.action;/**
* 创建动作类的第一种方式:
* 创建一个普通的java类。
* 它就是一个POJO,是非常简单的javabean。
* 原始的 老的 java 对象
* Plain Old Java Object
* POJO类是指没有实现任何接口以及除了Object类以外,没有继承任何父类。
* struts2通过获取struts.xml获取到完全的类名,然后底层通过反射,执行方法。
* 该创建动作类的方式的特点:一点也看不到有struts2的痕迹。
*
* @author cmj
*/
public class Demo1Action {
public String hello() {
System.out.println("动作类执行了");
return "success";
}
}
b.方式二:动作类实现com.opensymphony.xwork2.Action接口。示例代码如下:
package com.itheima.web.action;import com.opensymphony.xwork2.Action;
/**
* 创建动作类的第二种方式:
* 动作类实现com.opensymphony.xwork2.Action接口。
* 创建一个普通类,实现Action接口,实现接口中的方法。
*
* Action接口中的常量:
* 常量名 默认常量值 说明
* SUCCESS "success" 当动作执行成功后,前往指定的位置
* NONE "none" 不返回任何结果视图,和 return null; 效果是一样的
* ERROR "error" 当执行动作方法,出现异常后,前往指定的位置
* INPUT "input" 数据回显
* LOGIN "login" 一般用于返回登录页面
*
* @author cmj
*/
public class Demo2Action implements Action {
public String execute() throws Exception {
System.out.println("动作类执行了");
return null;
}
}
c.方式三:动作类继承com.opensymphony.xwork2.ActionSupport类。推荐使用方式三。示例代码如下:
package com.itheima.web.action;import com.opensymphony.xwork2.ActionSupport;
/**
* 创建动作类的第三种方式:
* 创建一个动作类,继承com.opensymphony.xwork2.ActionSupport类。推荐使用方式三。
* 意义:提供了一些基本的功能。比如验证和国际化消息提示等。
* 我们在开发中采取这种方式,来创建我们的动作类。
*
* @author cmj
*/
public class Demo3Action extends ActionSupport{
// 当我们在该类中什么都不写,一个动作方法都不提供时:
// 有一个默认的动作方法:public String execute() throws Exception { return SUCCESS; }
}
4、动作的调用:
a.使用通配符:
优先级:绝对匹配优先。使用通配符的按照在配置文件中的先后顺序进行匹配的。
b.使用动态方法调用:
示例代码如下:
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 先设置为开发者模式 -->
<constant name="struts.devMode" value="true" />
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="p1" extends="struts-default">
<!-- 动作方法调用的配置
<action name="addUser" class="com.itheima.web.action.UserAction" method="addUser">
<result name="success">/addUser.jsp</result>
</action>
<action name="updateUser" class="com.itheima.web.action.UserAction" method="updateUser">
<result name="success">/updateUser.jsp</result>
</action>
<action name="deleteUser" class="com.itheima.web.action.UserAction" method="deleteUser">
<result name="success">/deleteUser.jsp</result>
</action>
<action name="findUser" class="com.itheima.web.action.UserAction" method="findUser">
<result name="success">/findUser.jsp</result>
</action>
-->
<!-- 使用通配符,配置动作方法
*表示的是动作的名称,当有和动作名称相匹配的时候可以用{出现的位置}来代替
<action name="*_*" class="com.itheima.web.action.{2}Action" method="{1}{2}">
<result name="success">/{1}{2}.jsp</result>
</action>
-->
<!-- 动态方法调用的配置 -->
<action name="user" class="com.itheima.web.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>