jsp mysql 實現客戶端簡單分頁查詢
阿新 • • 發佈:2020-08-13
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="width: 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)
結果展示:
首頁
第四頁
跳轉成功