1.domain层
PageInfo.java
package com.csi.domain;
import java.io.Serializable;
import java.util.List;
public class PageInfo<T> implements Serializable {
//装在分页数据
private List<T> list;
//当前页
private int currentPage;
//总页数
private int totalPage;
//每页
private int perPage;
//总记录数
private int totalRecords;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPerPage() {
return perPage;
}
public void setPerPage(int perPage) {
this.perPage = perPage;
}
public int getTotalRecords() {
return totalRecords;
}
/**
* 计算总页数
* @param totalRecords
*/
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
int num = totalRecords % perPage == 0 ? totalRecords / perPage : (totalRecords / perPage) +1;
setTotalPage(num);
}
/**
* 计算上一页
* @return
*/
public int getPreviewPage(){
return currentPage <= 1 ? 1 : currentPage-1;
}
/**
* 计算下一页
* @return
*/
public int getNextPage(){
return currentPage >= totalPage ? totalPage :currentPage+1;
}
}
2.dao层
StudentDao.java
package com.csi.dao;
import com.csi.domain.PageInfo;
import com.csi.domain.Student;
import java.sql.SQLException;
import java.util.List;
public interface StudentDao {
PageInfo<Student> list(PageInfo pageInfo) throws SQLException;
}
3.daoImpl
StudentDaoImpl
package com.csi.dao.impl;
import com.csi.dao.StudentDao;
import com.csi.domain.PageInfo;
import com.csi.domain.Student;
import com.csi.utils.JDBCUtils;
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 StudentDaoImpl extends JDBCUtils implements StudentDao {
@Override
public PageInfo<Student> list(PageInfo pageInfo) throws SQLException {
String sql = "SELECT * FROM student LIMIT ?,?";
Connection connection = this.getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1,(pageInfo.getCurrentPage()-1) * pageInfo.getPerPage());
ps.setInt(2,pageInfo.getPerPage());
ResultSet rs = ps.executeQuery();
List<Student> students =new ArrayList<>();
Student student =null;
while (rs.next()){
student =new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setTelephone(rs.getString("tel"));
students.add(student);
pageInfo.setList(students);
}
//计算总记录数
sql = "SELECT COUNT(*) FROM student";
ps = connection.prepareStatement(sql);
rs = ps.executeQuery();
int ret =0;
if (rs.next()){
ret = rs.getInt(1);
}
pageInfo.setTotalRecords(ret);
this.release(ps,connection,rs);
return pageInfo;
}
}
4.controller层
ListController.java
package com.csi.controller;
import com.csi.dao.StudentDao;
import com.csi.dao.impl.StudentDaoImpl;
import com.csi.domain.PageInfo;
import com.csi.domain.Student;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet("/ListController")
public class ListController extends HttpServlet {
@Override
/**
* 分页
*/
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码格式
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
String cno=req.getParameter("currentPage");
int currentPage = 1;
if (cno!=null){
currentPage = Integer.valueOf(cno);
}
PageInfo<Student>pageInfo =new PageInfo<>();
pageInfo.setCurrentPage(currentPage);
pageInfo.setPerPage(2);
StudentDao studentDao =new StudentDaoImpl();
try {
pageInfo = studentDao.list(pageInfo);
} catch (SQLException e) {
e.printStackTrace();
}
req.setAttribute("pageInfo",pageInfo);
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}
index.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous">
</script>
<script type="text/javascript">
$(function () {
alert(123)
alert(${pageInfo.list})
})
</script>
</head>
<body>
<div class="container">
<div class="row">
<table>
<c:forEach var="student" items="${pageInfo.list}">
<tr>
<td>${student.id}</td>
<td>${student.name}</td>
<td>${student.telephone}</td>
</tr>
</c:forEach>
</table>
<a href="/ListController?currentPage=${pageInfo.getPreviewPage()}">上一页</a>
${pageInfo.totalRecords}
<c:forEach var="i" begin="1" end="${pageInfo.totalPage}" step="1">
<a href="/ListController?currentPage=${i}">${i}</a>
</c:forEach>
<a href="/ListController?currentPage=${pageInfo.getNextPage()}">下一页</a>
</div>
</div>
</body>
</html>