• bbs小项目整理(七)(消息分页展现)


    分页显示发布的消息形成消息列表

    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);
        }
    
    }

    到此分页的显示消息列表的功能也完成了

  • 相关阅读:
    浅谈线段树
    浅谈KMP
    20200729线上模拟题解
    20200727线上模拟题解
    声明
    tarjan--割点,缩点
    20201029模拟
    高精模板
    二分图--二分图的几种模型
    树的直径与树的重心
  • 原文地址:https://www.cnblogs.com/qingcong/p/5833943.html
Copyright © 2020-2023  润新知