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修饰符

    一篇文章带你入门Java修饰符 Java中修饰符是控制访问权限和类、变量和方法行为的关键字。在Java中,共有四类修饰符:访问修饰符、非访问修饰符、类修饰符和方法修饰符。接下来将详细介绍这四类修饰符以及它们的使用规范。 一、访问修饰符 访问修饰符 含义 public 所有类可见 protected 同一包内和子类可见 private 仅本类可见 没有修饰符 …

    Java 2023年5月26日
    00
  • Java实现ATM系统超全面步骤解读建议收藏

    Java实现ATM系统超全面步骤解读 1. 前言 ATM系统是日常生活中经常使用的自助银行系统,本文将介绍如何使用Java完成ATM系统的开发。该系统主要包括用户登录、查询账户信息、存款、取款、转账等基本功能。 2. 数据库设计 在开发ATM系统之前,需要先进行数据库设计。具体步骤如下: 2.1. 创建数据库 首先需要在MySQL数据库中创建一个名为ATM的…

    Java 2023年5月19日
    00
  • 一文搞懂MyBatis多数据源Starter实现

    一文搞懂MyBatis多数据源Starter实现 多数据源在一些应用场景下非常常见,MyBatis也提供了多数据源的支持。但是对于开发者来说,要手动实现多数据源的切换非常繁琐,而且容易出错。MyBatis多数据源Starter可以帮助我们自动配置多数据源并提供切换功能。本文将对MyBatis多数据源Starter的使用进行详细讲解。 步骤一:添加依赖 首先,…

    Java 2023年5月20日
    00
  • 使用Spring组合自定义的注释 mscharhag操作

    下面是关于“使用Spring组合自定义的注释 mscharhag操作”的完整攻略,包含两个示例说明。 使用Spring组合自定义的注释 mscharhag操作 Spring是一个非常流行的Java应用程序框架,它提供了一全面的编程和配置模型,用于构建现代化的基于Java的企业应用程序。在Spring中,注解是一种常重要的机制,它可以帮助我们更加方便地配置和管…

    Java 2023年5月17日
    00
  • 用headjs来管理和加载js 提高网站加载速度

    使用headjs来管理和加载JS可以提高网站的加载速度,这是因为headjs通过异步加载JS文件来提高页面渲染的速度。下面是使用headjs来管理和加载JS的完整攻略: 1. 下载并引入headjs 首先,需要下载head.js库,并在网页中引入该文件,可以使用CDN来引入该文件,如下所示: <script src="https://cdn.…

    Java 2023年6月15日
    00
  • java框架之maven是用来做什么的

    Maven是一种Java项目管理工具,它提供了自动化构建、版本控制、项目报告和依赖管理的功能。它使用一个基于XML的格式来描述项目构建和依赖关系。 什么是Maven Maven是一个开源的工具,提供构建、测试、部署Java应用程序所需的一系列自动化工具。它采用“约定优于配置”的设计理念,通过定义标准的目录结构和构建过程规则,将工程构建自动化,提高项目的开发效…

    Java 2023年5月20日
    00
  • Java JSON转成List结构数据

    下面我将详细讲解Java中如何将JSON转成List结构数据的完整攻略。 环境准备 首先需要引入相关依赖包,可以使用Maven管理依赖,将以下代码添加到项目根目录下的pom.xml文件中: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…

    Java 2023年5月26日
    00
  • Json操作库DynamicJson使用指南

    Json操作库DynamicJson使用指南 1. 介绍 DynamicJson是一个Json操作库,它可以轻松快速地处理Json数据。它的主要特点包括:- 支持动态类型- 支持Linq查询语句- 简单易用 2. 安装 可以使用NuGet轻松安装DynamicJson。在Visual Studio中,在项目中右键点击“管理NuGet程序包”,搜索Dynami…

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