详解Java的Struts2框架的结构及其数据转移方式

详解Java的Struts2框架的结构及其数据转移方式

Struts2框架的结构

Struts2是一个MVC架构的Web框架,其结构包含以下几个部分:

Action类

Action类用于处理请求并响应给用户,是整个框架中的核心组件,通常存放在src目录下的com.example.action包中,下面是一个简单的Action类示例:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String execute() throws Exception {
        return SUCCESS;
    }
}

配置文件

Struts2的配置文件通常存放在src目录下的struts.xml文件中,用于配置Action类、拦截器、参数等。以下是一个简单的struts.xml文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

    <package name="default" extends="struts-default">

        <action name="hello" class="com.example.action.HelloAction">
            <result name="success">/hello.jsp</result>
        </action>

    </package>

</struts>

数据转移方式

Struts2提供了多种数据传输方式,包括request参数、session参数、Action属性、属性驱动等。

request参数

request参数是通过HTTP请求发送到服务器上的一些参数,可以通过ActionContext类中的getRequest()方法来获取request实例,从而获取request中的参数值,以下是一个获取request参数的示例:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

public class HelloAction extends ActionSupport {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        String username = request.getParameter("username");
        return SUCCESS;
    }
}

Action属性

Action属性是Action类中的成员变量,可以通过定义setter和getter方法对其进行访问,在jsp页面中通过EL表达式获取其值,以下是一个使用Action属性的示例:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String execute() throws Exception {
        name = "world";
        return SUCCESS;
    }
}

在jsp页面中,可以通过${name}来获取Action属性的值。

示例

示例1:一个简单的登陆页面

下面是一个简单的登陆页面,其中用户需要输入用户名和密码才能登陆系统。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
<h1>Login</h1>
<s:form action="login">
    <s:textfield name="username" label="Username"/>
    <s:password name="password" label="Password"/>
    <s:submit value="Login"/>
</s:form>
</body>
</html>

其中,标签表示一个提交表单,action属性为表单提交后跳转的Action类名,表示输入框,name属性为表单参数名,label属性为输入框前面的标签。

以下是相应的Action类中用于处理请求的代码:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

    public String execute() throws Exception {
        if ("admin".equals(username) && "123456".equals(password)) {
            return SUCCESS;
        } else {
            addActionError("Invalid username or password");
            return ERROR;
        }
    }
}

用户输入用户名和密码后,会提交表单到/LoginAction.action,LoginAction类中的execute方法会被调用,通过判断输入的用户名和密码是否正确,如果正确则返回SUCCESS,否则返回ERROR。

在返回SUCCESS时,Struts2会按照struts.xml中配置的结果映射,跳转到登录成功后的页面;在返回ERROR时,Struts2会在jsp页面中显示addError()方法中的提示信息。

示例2:属性驱动

属性驱动是指通过setter和getter方法来访问Action类中的属性,可以通过Action类中的成员变量来存储表单参数值,在jsp页面中使用EL来获取Action类中的属性值。

以下是一个使用属性驱动的代码示例:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
    private String username;
    private String password;
    private String email;

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String execute() throws Exception {
        // do something
        return SUCCESS;
    }
}

在jsp页面中,可以通过EL表达式来获取Action类中的属性值:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
<h1>Register</h1>
<s:form action="register">
    <s:textfield name="username" label="Username" value="%{username}"/>
    <s:password name="password" label="Password" value="%{password}"/>
    <s:textfield name="email" label="Email" value="%{email}"/>
    <s:submit value="Register"/>
</s:form>
</body>
</html>

其中,value属性是通过EL表达式来获取当前Action类中的属性值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java的Struts2框架的结构及其数据转移方式 - Python技术站

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

