jsp mysql 实现客户端简单分页查询
dao.impl
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import sim.dao.StudentDao;
import sim.entity.Student;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;
public class StudentDaoImpl implements StudentDao {
private DataSource ds = new ComboPooledDataSource();
private QueryRunner qr = new QueryRunner(ds); // 必有的两句
@Override
public List<Student> selectAll(Integer currentPageNo, Integer pageSize) {
List<Student> studentList = null;
try {
String sql ="select * from user limit ?,?";
Object[] objects={(currentPageNo-1)*pageSize,pageSize}; //页面数量,页面大小
studentList = qr.query(sql,new BeanListHandler<Student>(Student.class),objects); //很多地方少写了 r currentPageNo
} catch (SQLException e) {
e.printStackTrace();
}
return studentList;
}
@Override
public Integer selectCount() {
Long count = null;
try {
String sql ="select count(1) from user"; //把 Long 写成 long
count = (Long) qr.query(sql,new ScalarHandler()); //总页数
} catch (SQLException e) {
e.printStackTrace();
}
return Integer.parseInt(count+"");
}
}
StudentServiceImpl
import sim.dao.StudentDao;
import sim.dao.StudentDaoImpl.StudentDaoImpl;
import sim.entity.Student;
import sim.service.StudentService;
import java.util.List;
public class StudentServiceImpl implements StudentService {
private StudentDao studentDao = new StudentDaoImpl(); //必有的实例
@Override
public List<Student> selectAll(Integer currentPageNo, Integer pageSize) { //
return studentDao.selectAll(currentPageNo,pageSize);
}
@Override
public Integer selectCount() {
return studentDao.selectCount();
}
}
servlet
import sim.Utils.PageUtils;
import sim.entity.Student;
import sim.service.StudentService;
import sim.service.StudentServiceImpl.StudentServiceImpl;
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.util.List;
@WebServlet(name = "studentServlet" ,urlPatterns = "/studentServlet")
public class StudentServlet extends HttpServlet {
private StudentService studentService; //一定有的一句
@Override
public void init() throws ServletException {
studentService = new StudentServiceImpl(); //一定有的一句
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String currentPageNoStr = req.getParameter("currentPageNo"); //本页的当前页量
Integer currentPageNo = null;
if(currentPageNoStr ==null || currentPageNoStr==""){
currentPageNo = 1;
}else{
currentPageNo =Integer.parseInt(currentPageNoStr);
}
String pageSizeStr = req.getParameter("pageSize"); //当前页量数
Integer pageSize=null;
if(pageSizeStr ==null || pageSizeStr==""){
pageSize = 2; //无页量,则为2
}else{
pageSize =Integer.parseInt(pageSizeStr); //有页量,则传递
}
Integer totalPageCount = studentService.selectCount();
Integer totalPageSize = totalPageCount % pageSize ==0 ? totalPageCount / pageSize //为什么等于0————因为把 % 打成了 /
: totalPageCount / pageSize +1;
List<Student> studentList = studentService.selectAll(currentPageNo,pageSize);
PageUtils<Student> pageUtils = new PageUtils<>(); //数据库的名字和实体类不同,导致错误。
pageUtils.setCurrentPageNo(currentPageNo);
pageUtils.setPageSize(pageSize);
pageUtils.setTotalPageCount(totalPageCount);
pageUtils.setTotalPageSize(totalPageSize);
pageUtils.setList(studentList);
req.setAttribute("pageUtils",pageUtils);
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>分页</title>
<script src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script>
</head>
<body>
<%-- 重定向,加载两次页面(跳过第一次无数据)--%>
<% Object object = request.getAttribute("pageUtils");
if (object==null){
request.getRequestDispatcher("studentServlet").forward(request,response);
}
%>
<table border="1" width="700px" align="center">
<tr>
<td>编号</td>
<td>名字</td>
<td>年龄</td>
</tr>
<c:forEach items="${pageUtils.list}" var="student">
<tr>
<td>${student.uid}</td>
<td>${student.uname}</td>
<td>${student.uage}</td>
</tr>
</c:forEach>
</table>
<div style="margin-left: 320px">
<a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=1">首页</a>
<c:if test="${pageUtils.currentPageNo>1}">
<a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=${pageUtils.currentPageNo-1}">上一页</a>
</c:if>
<c:if test="${pageUtils.currentPageNo < pageUtils.totalPageSize}"> <%--中间的小于,是在大括号内--%>
<a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=${pageUtils.currentPageNo+1}">下一页</a>
</c:if>
<a href="${pageContext.request.contextPath}/studentServlet?currentPageNo=${pageUtils.totalPageSize}">末页</a>
<span>共有${pageUtils.totalPageCount}条</span>
<span>${pageUtils.currentPageNo}页/${pageUtils.totalPageSize}页</span>
<input type="text" id="tv_count" style=" 40px"><input type="button" value="go" id="tv_but">
</div>
<script>
$("#tv_but").click(function () {
var currentPageNo = $("#tv_count").val(); /* 获取 input 标签框的内容*/
window.location.href = "${pageContext.request.contextPath}/studentServlet?currentPageNo="+currentPageNo;
})
</script>
</body>
</html>
StudentDao (实现;定义)
Student (实现;三个变量;两构造;set get;toString)
PageUtils (五个变量;两构造;set get;toString)
结果展示:
首页
第四页
跳转成功