Struts 2 配置Action详解

Struts 2 配置Action详解

在 Struts 2 中,Action 是一个处理请求的对象,负责接收来自用户的请求,并进行处理。配置 Action 是 Struts 2 中比较重要的一项任务,配置不当会导致程序无法正常工作或者存在安全隐患。本篇文章将详细讲解 Struts 2 中如何配置 Action。

配置 Struts 2 Action

在 Struts 2 中,我们可以通过配置 XML 文件的方式来定义 Action。

<package name="default" namespace="/" extends="struts-default">
  <action name="hello" class="com.example.HelloAction">
      <result name="success">/hello.jsp</result>
  </action>
</package>

上面的配置代码将一个名为 "hello" 的 Action 映射到类 com.example.HelloAction 上,并将成功响应映射到 JSP 文件 /hello.jsp 上。

在上面的配置中,<package> 元素定义了一个包,name 属性指定包名,namespace 属性指定 URL 前缀,extends 属性指定继承的包名。<action> 元素定义了一个 Action,name 属性指定 Action 名称,class 属性指定处理该 Action 的 Java 类的名称。通过 <result> 元素指定不同状态的输出结果。

配置 Struts 2 Action 参数

在上面的 Action 配置文件中,我们可以通过 <param> 标签为 Action 设置参数。

<package name="default" namespace="/" extends="struts-default">
  <action name="hello" class="com.example.HelloAction">
      <param name="message">Hello, World!</param>
      <result name="success">/hello.jsp</result>
  </action>
</package>

上面的配置代码为 hello Action 设置了一个名为 message 的参数,并将其值设置为 Hello, World!

示例1:使用 Struts 2 提交表单

下面是一个示例代码演示了如何使用 Struts 2 提交表单。

<package name="user" namespace="/user" extends="struts-default">
  <action name="register" class="com.example.RegisterAction">
      <result name="success">/success.jsp</result>
      <result name="input">/register.jsp</result>
  </action>
</package>

在上面的代码中,我们定义了一个新的包 /user。在该包中,通过 <action> 元素定义了一个名为 register 的 Action,将其映射到名为 com.example.RegisterAction 的 Java 类上。

RegisterAction 类中,我们可以通过注解或属性的方式定义该 Action 的属性值。例如:

@Namespace("/user")
public class RegisterAction extends ActionSupport {
  private String username;
  private String password;

  public void setUsername(String username) {
    this.username = username;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  @Action(value = "register", results = {
      @Result(name = "success", type = "redirectAction", params = {"actionName", "welcome"}),
      @Result(name = "input", location = "/register.jsp")
  })
  public String execute() {
    // 保存用户数据
    return SUCCESS;
  }
}

在上面的代码中,我们使用 @Namespace 注解指定了该 Action 的命名空间。定义 usernamepassword 属性并提供其 setter 方法来接受表单提交的数据。

execute 方法中,我们使用 @Action 注解来定义 Action 的参数。在该注解的 results 属性中通过 <result> 元素来设置 Action 的不同状态的输出结果。在 success 状态下通过 redirectAction 来进行重定向到 URL 为 "/welcome" 的 Action,而在 input 状态下直接返回到 "/register.jsp" 页面。

在 JSP 页面中,我们可以通过 <s:form><s:textfield> 等 Struts 2 标签来实现表单的输入和提交。

<s:form action="register">
  <s:textfield name="username" label="Username" />
  <s:password name="password" label="Password" />
  <s:submit />
</s:form>

示例2:使用 Struts 2 处理 AJAX 请求

下面是一个示例代码演示了如何使用 Struts 2 处理 AJAX 请求。

<package name="user" namespace="/user" extends="struts-default">
  <action name="username_check" class="com.example.CheckUsernameAction">
      <result name="success" type="json">
        <param name="root">result</param>
      </result>
  </action>
</package>

如上面的代码所示,我们定义了一个名为 username_check 的 Action,将其映射到名为 com.example.CheckUsernameAction 的 Java 类上。

CheckUsernameAction 类中,我们可以通过处理 AJAX 请求来检查用户名是否存在。例如:

@Namespace("/user")
public class CheckUsernameAction extends ActionSupport {
  private String username;

  public void setUsername(String username) {
    this.username = username;
  }

  @Action(value = "username_check", results = {
      @Result(name = "success", type = "json")
  })
  public String execute() {
    boolean result = false;
    // 检查用户名是否存在
    if (username.equals("admin")) {
      result = true;
    }
    Map<String, Object> resultMap = new HashMap<String, Object>();
    resultMap.put("result", result);
    setJsonData(resultMap);
    return SUCCESS;
  }