相关文章

  • 让Java程序自动重启的实现方法(推荐)

    让我们来详细讲解一下“让Java程序自动重启的实现方法(推荐)” 实现的完整攻略。 1. 监听文件变化方式 这种方式是通过文件监听来实现的,当指定的文件发生变化时,可以通过管道的方式向Java程序发送消息,让程序自动重启。 首先,可以在Java代码中通过第三方库jnotify来实现文件监听。以下是一个示例代码: // 引入jnotify依赖 <depe…

    Java 2023年5月23日
    00
  • Java软件生产监控工具Btrace使用方法详解

    Java软件生产监控工具Btrace使用方法详解 什么是Btrace Btrace是一款Java生产环境下的轻量级无侵入式动态追踪工具,它可以通过对Java字节码进行插桩来实现对Java程序的监控和调试。Btrace不会对Java应用程序代码进行任何修改,同时也不会影响程序的正常运行。 Btrace的安装与配置 下载Btrace 在Btrace的官网http…

    Java 2023年5月26日
    00
  • Java实现中文算数验证码的实现示例(算数运算+-*/)

    下面我来为你详细讲解Java实现中文算数验证码的完整攻略。 思路 实现中文算数验证码,思路如下: 生成指定位数(如四位)的随机算式和结果; 将随机数字与其对应的中文词组成一个map,以便后面进行替换; 将算式中的数字替换为对应的中文; 将结果数字同样替换为对应的中文; 将算式和结果拼接成字符串,并返回到前端展示。 示例 下面是Java实现中文算数验证码的示例…

    Java 2023年5月20日
    00
  • 微信小程序 登录的简单实现

    当我们需要使用微信用户信息或微信提供的其他服务(如微信支付)时,我们需要使用微信提供的登录功能来获取用户的授权信息。本文将详细介绍如何使用微信小程序中的登录功能来获取用户授权,实现微信小程序的登录功能。 步骤一:接入微信登录功能 在小程序开发中,我们可以使用微信提供的 wx.login() 方法来获取用户登录的 code。这个 code 可以通过后台与微信服…

    Java 2023年5月23日
    00
  • java 数组越界判断和获取数组长度的实现方式

    Java 数组越界判断和获取数组长度的实现方式是每个 Java 开发者都需要掌握的重要知识点。接下来,我将详细讲解实现这些功能的方式和注意事项。 数组越界判断 数组越界是指当程序尝试访问一个超出数组边界的元素时产生的错误。Java 中提供了两种方式来避免数组越界: 方式一:使用 try-catch 语句 在 Java 中,我们可以使用 try-catch 语…

    Java 2023年5月26日
    00
  • 如何检测SQL注入技术以及跨站脚本攻击

    SQL注入和跨站脚本攻击是常见的网络安全威胁,本文将详细介绍如何检测和防范这两种攻击。 检测SQL注入攻击 SQL注入的原理 SQL注入攻击是利用Web应用程序中的漏洞,通过向应用程序发送恶意的SQL命令,绕过身份验证和访问控制机制,从而获取敏感信息或完全接管应用程序的数据库管理系统(DBMS)。攻击者可以通过修改SQL查询语句或资料库程序来更改或删除重要数…

    Java 2023年6月15日
    00
  • ant使用指南详细入门教程

    Ant使用指南详细入门教程 Ant 是一款 Java 应用程序构建工具,它采用基于 XML 的构建脚本描述文件,可以使用 Ant 提供的任务集来编译、打包、测试、部署等一系列构建工作。本篇文章将从 Ant 的安装和配置开始讲解,到 Ant 的常用任务和实例演示,带领读者全面入门 Ant 构建工具。 安装和配置 Ant 安装 Java 运行时环境 Ant 是基…

    Java 2023年6月15日
    00
  • 一文详解Java中枚举类的使用

    一文详解Java中枚举类的使用 什么是枚举类? 枚举类是一种特殊的类,它用于表示一组常量。我们通常用它们来代表一个有限的取值范围。在Java中,枚举类是用enum关键字定义的。 枚举类的定义 定义一个枚举类非常简单,只需要使用enum关键字定义即可。例如,定义一个表示星期的枚举类: public enum Weekday { MONDAY, TUESDAY,…

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