详解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版十大排序经典算法:完整代码(4)

    下面是详细讲解 “java版十大排序经典算法:完整代码(4)” 的攻略。 1. 前言 “java版十大排序经典算法” 系列文章是介绍常见排序算法的一系列文章,本篇为第四篇,主要介绍了 希尔排序、归并排序、快速排序这三个经典算法的 Java 代码实现。 2. 希尔排序 希尔排序是基于插入排序的一种高效的排序算法,也称“缩小增量排序”。利用增量序列将数组分成多个…

    Java 2023年5月19日
    00
  • 详解使用Spring Data repository进行数据层的访问问题

    一、介绍Spring Data Repository Spring Data Repository是一种非常常用的用于访问数据层的组件。在Spring Data Repository中,只需要定义一个接口,并在接口中声明好需要的方法,就可以实现自动化的数据访问。具体而言,Spring Data会通过接口方法的名称和参数来推测query的内容,从而自动生成对应…

    Java 2023年5月20日
    00
  • java事务的概念浅析

    接下来我将详细讲解“Java事务的概念浅析”的完整攻略。 Java事务的概念浅析 什么是事务 在计算机领域,事务是指一组对系统中数据的访问和更新操作,这组操作要么全都执行成功,要么全都不执行,保证了数据的一致性。事务是一种能够保证数据在一些列操作中的完整性和一致性的数据处理方式。 事务的ACID属性 在数据库中,事务必须同时具备ACID四个属性: 原子性(A…

    Java 2023年5月20日
    00
  • Java CAS机制详解

    Java CAS机制详解 什么是CAS机制 CAS(Compare And Swap),即比较并替换,是一种并发控制方式。它的思想是:当多个线程尝试同时更新某一个内存地址时,只有其中一个线程能更新成功,而其余的线程都需要等待。这种方式在并发编程中是很常见的。 CAS机制是通过硬件保证操作的原子性,来避免线程安全问题。 CAS操作的原理 CAS机制需要涉及到三…

    Java 2023年5月26日
    00
  • JDBC SQL语法

    JDBC SQL语法可以分为四个部分:数据定义语言(DDL)、数据查询语言(DQL)、数据操纵语言(DML)和数据控制语言(DCL)。 数据定义语言 数据定义语言(DDL)用于定义和管理数据库对象,例如表、视图和索引等。常用的DDL语句有: CREATE CREATE用于创建数据库中的新对象,可以用来创建以下内容: 创建新表 创建新的视图 创建存储过程 创建…

    Java 2023年5月20日
    00
  • SpringMVC如何获取表单数据(radio和checkbox)

    获取表单数据是Web应用程序中最常见的任务之一。SpringMVC在处理表单数据方面提供了许多便捷的方法,包括获取单选框和复选框的值。 获取单选框的值 客户端可以在多个单选按钮之间进行选择。一组单选按钮被视为一组,必须具有相同的名称。SpringMVC在控制器中提供了几种方法来获取选定的单选按钮值。下面是两条示例说明: 示例1:使用@RequestParam…

    Java 2023年5月26日
    00
  • java控制台输出图书馆管理系统

    Java控制台输出图书馆管理系统 在Java中,通过控制台输出可以方便快捷地查看程序的执行结果。在图书馆管理系统中,我们可以通过控制台输出来展示图书馆的书籍信息、读者信息、借阅信息等。 步骤 第一步:定义类和变量 在Java中,需要定义类和变量来存储图书馆的信息。我们可以先定义一个Book类来表示图书馆的书籍,包括书名、作者和价格等信息。 public cl…

    Java 2023年5月23日
    00
  • 扫微信小程序码实现网站登陆实现解析

    首先,我们需要了解微信小程序码和网站的登陆原理: 微信小程序码是一种二维码,可以直接扫描进入微信小程序。在网站中使用微信小程序码登录,需要先在微信公众平台上绑定网站的 appid,并在小程序代码中引入网站的登录页面。 网站的登陆原理,一般都是使用账号密码等安全信息进行验证,并在验证成功后向用户发放 token,以标识用户的身份。在这个过程中,需要涉及到加密与…

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