struts2核心配置之Action
一、实现Action类
1、POJO实现(Plain Ordinary Java Object 简单的java对象)
public class User1 { public String execute(){ System.out.println("Action1"); return "success"; } }
Action类不继承任何特殊类,不实现任何特殊接口,只要有一个公共的无参的构造函数(默认构造函数即可)和一个execute()方法
execute()方法要求:public类型,返回值String,方法无参
2、实现Action接口
public class User2 implements Action { public String execute() throws Exception { System.out.println("Action2"); return "success"; } }
Action接口具体代码
public interface Action { //接口中常量字符串 public static final String SUCCESS="success"; public static final String NONE="none"; public static final String ERROR="error"; public static final String INPUT="input"; public static final String LOGIN="login"; public String execute() throws Exception; }
常量使用:execute()中return ”success“等同于return SUCCESS
3、继承ActionSupport类
public class User3 extends ActionSupport {
private static final long serialVersionUID=1L; @Override public String execute() throws Exception { System.out.println("Action3"); return SUCCESS; } }
因为ActionSupport类实现了Serializable接口,所以继承的Action类需要声明变量 serialVersionUID
二、配置Action
Action元素属性
属性 | 说明 | 是否必须 |
name | 标识Action,指定Action所处理请求的URL | 是 |
class | 指定Action对应的实现类 | 否 |
method | 指定请求Action时的调用方法 | 否 |
如果没有指定class属性值,其默认值为com.opensymphony.xwork2.ActionSupport类,该类使用默认处理方法execute(),ActionSupport类中的execute()方法不会做任何处理,二十直接返回success值。
如果没有指定method属性,Action调用class的execute()方法。
三、使用通配符
<package name="test" namespace="/test" extends="struts-default"> <action name="ActionTest_*" class="com.test.pojo.TestAction2" method="{1}"> <result name="hello">/{1}.jsp</result> <result name="hi">/{1}.jsp</result> </action> </package>
在上述代码中,当客户端发送/test/ActionTest_hello.action这样的请求时,<action>元素的name属性就被设置成ActionTest_hello,method就被设置成hello;,当客户端发送/test/ActionTest_hi.action这样的请求时,<action>元素的name属性就被设置成ActionTest_hi,method就被设置成hi。
结果:
其中method的属性值中的数字1匹配表示匹配第一个*。如果定义的Action名称为*_*,class属性为action.{1},method属性值为{2}。如果Action名称设置为*,则可以匹配所有Action。