分页
public class Page { private int everyPage;//每页显示的记录数 private int totalCount;//总记录数 private int totalPage;//总页数 private int nowPage;//当前页 private int beginIndex;//查询起始点 private boolean hasPrePage;//是否有上一页 private boolean hasNextPage;//是否有下一页 public Page(int everyPage, int totalCount, int totalPage, int nowPage, int beginIndex, boolean hasPrePage, boolean hasNextPage) { super(); this.everyPage = everyPage; this.totalCount = totalCount; this.totalPage = totalPage; this.nowPage = nowPage; this.beginIndex = beginIndex; this.hasPrePage = hasPrePage; this.hasNextPage = hasNextPage; } public Page(){};//默认构造 get..set方法 }
定义工具PageUtil类
public class pageUtil { public static Page createPage(int everyPage,int totalCount,int nowPage) { everyPage=geteveryPage(everyPage); nowPage=getnowPage(nowPage); int totalPage=gettotalPage(totalCount, everyPage); int beginIndex=getBeginIndex(everyPage, nowPage); boolean hasPrePage=gethasPrePage(nowPage); boolean hasNextPage=gethasNextPage(nowPage, totalPage); return new Page(everyPage, totalCount, totalPage, nowPage, beginIndex, hasPrePage, hasNextPage); } public static int geteveryPage(int everyPage) { return everyPage==0?10:everyPage; //获取每页显示的记录数 } public static int gettotalPage(int totalCount,int everyPage) { int totalPage=0; if(totalCount!=0&&totalCount%everyPage==0)totalPage= totalCount/everyPage;//获取总页数 if(totalCount!=0&&totalCount%everyPage!=0)totalPage= totalCount/everyPage+1; return totalPage; } public static int getnowPage(int nowPage) { return nowPage==0?1:nowPage; } public static int getBeginIndex(int everyPage,int nowPage) { return everyPage*(nowPage-1); //获取起始位置 } public static boolean gethasPrePage(int nowPage) { return nowPage==1?false:true; } public static boolean gethasNextPage(int nowPage,int totalPage) { return nowPage==totalPage||totalPage==0?false:true; } }
DAO层 查找总记录条数方法 和查询所有记录
public List<Message> findAllMsg(Page page) { Connection conn= DBConnection.getConnection(); String findAllMsgSQL="select * from tb_message order by publishTime desc limit ?, ?"; PreparedStatement pst = null; ResultSet rs = null; List <Message> list =new ArrayList<Message>(); try { pst=conn.prepareStatement(findAllMsgSQL); pst.setInt(1, page.getBeginIndex()); pst.setInt(2, page.getEveryPage()); rs=pst.executeQuery(); while(rs.next()) { Message message =new Message(); message.setMessageID(rs.getInt(1)); message.setMessageTitle(rs.getString(2)); message.setMessageContent(rs.getString(3)); message.setEmployeeID(rs.getInt(4)); message.setPublishTime(rs.getDate(5)); list.add(message); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DBConnection.close(rs); DBConnection.close(pst); DBConnection.close(conn); } return list; } public int findMsgCount() { Connection conn= DBConnection.getConnection(); PreparedStatement pst =null; ResultSet rs = null; int count = 0; String saveMsgSQL="select count(*) from tb_message"; try { pst=conn.prepareStatement(saveMsgSQL); rs=pst.executeQuery(); if(rs.next()) { count=rs.getInt(1); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return count; }
servlet action
public class FindAllMsg extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); int nowpage=0; String nowpageStr= request.getParameter("nowpage");//获取当前页 if(nowpageStr==null||"".equals(nowpageStr)) { nowpage=1; } else { nowpage=Integer.parseInt(nowpageStr); } IMessageDao MessageDaoImpl= MessageDaoFactory.getMessageDaoInstance(); Page page=pageUtil.createPage(5, MessageDaoImpl.findMsgCount(), nowpage); List<Message> list= MessageDaoImpl.findAllMsg(page); request.setAttribute("msgList", list); request.setAttribute("page", page); ServletContext servletContext =getServletContext(); RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/msgList.jsp"); dispatcher.forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } public class GetMessage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int messageId=Integer.parseInt(request.getParameter("messageID")); IMessageDao messageDao = MessageDaoFactory.getMessageDaoInstance(); Message onemessage = messageDao.findById(messageId); request.setAttribute("onemessage", onemessage); ServletContext servletContext =getServletContext(); RequestDispatcher dispatcher =servletContext.getRequestDispatcher("/showMsg.jsp"); dispatcher.forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
jsp 页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>消息列表</title> </head> <body> <c:forEach var="msg" items="${requestScope.msgList}" > <dt> <a href="GetMessage?messageID=${msg.messageID}" > ${msg.messageTitle } </a></dt> <dd> <div align="center" > 发布人ID :${msg.employeeID} 发布时间 :${msg.publishTime } </div> </dd> </c:forEach> <div align="center"> <c:choose> <c:when test="${page.hasPrePage}"> <a href="FindAllMsg?nowpage=${page.nowPage - page.nowPage+1 }">首页</a>丨 <a href="FindAllMsg?nowpage=${page.nowPage-1 }">上一页</a>丨 <a>当前为第${page.nowPage }页</a>丨 </c:when> <c:otherwise> 首页 丨上一页 丨当前为第${page.nowPage }页丨 </c:otherwise> </c:choose> <c:choose> <c:when test="${page.hasNextPage}"> <a href="FindAllMsg?nowpage=${page.nowPage+1} ">下一页</a>丨 <a href="FindAllMsg?nowpage=${page.totalPage} " > 尾页</a> </c:when> <c:otherwise> 下一页丨 尾页 </c:otherwise> </c:choose> 丨 共${page.totalPage}页 丨 </div> </body> </html>
粗略的实现分页