在Struts1框架中传递数据库数据通常涉及多个步骤,包括数据库连接、数据操作、Action处理以及结果展示,以下是详细的实现流程和关键代码示例。
需要配置数据库连接,在Struts1中,可以通过DataSource配置在struts-config.xml文件中建立数据库连接池,使用Tomcat的JNDI数据源,可以在context.xml中定义数据源,然后在struts-config.xml中通过<data-source>标签引用,配置示例如下:
<data-source key="dataSource"
type="org.apache.commons.dbcp.BasicDataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/testdb"
username="root"
password="password"/> 创建数据库操作类(DAO),DAO模式负责封装数据库访问逻辑,例如查询、插入、更新和删除操作,以下是一个简单的DAO类示例,用于从数据库获取用户列表:
public class UserDAO {
private DataSource dataSource;
public UserDAO(DataSource dataSource) {
this.dataSource = dataSource;
}
public List<User> getAllUsers() throws SQLException {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM users";
try (Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
users.add(user);
}
}
return users;
}
} 在Struts1的Action类中,通过DataSource获取DAO实例并调用其方法,Action类需要继承org.apache.struts.action.Action,并重写execute方法。

public class UserAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
// 获取数据源
DataSource dataSource = getDataSource(request);
UserDAO userDAO = new UserDAO(dataSource);
List<User> users = userDAO.getAllUsers();
// 将数据存入request作用域
request.setAttribute("users", users);
return mapping.findForward("success");
} catch (SQLException e) {
e.printStackTrace();
return mapping.findForward("error");
}
}
} 在struts-config.xml中配置Action和转发路径:
<action path="/userList" type="com.example.UserAction" name="userForm" scope="request">
<forward name="success" path="/userList.jsp"/>
<forward name="error" path="/error.jsp"/>
</action> 在JSP页面中,使用<logic:iterate>标签遍历并展示数据:
<logic:iterate id="user" name="users">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.email}</td>
</tr>
</logic:iterate> 还可以通过ActionForm传递表单数据到数据库,在UserForm中定义属性并设置getter/setter方法,然后在Action中获取表单数据并调用DAO的插入或更新方法。

以下是数据库操作流程的总结表格:
| 步骤 | 描述 | 关键代码/配置 |
|---|---|---|
| 配置数据源 | 在struts-config.xml或context.xml中配置数据库连接 | <data-source> |
| 创建DAO | 封装数据库操作逻辑 | UserDAO类,实现CRUD方法 |
| 编写Action | 处理请求,调用DAO并传递数据 | UserAction的execute方法 |
| 配置Action | 在struts-config.xml中定义Action和转发路径 | <action> |
| 展示数据 | 在JSP中遍历并显示数据 | <logic:iterate> |
相关问答FAQs:
问题:Struts1中如何处理数据库事务?
解答:可以通过在Action中手动管理事务,例如在DAO方法中显式调用conn.setAutoCommit(false),提交或回滚事务,也可以使用Spring框架整合Struts1,通过Spring的声明式事务管理来处理事务。
问题:如何在Struts1中实现分页查询数据库数据?
解答:在DAO中添加分页参数(如当前页码和每页记录数),使用SQL的LIMIT子句或ROWNUM(Oracle)实现分页查询。String sql = "SELECT * FROM users LIMIT " + offset + "," + pageSize;,然后在Action中计算分页参数并传递给JSP展示分页控件。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复