  private String jsonData;
  public String getJsonData() {
    return jsonData;
  }
  public void setJsonData(String jsonData) {
    this.jsonData = jsonData;
  }
  public void setJsonData(Map<String, Object> jsonMap) {
    try {
      JSONObject jsonObject = JSONObject.fromObject(jsonMap);
      jsonData = jsonObject.toString();
    } catch (Exception e) {
    }
  }
}

在上面的代码中,我们使用 @Namespace 注解指定了该 Action 的命名空间。定义 username 属性并提供其 setter 方法来接受 AJAX 请求的数据。

execute 方法中,我们使用 @Action 注解来定义 Action 的参数。在该注解的 results 属性中通过 <result> 元素来设置 Action 的不同状态的输出结果。在 success 状态下使用 JSON 数据格式来返回结果给客户端。

CheckUsernameAction 的属性中,我们定义了 jsonData 属性和 getJsonDatasetJsonData 方法来处理返回给客户端的 JSON 数据。

在客户端中,我们可以使用 AJAX 请求来向 username_check Action 提交数据。例如:

var usernameInput = document.getElementById('username_input');
var checkButton = document.getElementById('check_button');
checkButton.onclick = function() {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
      var result = JSON.parse(xhr.responseText);
      if (result.result) {
        // 用户名已存在
      } else {
        // 用户名可用
      }
    }
  }
  xhr.open('POST', '/user/username_check');
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.send('username=' + usernameInput.value);
}

如上面的代码所示,我们使用 XMLHttpRequest 对象来发送 AJAX 请求,提交数据并处理返回结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts 2 配置Action详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java中进制的转换,Byte与16进制的转换方法

    Java中可以通过一些方法来进行进制转换,其中包括Byte与16进制的转换方法。下面我们详细来讲解Java中进制的转换以及Byte与16进制的转换方法。 进制的转换 在Java中,我们可以通过四种进制(二进制,八进制,十进制,十六进制)之间进行相互转换。以下是简单介绍每种进制的标识符: 二进制:以0b或0B开头,例如0b1010表示10。 八进制:以0开头,…

    Java 2023年5月26日
    00
  • 非常不错的[JS]Cookie精通之路

    “非常不错的[JS]Cookie精通之路”攻略 什么是 Cookie Cookie是一种用于跟踪网站访问者并存储其首选项的技术。它是由服务器发送给客户端(即浏览器)的小文本文件。该文件由客户端存储,并在每次请求该网站时发送回服务器。Cookie通常用于存储用户的会话ID、购物车数据、用户首选项等信息。 创建 Cookie 在JavaScript中,使用doc…

    Java 2023年6月15日
    00
  • Java自定义实现equals()方法过程解析

    Java自定义实现equals()方法过程解析 什么是equals()方法? 在Java中,equals()方法是用于比较两个对象是否相等的方法。它是Object类中的方法,子类可以覆盖这个方法来实现自己的比较方式。一般来说,我们自定义的类需要重写equals方法,来比较类中的属性是否相等。 equals()方法的实现要点 在Java中重写equals方法时…

    Java 2023年5月18日
    00
  • IntelliJ IDEA 2020.2 配置大全详细图文教程(更新中)

    以下是“IntelliJ IDEA 2020.2 配置大全详细图文教程(更新中)”的完整攻略: 1. 安装 IntelliJ IDEA 在官网下载好安装包后,根据提示一步步进行安装。 2. 配置 JDK IntelliJ IDEA 需要配置 JDK 才能运行 Java 代码。我们需要先下载并安装 JDK,然后在 IntelliJ IDEA 中进行配置。 下载…

    Java 2023年5月20日
    00
  • Java实现基于JDBC操作mysql数据库的方法

    下面我将详细讲解Java实现基于JDBC操作mysql数据库的方法的完整攻略,包括如何连接数据库、执行SQL语句、关闭资源等步骤。 1. 引入JDBC的依赖 在Java程序中使用JDBC操作mysql数据库,需要引入mysql-connector-java的依赖。可以在Maven中添加如下依赖: <dependency> <groupId&…

    Java 2023年5月19日
    00
  • Java正则表达式入门基础篇(新手必看)

    让我来为你详细讲解一下“Java正则表达式入门基础篇(新手必看)”这篇文章的完整攻略。 标题 首先,我们来看一下文章的标题:“Java正则表达式入门基础篇(新手必看)”。这个标题十分的清晰明了,表明了本文的主题和受众人群。接下来我们来一步一步的解析这篇文章的内容: 介绍 首先,文章介绍了正则表达式的定义,即一种用来匹配字符串的文本模式。同时也解释了正则表达式…

    Java 2023年5月27日
    00
  • MyBatis使用动态表或列代码解析

    针对”MyBatis使用动态表或列”这一话题,我将从以下几个方面为您进行详细讲解和解析: MyBatis动态表名的使用 MyBatis动态列名的使用 两条示例演示 1. MyBatis动态表名的使用 MyBatis提供了<foreach>标签来支持动态表名的使用。使用方法如下: <select id="queryTables&qu…

    Java 2023年5月20日
    00
  • 一文详解Springboot中filter的原理与注册

    接下来我将为大家详细讲解“一文详解Springboot中filter的原理与注册”的完整攻略。 什么是Filter Filter是Servlet规范中的一部分。Filter主要用于对请求进行过滤、处理和转换,比如可以进行身份验证或者对请求进行字符编码处理等等。 Springboot框架中也提供了Filter的机制,并且相比于Servlet规范中的Filter…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部