侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Struts2(3)之Action相关

zze
zze
2017-08-15 / 0 评论 / 0 点赞 / 544 阅读 / 5808 字

Action 类的几种类型

Struts2 的 Action 类有如下几种:

POJO

Action 类可以是一个 POJO(简单的 Java 类),例:

public class HelloAction1 {    public String execute() {
        System.out.println("hello Struts2");
        return "hello";
    }
}

实现 Action 接口

可以实现 com.opensymphony.xwork2.Action 接口标识一个类是 Action 类,并且在该接口中已经定义了一些常用逻辑视图名称常量。例:

import com.opensymphony.xwork2.Action;

/**
 * 实现接口 Action
 * 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 class HelloAction2 implements Action {
    @Override
    public String execute() throws Exception {
        System.out.println("hello Struts2");
        return SUCCESS;
    }
}

继承 ActionSupport 类(推荐)

还可以通过继承 com.opensymphony.xwork2.ActionSupport 类,例:

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction3 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("hello Struts2");
        return super.execute();
    }
}

Action 的访问

要让一个 Action 类能够通过 Http 请求访问到需要进行相关配置,Action 的访问配置也有三种方式,看如下示例。

如现有如下 Action 类:

// com.zze.action.TestAction
package com.zze.action;

import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport {
    public String save() {
        System.out.println("from save");
        return NONE;
    }

    public String delete(){
        System.out.println("from delete");
        return NONE;
    }

    public String select(){
        System.out.println("from select");
        return NONE;
    }

    public String update(){
        System.out.println("from update");
        return NONE;
    }
}

method 配置

<!-- 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 name="test" extends="struts-default" namespace="/">
        <!--localhost:8080/save-->
        <action name="save" class="com.zze.action.TestAction" method="save"></action>
        <!--localhost:8080/delete-->
        <action name="delete" class="com.zze.action.TestAction" method="delete"></action>
        <!--localhost:8080/select-->
        <action name="select" class="com.zze.action.TestAction" method="select"></action>
        <!--localhost:8080/update-->
        <action name="update" class="com.zze.action.TestAction" method="update"></action>
    </package>
</struts>

通配符配置

<!-- 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 name="test" extends="struts-default" namespace="/">
        <!--localhost:8080/save-->
        <!--localhost:8080/delete-->
        <!--localhost:8080/update-->
        <!--localhost:8080/select-->
        <!--method:{1} 代表 name 中第一个通配符的取值-->
        <action name="*" class="com.zze.action.TestAction" method="{1}"></action>

        <!--localhost:8080/Test_save-->
        <!--localhost:8080/Test_delete-->
        <!--localhost:8080/Test_update-->
        <!--localhost:8080/Test_select-->
        <!--通配符更抽象写法-->
        <!--<action name="*_*" class="com.zze.action.{1}Action" method="{2}"></action>-->
    </package>
</struts>

动态方法访问

<!-- 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>
    <!--
    设置常量,开启动态方法访问
    开启之后可通过 <host>:<port>/<actionName>!<methodName> 访问:
    host : ip
    port : 端口
    actionName : action 名称
    methodName : 要访问的方法名称
    -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <package name="test" extends="struts-default" namespace="/">
        <!--localhost:8080/test!save-->
        <!--localhost:8080/test!delete-->
        <!--localhost:8080/test!select-->
        <!--localhost:8080/test!delete-->
        <action name="test" class="com.zze.action.TestAction" method="{1}"></action>
    </package>
</struts>
0

评论区