在JSP界面中查询数据库数据是Web开发中的常见需求,通常通过结合JSP、JavaBean(或POJO)以及JDBC(Java Database Connectivity)技术来实现,以下是详细的步骤和代码示例,帮助理解如何完成这一过程。
环境准备
在开始之前,确保已安装以下工具和库:
- JDK:Java开发工具包,建议版本1.8或更高。
- Web服务器:如Apache Tomcat,用于部署和运行JSP应用。
- 数据库:如MySQL、Oracle等,并已创建测试数据库和表。
- JDBC驱动:对应数据库的JDBC连接库(如MySQL的
mysql-connector-java.jar),需将其放置在Tomcat的lib目录下或项目的WEB-INF/lib目录中。
数据库表设计
以MySQL为例,创建一个简单的用户表user_info:
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100)
);
插入一些测试数据:
INSERT INTO user_info (username, age, email) VALUES
('张三', 25, 'zhangsan@example.com'),
('李四', 30, 'lisi@example.com'),
('王五', 28, 'wangwu@example.com');
创建数据库连接工具类
为了复用数据库连接代码,编写一个DBUtil类:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "your_password";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
创建数据访问对象(DAO)
DAO负责与数据库交互,实现查询逻辑,以下是UserDAO类:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDAO {
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
String sql = "SELECT id, username, age, email FROM user_info";
try (Connection conn = DBUtil.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.setAge(rs.getInt("age"));
user.setEmail(rs.getString("email"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
}
创建实体类(JavaBean)
User类用于封装用户数据:
public class User {
private int id;
private String username;
private int age;
private String email;
// 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 int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
编写JSP页面
在index.jsp中,通过<jsp:useBean>和<jsp:getProperty>标签获取数据并展示:
<%@ page import="java.util.List" %>
<%@ page import="com.example.User" %>
<%@ page import="com.example.UserDAO" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>用户列表</title>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>用户信息列表</h1>
<table>
<tr>
<th>ID</th>
<th>用户名</th>
<th>年龄</th>
<th>邮箱</th>
</tr>
<%
UserDAO userDAO = new UserDAO();
List<User> users = userDAO.getAllUsers();
for (User user : users) {
%>
<tr>
<td><%= user.getId() %></td>
<td><%= user.getUsername() %></td>
<td><%= user.getAge() %></td>
<td><%= user.getEmail() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
部署与运行
- 将项目打包为WAR文件,部署到Tomcat的
webapps目录。 - 启动Tomcat,访问
http://localhost:8080/your_project_name/index.jsp,即可看到用户数据表格。
优化与扩展
- 分页查询:通过SQL的
LIMIT和OFFSET实现分页功能。 - 条件查询:在JSP页面添加搜索表单,通过
request.getParameter()获取查询条件,动态构建SQL语句。 - 异常处理:在DAO层添加try-catch块,避免因数据库错误导致页面崩溃。
- 连接池:使用
HikariCP或DBCP等连接池技术提高数据库连接效率。
相关操作流程表
| 步骤 | 技术要点 | |
|---|---|---|
| 1 | 环境搭建 | 安装JDK、Tomcat、数据库,导入JDBC驱动 |
| 2 | 数据库设计 | 创建表并插入测试数据 |
| 3 | 工具类编写 | 实现DBUtil管理数据库连接 |
| 4 | DAO实现 | 编写UserDAO查询数据库 |
| 5 | 实体类创建 | 定义User类封装数据 |
| 6 | JSP页面开发 | 使用JSP标签展示数据 |
| 7 | 部署测试 | 部署到Tomcat并访问验证 |
FAQs
问题1:JSP页面中如何处理中文乱码?
解答:
在JSP页面顶部添加以下指令,确保页面编码为UTF-8:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
在web.xml中配置字符编码过滤器:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
问题2:如何实现带条件(如按用户名搜索)的查询?
解答:
-
在JSP页面添加搜索表单:
<form action="search.jsp" method="get"> <input type="text" name="username" placeholder="输入用户名"> <button type="submit">搜索</button> </form>
-
在
search.jsp中获取参数并调用DAO:
<% String username = request.getParameter("username"); UserDAO userDAO = new UserDAO(); List<User> users = userDAO.searchUsers(username); // 展示结果(同index.jsp) %> -
在
UserDAO中添加searchUsers方法:public List<User> searchUsers(String username) { List<User> users = new ArrayList<>(); String sql = "SELECT id, username, age, email FROM user_info WHERE username LIKE ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, "%" + username + "%"); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setAge(rs.getInt("age")); user.setEmail(rs.getString("email")); users.add(user); } } catch (SQLException e) { e.printStackTrace(); } return users; }
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/245204.html