struts怎么返回数据库

ruts 框架本身不直接与数据库交互,它依赖于其他技术(如 Hibernate、JDBC)来访问和操作数据库。

Struts 框架中返回数据库数据的详细实现方法

struts怎么返回数据库

在基于 Java 的 Web 开发中,Struts 框架(包括 Struts 1 和 Struts 2)是常用的 MVC(Model-View-Controller)架构实现工具,它通过 Action 类处理用户请求,并与数据库进行交互,最终将数据返回给前端视图展示,以下是关于如何在 Struts 中从数据库获取数据并返回的详细步骤和示例。


环境准备

  1. 技术栈

    • Java SDK(JDK 8 或以上)
    • Struts 2 框架
    • 数据库(如 MySQL)
    • IDE(如 IntelliJ IDEA 或 Eclipse)
    • 构建工具(Maven 或 Gradle)
  2. 依赖配置

    • pom.xml(Maven)中添加以下依赖:

      <dependencies>
          <!-Struts 2 核心依赖 -->
          <dependency>
              <groupId>org.apache.struts</groupId>
              <artifactId>struts2-core</artifactId>
              <version>2.5.26</version>
          </dependency>
          <!-数据库驱动(以 MySQL 为例) -->
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.34</version>
          </dependency>
          <!-Hibernate(可选,用于 ORM) -->
          <dependency>
              <groupId>org.hibernate</groupId>
              <artifactId>hibernate-core</artifactId>
              <version>5.6.15.Final</version>
          </dependency>
          <!-日志框架 -->
          <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.17</version>
          </dependency>
      </dependencies>

数据库设计

假设我们有一个名为 users 的表,结构如下:

struts怎么返回数据库

字段名 类型 描述
id INT(11) 主键,自增
username VARCHAR(50) 用户名
email VARCHAR(100) 邮箱地址
created_at DATETIME 创建时间

Struts 2 中访问数据库的步骤

配置数据库连接池

使用 db.properties 文件存储数据库连接信息:

# db.properties
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
db.username=root
db.password=yourpassword

src/main/resources 目录下创建该文件,并在 Struts 配置文件中加载:

<!-struts.xml -->
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />

创建数据访问对象(DAO)

使用 DAO 模式封装数据库操作:

// UserDao.java
package com.example.dao;
import com.example.model.User;
import java.sql.;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbcp2.BasicDataSource;
public class UserDao {
    private static BasicDataSource dataSource;
    static {
        // 初始化数据库连接池
        dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("yourpassword");
    }
    // 获取所有用户
    public List<User> getAllUsers() throws SQLException {
        List<User> users = new ArrayList<>();
        String sql = "SELECT id, username, email, created_at FROM users";
        try (Connection conn = dataSource.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setEmail(rs.getString("email"));
                user.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime());
                users.add(user);
            }
        }
        return users;
    }
}

创建模型类

// User.java
package com.example.model;
import java.time.LocalDateTime;
public class User {
    private int id;
    private String username;
    private String email;
    private LocalDateTime createdAt;
    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    public LocalDateTime getCreatedAt() { return createdAt; }
    public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
}

Struts 2 Action 类实现

创建 Action 类

// UserAction.java
package com.example.action;
import com.example.dao.UserDao;
import com.example.model.User;
import java.sql.SQLException;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
    private List<User> users; // 用于存储查询结果并返回给前端
    // Getter and Setter for users
    public List<User> getUsers() { return users; }
    public void setUsers(List<User> users) { this.users = users; }
    // 执行查询操作的 Action 方法
    public String listUsers() {
        UserDao userDao = new UserDao();
        try {
            users = userDao.getAllUsers(); // 调用 DAO 方法获取数据
        } catch (SQLException e) {
            e.printStackTrace();
            addActionError("数据库连接失败!");
            return ERROR;
        }
        return SUCCESS; // 返回成功状态
    }
}

配置 Struts.xml

struts.xml 中配置 Action:

<!-struts.xml -->
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="listUsers" class="com.example.action.UserAction" method="listUsers">
            <result name="success">/userList.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

前端视图展示数据(JSP)

创建 userList.jsp,用于展示查询结果:

struts怎么返回数据库

<!-userList.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>用户列表</title>
</head>
<body>
    <h2>用户列表</h2>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>邮箱</th>
            <th>创建时间</th>
        </tr>
        <s:iterator value="users" var="user">
            <tr>
                <td><s:property value="#user.id"/></td>
                <td><s:property value="#user.username"/></td>
                <td><s:property value="#user.email"/></td>
                <td><s:property value="#user.createdAt"/></td>
            </tr>
        </s:iterator>
    </table>
</body>
</html>

完整流程归纳

  1. 用户发起请求:访问 http://localhost:8080/yourapp/listUsers.action
  2. Struts 拦截请求:根据 struts.xml 配置,调用 UserActionlistUsers 方法。
  3. DAO 层查询数据库UserDao 通过 JDBC 连接数据库,执行 SQL 查询。
  4. 返回数据:查询结果封装为 List<User>,并通过 Setter 注入到 Action 的 users 属性。
  5. 视图渲染:Struts 根据配置的 result,跳转到 userList.jsp,并通过 <s:iterator> 标签遍历数据。
  6. 页面展示:用户看到格式化后的表格数据。

FAQs(常见问题解答)

问题 1:如何在 Struts 2 中使用 Hibernate 代替 JDBC?

解答
可以使用 Hibernate 作为 ORM 框架简化数据库操作,步骤如下:

  1. 配置 Hibernate 的 hibernate.cfg.xml,包括数据库连接信息和方言。
  2. UserDao 中使用 SessionFactory 获取 Session,并通过 HQL 或 Criteria 查询数据。
  3. 示例代码:
    // UserDao.java(使用 Hibernate)
    public List<User> getAllUsers() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            return session.createQuery("from User", User.class).list();
        } finally {
            session.close();
        }
    }

    需注意配置事务管理和 Session 生命周期。


问题 2:如何处理数据库连接泄漏问题?

解答

  1. 使用连接池:推荐使用 DBCP、C3P0 等连接池管理工具,避免频繁创建和关闭连接。
  2. 确保资源关闭:在 JDBC 操作中,使用 try-with-resources 确保 ConnectionStatementResultSet 被正确关闭。
  3. 监控工具:集成监控工具(如 Druid)检测连接池状态和泄漏问题。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/64897.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月17日 12:19
下一篇 2025年7月17日 12:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN