Struts 2 配置Action详解

yizhihongxing

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日

相关文章

  • struts2通过action返回json对象

    实现Struts2通过Action返回JSON对象,可以按照以下步骤进行操作: 步骤一:导入依赖 在项目的pom.xml中导入struts2-json-plugin依赖,以便能够支持JSON格式的数据: <dependency> <groupId>org.apache.struts</groupId> <artifa…

    Java 2023年5月20日
    00
  • Java传入用户名和密码并自动提交表单实现登录到其他系统的实例代码

    要实现Java传入用户名和密码并自动提交表单实现登录到其他系统的功能,我们需要使用Java中的HttpClient库来进行POST请求,同时我们需要获取登录界面的HTML代码,以便提取出登录接口的URL、表单数据和Cookie信息等。 具体实现过程如下: 1. 导入HttpClient库 在Java项目中使用HttpClient库,需要先添加相关依赖。在Ma…

    Java 2023年5月24日
    00
  • jquery pagination分页插件使用详解(后台struts2)

    下面是jquery pagination分页插件使用详解(后台struts2)的完整攻略: 一、概述 jquery pagination是一款常用于前端数据分页的jquery插件,支持使用ajax方式加载数据,提供众多的配置项以适应不同的需求。本文将详细讲解如何在后台struts2项目中使用jquery pagination实现数据分页。 二、环境准备 使用…

    Java 2023年6月15日
    00
  • java web实现简单登录注册功能全过程(eclipse,mysql)

    接下来我详细讲解如何使用Java Web实现简单的登录注册功能全过程,以下是步骤: 步骤一:配置开发环境 在开始项目之前,我们需要搭建好相应的开发环境,主要包括Java SE、Eclipse IDE、MySQL等工具和环境的安装和配置工作。 步骤二:创建Maven Web项目 在Eclipse IDE中创建一个Maven Web项目,建议使用Spring框架…

    Java 2023年6月16日
    00
  • Mybatis-plus在项目中的简单应用

    以下是Mybatis-plus在项目中的简单应用攻略: 1. 简介 Mybatis-plus是Mybatis的增强工具,它大大简化了Mybatis的使用。Mybatis-plus提供了各种方便的功能,如:自动生成代码、分页查询、乐观锁、多租户等。 2. 安装 在Maven项目中使用Mybatis-plus,需在pom.xml中添加相关依赖: <depe…

    Java 2023年5月20日
    00
  • Java加载资源文件时的路径问题的解决办法

    当我们需要在Java程序中读取资源文件时,经常会遇到路径问题。一般来说,Java中有三种方式可以读取资源文件: 使用绝对路径 使用相对路径 使用类路径 这里我们以读取配置文件为例,详细讲解以上三种方式的区别及解决办法。 1. 使用绝对路径 使用绝对路径是最简单的方式,直接指定文件的完整路径即可。但是这种方式会带来一些问题,因为在不同的机器上,文件的路径可能会…

    Java 2023年5月20日
    00
  • Java 字符串连接的性能问题分析

    一、Java 字符串连接的性能问题分析 背景字符串是 Java 中最常见的数据类型之一,由于其具有不可变性质,任何对字符串进行修改或连接的操作都会生成一个新的字符串对象,这就意味着会产生大量的中间对象,浪费了宝贵的内存资源。 解决方案Java 提供了多种方式进行字符串连接,包括 ‘+’ 运算符、StringBuffer 和 StringBuilder 等。其…

    Java 2023年5月26日
    00
  • 2020最新版MyBatis高频面试题

    2020最新版MyBatis高频面试题攻略 什么是 MyBatis? MyBatis 是一款基于 Java 语言持久层框架,类似于 Hibernate。它可以将 SQL 语句与 Java 对象映射,方便地进行数据库的访问。 MyBatis 的核心组件是什么? MyBatis 的核心组件分别为: SqlSessionFactoryBuilder SqlSess…

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