上一篇
struts怎么返回数据库
- 数据库
- 2025-07-17
- 5015
ruts 框架本身不直接与数据库交互,它依赖于其他技术(如 Hibernate、JDBC)来访问和操作数据库。
Struts 框架中返回数据库数据的详细实现方法
在基于 Java 的 Web 开发中,Struts 框架(包括 Struts 1 和 Struts 2)是常用的 MVC(Model-View-Controller)架构实现工具,它通过 Action 类处理用户请求,并与数据库进行交互,最终将数据返回给前端视图展示,以下是关于如何在 Struts 中从数据库获取数据并返回的详细步骤和示例。
环境准备
-
技术栈:
- Java SDK(JDK 8 或以上)
- Struts 2 框架
- 数据库(如 MySQL)
- IDE(如 IntelliJ IDEA 或 Eclipse)
- 构建工具(Maven 或 Gradle)
-
依赖配置:
-
在
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 的表,结构如下:
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | INT(11) | 主键,自增 |
| username | VARCHAR(50) | 用户名 |
| 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,用于展示查询结果:

<!-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>
完整流程归纳
- 用户发起请求:访问
http://localhost:8080/yourapp/listUsers.action。 - Struts 拦截请求:根据
struts.xml配置,调用UserAction的listUsers方法。 - DAO 层查询数据库:
UserDao通过 JDBC 连接数据库,执行 SQL 查询。 - 返回数据:查询结果封装为
List<User>,并通过 Setter 注入到 Action 的users属性。 - 视图渲染:Struts 根据配置的
result,跳转到userList.jsp,并通过<s:iterator>标签遍历数据。 - 页面展示:用户看到格式化后的表格数据。
FAQs(常见问题解答)
问题 1:如何在 Struts 2 中使用 Hibernate 代替 JDBC?
解答:
可以使用 Hibernate 作为 ORM 框架简化数据库操作,步骤如下:
- 配置 Hibernate 的
hibernate.cfg.xml,包括数据库连接信息和方言。 - 在
UserDao中使用SessionFactory获取Session,并通过 HQL 或 Criteria 查询数据。 - 示例代码:
// 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:如何处理数据库连接泄漏问题?
解答:
- 使用连接池:推荐使用 DBCP、C3P0 等连接池管理工具,避免频繁创建和关闭连接。
- 确保资源关闭:在 JDBC 操作中,使用
try-with-resources确保Connection、Statement、ResultSet被正确关闭。 - 监控工具:集成监控工具(如 Druid)检测连接池状态和泄漏问题。
