分页显示发布的消息形成消息列表1.首先创建分页的javabean来装载分页的属性设置
在com.congbbs.javabean创建pageBean对象:
package com.congbbs.javabean; public class PageBean { private int currPage; //当前页数 private int pageSize; //当前显示的记录数 private int totalCount; //总记录数 private int tatalPage; //总页数 public PageBean(){ //无参构造方法 } public PageBean(int currPage, int pageSize, int totalCount, int tatalPage) { //有参构造方法 this.currPage = currPage; this.pageSize = pageSize; this.totalCount = totalCount; this.tatalPage = tatalPage; } //相应的set和get方法 public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTatalPage() { return tatalPage; } public void setTatalPage(int tatalPage) { this.tatalPage = tatalPage; } }
分页的思想:通过(mysql的limit语句) 设置查询起点和要查询的记录数将相应的数据从数据库中查询出来,然后再页面上一页页展现出来
要查询出有多少页的数据当然的前提是要计算出有多少记录数啦(总页数 = 总数据记录数/每页记录数)
总记录数通过查询数据库可以得出, 每页记录数由自己设定 , 当前页由页面传递过来
在上一篇的messageDao中加入相应的方法,在messageDaoImple中对方法进行实现:
package com.congbbs.dao; import java.util.List; import com.congbbs.javabean.Message; import com.congbbs.javabean.PageBean; public interface MessageDao { //添加消息 public void addMessage(Message message); //分页查询记录数 public List<Message> findAllMessage(PageBean pageBean); //获得总记录数 public int findAllCount(); }
package com.congbbs.dao.imple; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import com.congbbs.dao.MessageDao; import com.congbbs.javabean.Message; import com.congbbs.javabean.PageBean; import com.congbbs.util.DbConn; public class MessageDaoImpl implements MessageDao { //插入一条消息 @Override public void addMessage(Message message) { //通过工具类获得数据库的链接 Connection conn = DbConn.getConnection(); //编写sql语句 String sql = "insert into tb_message(messageTitle, messageContent,userID, publishTime)"+ "values(?,?,?,?)"; PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); //将传过来的数据对应装配到sql语句中 ps.setString(1, message.getMessageTitle()); ps.setString(2, message.getMessageContent()); ps.setInt(3, message.getUserID()); ps.setTimestamp(4, new Timestamp(message.getPublishTime().getTime())); // 获取当前操作的时间 ps.execute(); //将数据提交到数据库中 } catch (Exception e) { e.printStackTrace(); }finally { //关闭相应的数据连接对象 DbConn.close(ps); DbConn.close(conn); } } //分页查询数据库中的记录 @Override public List<Message> findAllMessage(PageBean pageBean) { Connection conn = DbConn.getConnection(); //将消息按发布时间时间进行排序并分页查询出来 String findSQL = "select * from tb_message order by publishTime desc limit ?,?"; PreparedStatement ps = null; ResultSet rs = null; int pageBegin = (pageBean.getCurrPage()-1)*pageBean.getPageSize(); //计算每页相应的查询起点 List<Message> list = new ArrayList<Message>(); try { ps = conn.prepareStatement(findSQL); ps.setInt(1, pageBegin); //设置查询的的起点 ps.setInt(2, pageBean.getPageSize()); //设置查询的每页记录数 rs = ps.executeQuery(); //执行查询返回结果集 while(rs.next()){ //将查询到的数据装配到对象中 Message message = new Message(); message.setMessageID(rs.getInt(1)); message.setMessageTitle(rs.getString(2)); message.setMessageContent(rs.getString(3)); message.setUserID(rs.getInt(4)); message.setPublishTime(rs.getDate(5)); list.add(message); //将数据对象装配进list列表中 } } catch (Exception e) { e.printStackTrace(); }finally { DbConn.close(rs); DbConn.close(ps); DbConn.close(conn); } return list; } //查询总记录数 @Override public int findAllCount() { Connection conn = DbConn.getConnection(); //获得数据库连接 String sql = "select count(*) from tb_message"; int count = 0; //定义一个计数变量 PreparedStatement ps = null; ResultSet rs = null; try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(); if(rs.next()){ count = rs.getInt(1); //将查询出来的记录数赋给count } } catch (Exception e) { e.printStackTrace(); }finally { DbConn.close(rs); DbConn.close(ps); DbConn.close(conn); } return count; } }
在com.congbbs.test中编写方法进行测试:
@org.junit.Test public void testMessage(){ MessageDao messageDao = MessageDaoFactory.getMessageDaoInstance(); int i = messageDao.findAllCount(); System.out.println("总记录数"+i); PageBean pageBean = new PageBean(1, 5, i, i/5);//查询第一页的数据,每页显示五条记录 List<Message> list=messageDao.findAllMessage(pageBean); for (Message message : list) { System.out.println(message.getMessageTitle()); // 打印消息的标题 } }
测试成功后就通过servlet来将查询到的数据转发显示在页面上
前台分页页面关键代码如下:
<div align="center"> <c:if test="${requestScope.pageBean.currPage != 1}"> <a href="GetMessageList?currPage=1">首页</a> | <a href="GetMessageList?currPage=${requestScope.pageBean.currPage-1}">上一页</a> </c:if> <c:if test="${requestScope.pageBean.currPage!=requestScope.pageBean.tatalPage}"> <a href="GetMessageList?currPage=${requestScope.pageBean.currPage+1}">下一页</a> | <a href="GetMessageList?currPage=${requestScope.pageBean.tatalPage}">尾页</a> </c:if> 当前为第${requestScope.pageBean.currPage}页,共${requestScope.pageBean.tatalPage}页 </div>
在com.congbbs.servlet中创建GetMessageList的servlet类
package com.congbbs.servlet; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.congbbs.dao.MessageDao; import com.congbbs.factory.MessageDaoFactory; import com.congbbs.javabean.Message; import com.congbbs.javabean.PageBean; public class GetMessageList extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); int currentPage = 0; //定义当前页 String currentPageStr = request.getParameter("currPage"); //从界面获取当前页 if(currentPageStr == null || "".equals(currentPageStr)){ //没有传值当前页则设置为默认的第一页 currentPage = 1; }else{ currentPage = Integer.parseInt(currentPageStr); //将获得的当前页字串转为int } MessageDao messageDao = MessageDaoFactory.getMessageDaoInstance(); //获得message业务逻辑实例 int totalCount = messageDao.findAllCount(); //查询总记录数 int totalPage = 0; int pageSize = 5; //定义每页显示的记录数 if(totalCount%pageSize == 0){ //总页数的计算方法整除无余数 totalPage = totalCount/pageSize; //直接设为总页数 }else{ //无法整除页数加一 totalPage = totalCount/pageSize + 1; } PageBean pageBean = new PageBean(currentPage, pageSize,totalCount, totalPage); List<Message> messages = messageDao.findAllMessage(pageBean); request.setAttribute("messages", messages); //将查询的数据传到request域中 request.setAttribute("pageBean", pageBean); //将分页信息传到request域中 ServletContext servletContext = getServletContext(); RequestDispatcher dispatcher = servletContext .getRequestDispatcher("/jsp/messageList.jsp"); //转到消息列表显示界面 dispatcher.forward(request, response); } }
到此分页的显示消息列表的功能也完成了
时间: 2024-10-25 09:24:36