不用JSP如何在javaweb实现分页查询
时间: 2023-07-02 14:12:52 浏览: 119
在 Java Web 中,如果你不想使用 JSP 来实现分页查询,你可以使用 Servlet + JDBC 来实现。
具体来说,你可以先通过 Servlet 接收用户提交的查询请求,然后将查询条件传递给 DAO 层(使用 JDBC 连接数据库),DAO 层通过查询数据库获取符合条件的数据,并计算出总记录数和总页数,最后将查询结果和分页信息返回给 Servlet。Servlet 再将查询结果和分页信息封装成一个 JavaBean 对象(或者使用 Map),并将其存储到 request 或 session 中,最后转发到结果页面进行展示。
下面是一个简单的示例代码,假设我们要实现查询一个学生信息表(student)的分页查询功能:
```
// 在 Servlet 中接收查询请求并调用 DAO 层
public class StudentServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int currentPage = Integer.parseInt(request.getParameter("currentPage")); // 当前页数
int pageSize = Integer.parseInt(request.getParameter("pageSize")); // 每页记录数
String name = request.getParameter("name"); // 查询条件:姓名
String gender = request.getParameter("gender"); // 查询条件:性别
StudentDao dao = new StudentDao();
List<Student> students = dao.findStudents(name, gender, currentPage, pageSize); // 调用 DAO 层进行查询
int totalCount = dao.getTotalCount(name, gender); // 获取总记录数
int totalPage = (totalCount + pageSize - 1) / pageSize; // 计算总页数
// 将查询结果和分页信息封装成一个 JavaBean 对象,并存储到 request 中
PageBean pageBean = new PageBean();
pageBean.setCurrentPage(currentPage);
pageBean.setPageSize(pageSize);
pageBean.setTotalCount(totalCount);
pageBean.setTotalPage(totalPage);
pageBean.setStudents(students);
request.setAttribute("pageBean", pageBean);
// 转发到结果页面进行展示
request.getRequestDispatcher("/result.jsp").forward(request, response);
}
}
// 在 DAO 层中实现分页查询功能
public class StudentDao {
public List<Student> findStudents(String name, String gender, int currentPage, int pageSize) {
List<Student> students = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection(); // 获取数据库连接
String sql = "SELECT * FROM student WHERE 1=1";
if (name != null && !"".equals(name.trim())) {
sql += " AND name LIKE ?";
}
if (gender != null && !"".equals(gender.trim())) {
sql += " AND gender = ?";
}
sql += " LIMIT ?, ?";
pstmt = conn.prepareStatement(sql);
int index = 1;
if (name != null && !"".equals(name.trim())) {
pstmt.setString(index++, "%" + name + "%");
}
if (gender != null && !"".equals(gender.trim())) {
pstmt.setString(index++, gender);
}
pstmt.setInt(index++, (currentPage - 1) * pageSize);
pstmt.setInt(index++, pageSize);
rs = pstmt.executeQuery();
while (rs.next()) {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setGender(rs.getString("gender"));
student.setAge(rs.getInt("age"));
students.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, pstmt, conn); // 释放资源
}
return students;
}
public int getTotalCount(String name, String gender) {
int totalCount = 0;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection(); // 获取数据库连接
String sql = "SELECT COUNT(*) FROM student WHERE 1=1";
if (name != null && !"".equals(name.trim())) {
sql += " AND name LIKE ?";
}
if (gender != null && !"".equals(gender.trim())) {
sql += " AND gender = ?";
}
pstmt = conn.prepareStatement(sql);
int index = 1;
if (name != null && !"".equals(name.trim())) {
pstmt.setString(index++, "%" + name + "%");
}
if (gender != null && !"".equals(gender.trim())) {
pstmt.setString(index++, gender);
}
rs = pstmt.executeQuery();
if (rs.next()) {
totalCount = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, pstmt, conn); // 释放资源
}
return totalCount;
}
}
// 封装分页信息和查询结果的 JavaBean
public class PageBean {
private int currentPage; // 当前页数
private int pageSize; // 每页记录数
private int totalCount; // 总记录数
private int totalPage; // 总页数
private List<Student> students; // 查询结果
// 省略 getter 和 setter 方法
}
```
在上面的示例代码中,我们使用了一个名为 PageBean 的 JavaBean 来封装分页信息和查询结果。在 DAO 层中,我们分别实现了 findStudents() 方法和 getTotalCount() 方法来进行分页查询。在 Servlet 中,我们接收用户提交的查询请求,然后调用 DAO 层进行查询,并将查询结果和分页信息封装成一个 PageBean 对象,最后转发到结果页面进行展示。
阅读全文