java struts2怎么从数据库获取
- 数据库
- 2025-08-05
- 59
是关于Java Struts2如何从数据库获取数据的详细解答:
核心机制与实现步骤
-
Action类作为数据处理中心:在Struts2框架中,Action类是业务逻辑的核心载体,开发者需在此定义公共成员变量用于存储从数据库加载的数据,若需展示用户列表,则应声明一个
public List<User>类型的属性,当执行完数据库操作后,将查询结果存入该变量,框架会自动将其放入值栈以便视图层访问,这种设计利用了MVC模式中Controller组件的职责分离特性,使数据处理与展示解耦。 -
数据库连接与SQL执行:通常采用JDBC直接操作或整合ORM框架两种方式实现持久层交互,以JDBC为例,典型流程包括:加载驱动类、建立连接、预编译语句、设置参数、执行查询及结果集解析,如MySQL场景下,需将连接器JAR包放置于项目的
WEB-INF/lib目录,通过DriverManager.getConnection()获取连接实例,对于复杂业务场景,推荐使用Hibernate/MyBatis等ORM工具提升开发效率。
-
配置映射与视图渲染:需要在
struts.xml中配置动作映射关系,指定Action类与物理页面的对应规则,当Action返回逻辑视图名”success”时,框架依据配置跳转至对应的JSP页面,视图层可通过EL表达式${propertyName}直接读取Action中的公共属性值,得益于Struts2内置的值栈机制,无需额外传参即可实现数据回显。
示例代码解析
以下是基于JDBC实现登录验证的完整示例:

Java部分(LoginAction.java)
package cn.w3cschool.struts2;
import java.sql.;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String user; // 对应表单输入字段
private String password; // 对应表单输入字段
private String name; // 用于存储从数据库读取的结果
public String execute() {
String ret = ERROR;
Connection conn = null;
try {
String URL = "jdbc:mysql://localhost/struts_tutorial";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, "root", "root123");
String sql = "SELECT name FROM login WHERE user = ? AND password = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user); // 设置第一个占位符的值
ps.setString(2, password); // 设置第二个占位符的值
ResultSet rs = ps.executeQuery();
if (rs.next()) { // 如果存在匹配记录
name = rs.getString(1); // 提取姓名列的值
ret = SUCCESS; // 设置成功标志
}
} catch (Exception e) {
ret = ERROR; // 异常处理转为错误状态
} finally {
if (conn != null) {
try { conn.close(); } catch (Exception ignored) {}
}
}
return ret; // 返回执行结果标识
}
// Getter/Setter方法省略...
}
JSP页面片段(index.jsp)
<%@ taglib prefix="s" uri="/struts-tags" %>
<form action="loginaction" method="post">
User:<br/><input type="text" name="user"/><br/>
Password:<br/><input type="password" name="password"/><br/>
<s:submit value="Login"/>
</form>
<!-显示数据库查询结果 -->
${name != null ? '欢迎, ' + name : '请重新输入凭证'}
高级优化策略
| 技术手段 | 实现方式 | 优势对比 |
|---|---|---|
| 连接池管理 | 使用DBCP/C3P0等第三方库创建可复用的连接对象池 | 减少物理连接创建开销 |
| ORM框架集成 | Hibernate/MyBatis自动映射实体类与表结构 | 简化CRUD操作,支持HQL查询 |
| 二级缓存机制 | Ehcache/Redis缓存热点数据集合 | 降低数据库负载,加速响应速度 |
| 多环境适配 | 通过外部配置文件切换不同环境的DS参数 | 支持开发/测试/生产环境隔离 |
常见问题解决方案
Q1: JSP页面无法显示数据库数据怎么办?
A: 检查三点:①确认Action类中的目标变量已声明为public;②验证struts.xml的结果映射是否正确指向目标页面;③确保EL表达式书写规范,如${userList}而非#{userList},若仍无法解决,可在Action中添加断点调试,观察数据是否真实存入成员变量。
Q2: 频繁出现“Connection leak”警告如何处理?
A: 这是由于未正确关闭数据库连接所致,建议采用try-with-resources语法自动释放资源,或在finally块中显式调用close()方法,对于高并发场景,务必使用连接池管理长生命周期的连接实例。

Struts2通过Action类作为数据枢纽,结合灵活的配置系统和强大的视图技术支持,为开发者提供了高效的数据库交互方案,实际项目中可根据需求选择纯JDBC、ORM框架或混合方案实现
