详解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日

相关文章

  • Spring Security 自定义授权服务器实践记录

    Spring Security 自定义授权服务器实践记录 本文将详细讲解如何使用Spring Security自定义授权服务器,并提供两个示例说明。 前置条件 在开始学习本文前,需要准备以下环境: JDK1.8或以上版本 Maven 3.0或以上版本 Spring Boot 2.0或以上版本 配置依赖 首先,需要在pom.xml中添加以下依赖: <de…

    Java 2023年6月3日
    00
  • Java连接数据库,及增删改查的示例

    下面是“Java连接数据库,及增删改查的示例”的完整攻略。 1. 连接数据库 Java连接数据库通常需要使用JDBC API,需要先下载并安装相应的JDBC驱动。一般情况下,不同的数据库使用的JDBC驱动是不同的,我们需要选择对应的JDBC驱动。以MySQL为例,我们可以使用以下步骤来连接数据库: 1.下载MySQL官方提供的JDBC驱动,例如mysql-c…

    Java 2023年5月19日
    00
  • Java中字符串转int数据类型的三种方式

    当我们在Java中需要将字符串类型的数据转换成整型(int)时,通常会遇到以下三种情况: 使用Integer.parseInt方法 其中parseInt方法是Java中将字符串解析成整数的一个常用方法。 String str = "123"; int num = Integer.parseInt(str); System.out.prin…

    Java 2023年5月27日
    00
  • SpringBoot Kafka 整合使用及安装教程

    下面我来给你详细讲解“SpringBoot Kafka 整合使用及安装教程”的完整攻略。 1. 安装Kafka Kafka是一个开源的分布式流处理平台,它由Scala和Java编写而成。首先我们需要安装Kafka: 访问Kafka官网:http://kafka.apache.org/downloads 选择Kafka的版本,推荐使用最新版本 解压下载好的文件…

    Java 2023年5月20日
    00
  • 详解SpringBoot修改启动端口server.port的四种方式

    下面是详解SpringBoot修改启动端口server.port的四种方式的完整攻略: 方式一:通过application.properties文件修改 在SpringBoot应用的classpath路径下添加application.properties文件,然后在文件中添加以下内容: server.port=8081 这样就可以将应用的启动端口修改为808…

    Java 2023年5月26日
    00
  • java 字符串转化为字符数组的3种实现案例

    下面是“Java 字符串转化为字符数组的 3 种实现案例”的攻略: 前言 在Java编程中,字符串和字符数组是两个常用的数据类型。字符串类型的数据以字符串形式存储,而字符数组则以字符的形式存储。而在某些情况下,我们需要将字符串类型数据转化为字符数组类型。本文将介绍 3 种 Java 字符串转化为字符数组的方法。 1. 使用 String 类的 toCharA…

    Java 2023年5月26日
    00
  • Android UI设计与开发之使用ViewPager实现欢迎引导页面

    下面是使用ViewPager实现欢迎引导页面的完整攻略: 1. 准备工作 在开始实现之前需要进行一些准备工作: 在Android studio中创建一个新项目。 在app目录下的build.gradle文件中添加以下依赖: implementation ‘androidx.viewpager2:viewpager2:1.0.0’ 创建一个初始的欢迎引导布局文…

    Java 2023年6月1日
    00
  • Java中泛型的示例详解

    针对“Java中泛型的示例详解”,我可以为您提供以下攻略: 1. 泛型的基础知识 在Java中,泛型是一种将类型参数化的机制,可以在定义类、接口或方法时,指定参数类型,提高代码的安全性和复用性。泛型的定义格式如下: class ClassName<T> { public T method(T param) { // 方法体 } } 在上述代码中,…

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