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

}

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

时间: 2024-08-25 16:46:47

bbs小项目整理(七)(消息分页展现)的相关文章

bbs小项目整理(一)(界面整理篇)

1.首先讲解一下这个小项目要实现的工能 ①在登录界面实现简单的用户输入验证,使用验证码放置恶意注册 ②在登录成功后能在首页左侧显示用户的一些信息,在右侧显示最新的五条消息 ③之后可以根据导航条选择查看更多消息 ④发布消息的界面 ⑤点击消息标题进入查看详细消息界面 ⑥在查看详细消息界面的下方提供用户回复 总结以上就是要实现的几个功能界面了(PS:前端技术有限,只能编写一些简单的界面 ^_^!!) 下面的系列就是对这些小功能,小模块的实现整理(刚入门的小菜鸟一枚,大神轻喷,主要整理自己学习的一些小东

bbs小项目整理(二)(编码前的一些准备工作)

1 首先是我们的数据库,我们的所有数据的保存在了数据库中,实现项目的过程就是对我们的数据库的数据进行(提取数据库中的数据——>传递——>展现) 当然了也有界面反馈回来的数据信息要存入数据库了( 页面反馈的数据——>传递——>存储到数据库) 来看看我们的数据库吧 CREATE TABLE `tb_message` ( `messageID` int(11) NOT NULL AUTO_INCREMENT, /*消息主键id,自增 */ `messageTitle` varchar(5

bbs小项目整理(八)(总结、源码分享)

前面的几个模块基本上完成了,剩下的几个模块操作过程基本相似. 这里就不在赘述了:直接上源代码吧. 百度网盘:链接:http://pan.baidu.com/s/1b6UaGA 密码:s1di GItHub地址:https://github.com/liyucc/-BBS 操作:输入网址-->点击右侧的Clone or download-->点击Download zip就可以完整的下载了 总结:项目主要采用的是一些比较基本的技术:servlet/jsp.jdbc等,主要目的是加深一些对这些技术的

bbs小项目整理(三)(编码。。。。)

1 创建连接数据的工具类,方便我们对数据库的操作,采用jdbc连接数据库当然首先要导入我们的数据库驱动jar(切记) 下面是我们连接数据哭的工具类,放在com.congbbs.util包下:(数据库采用mysql数据库) 1 package com.congbbs.util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import

一个基于TCP/IP的小项目,实现广播消息的功能。(超详细版)

1.结合现状 功能分析 该功能基于上个项目的改进,主要是通过对服务器端代码的修改,以及对客户端作少许修改,实现开启多客户端时,一个客户端发送消息,达到对所有客户端广播的效果.可参考网吧里的点歌系统,比如某某用户在网吧点了一首歌,其他用户电脑的左下角都会弹出一个某某用户点了一首七里香,或者游戏里面的频道聊天,每个人发完消息后,聊天室里的人都知道你发的消息了,就像下图一样,这也正是做这个功能的初衷吧. 2.图说代码 代码细说: 服务器里面定义了两个字段,一个用于服务器与客户端的连接,另一个目的在于做

基于netty4的tcp消息转发服务--外包接的一个小项目

git地址 https://git.oschina.net/cggxx/CubeBox.git 分包 tcp分包采用的格式是 消息类型两个字节 | 内容长度两个字节 | 内容 长连接 tcp长连接使用心跳保证连接 连接验证 和客户端约定验证算法,具体看代码. 这是个人接的一个小项目,现在已经上线,连接物联网用的,由于交了代码后,没拿到钱,于是就当小项目开源了.本来打算用zookeeper建立集群的,后来懒,整了一半没弄完,以后再加

Django小项目简单BBS论坛

开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用户展示 6 允许登录用户发贴.评论.点赞 7 允许上传文件 8 帖子可被置顶 9 可进行多级评论 知识必备:(注:没有必备下面知识的同学,请返回去看会之后再看下面的内容防止蒙了~~!) 1 Django 2 HTML\CSS\JS 3 BootStrap 4 Jquery 设计表结构 1.表结构重要性 在开发

Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点

开发一个简单的BBS论坛 项目需求: 1 整体参考“抽屉新热榜” + “虎嗅网” 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用户展示 6 允许登录用户发贴.评论.点赞 7 允许上传文件 8 帖子可被置顶 9 可进行多级评论 知识必备:(注:没有必备下面知识的同学,请返回去看会之后再看下面的内容防止蒙了~~!) 1 Django 2 HTML\CSS\JS 3 BootStrap 4 Jquery 设计表结构 1.表结构重要性 在开发任何项目的时候,设计到数据库,

小项目创意大集合

每个程序员都可以入手的小项目创意大集合 我经常看有人发帖问关于软件项目创意点子的事,也看到了很多回帖,我自己也回了一些常见的软件项目创意.不过我觉得只列出三两个是远远不够的,因此就收集并这个软件项目创意列表,大家要找简单的编程软件项目创意学习练手的话,可以收藏并扩散本文.这些软件项目创意并不是论文级别的,只是想抛砖引玉让大家能从中受些启发. 下面你们会看到 120 多个个软件项目创意想法,都是我通过头脑风暴得来的.我将其根据主题分成了10 个分类,但有些软件项目创意其实涵盖了不止一个主题. 更新