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日

相关文章

  • 详解kafka中的消息分区分配算法

    下面我来详细讲解一下“详解kafka中的消息分区分配算法”的完整攻略。 什么是Kafka中的消息分区分配算法? Kafka是一个可扩展的、分布式的消息系统,它的基础组件是消息(message)和主题(topic),一个主题可以被划分为一个或多个分区(partition)。Kafka中的消息分区分配算法是根据以下准则将消息分配到各个分区中的算法: 在分区的数量…

    Java 2023年5月20日
    00
  • Tomcat源码导入idea的方法

    以下是详细的Tomcat源码导入idea的方法: 步骤一:下载Tomcat源码并解压 首先,你需要在Apache Tomcat下载页面[https://tomcat.apache.org/download-80.cgi]上下载该版本的Tomcat源码,然后将其解压到任意目录。 步骤二:安装Java和IDEA 在继续之前,你需要先安装Java和IDEA。确保你…

    Java 2023年6月15日
    00
  • java反射应用详细介绍

    Java反射应用详细介绍 简介 Java反射是Java语言的一种基础技术,它可以在运行时获取类的信息,包括类名、方法和字段等,也可以在运行时动态创建对象或调用对象的方法,这些都是在编译时无法确定的。反射的应用范围非常广泛,比如:框架开发、代码生成器、动态代理、单元测试等等。 基本使用 Java反射主要涉及到以下几个类:Class、Method、Constru…

    Java 2023年6月15日
    00
  • 基于Spring Security前后端分离的权限控制系统问题

    基于Spring Security前后端分离的权限控制系统是一个非常常见的开发需求。下面将提供完整攻略,从搭建环境、配置安全策略、实现权限控制等方面讲解该系统的具体实现。其中示例将分别展示两种不同的权限控制方式。 1. 搭建环境 首先,需要搭建一个Spring Boot项目,并且集成Spring Security。需要在项目中引入以下依赖: <depe…

    Java 2023年5月20日
    00
  • java导出数据库的全部表到excel

    要将Java中的数据库表导出到Excel,需要使用Java中现成的工具和框架来实现。下面是一些步骤来实现该功能的完整攻略: 步骤一:添加POI依赖 POI(Poor Obfuscation Implementation)是一个开放源码的Java组件,它可以在Java平台上读取、创建和修改Microsoft Office文件,包括.xls和.xlsx格式的Ex…

    Java 2023年5月20日
    00
  • 详解spring cloud config实现datasource的热部署

    详解Spring Cloud Config实现Datasource的热部署 前言 Spring Cloud Config是一个分布式配置中心,它可以将应用的配置集中管理并进行统一的配置管理。在一些场景下,我们需要配置信息能够动态变更,而这时我们便需要将配置文件的热部署进行实现。 在这篇文章中,我们将详细讲解如何使用Spring Cloud Config实现D…

    Java 2023年5月20日
    00
  • Java数组操作的10大方法

    当涉及到Java编程时,数组是其中最基础、最重要的数据类型之一。Java的数组提供了许多基本操作,这些操作也是Java程序员必须掌握的必备编程技能之一。以下是Java数组操作的10大方法的详细攻略: 1.创建数组 在Java中,你可以使用以下方式来创建数组: int[] arrInt = new int[10]; String[] arrString = n…

    Java 2023年5月26日
    00
  • Hibernate的Session_flush与隔离级别代码详解

    Hibernate的Session_flush与隔离级别代码详解 Session_flush Session_flush是Hibernate的Session接口中的一个方法。它将缓存中所有的托管实体对象同步到数据库中,即将所有还未被同步到数据库中的操作都提交执行。 Session_flush方法有两种调用方式,分别是: session.flush():这种方…

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