新闻发布系统 分页实现

实现效果图:

当点击下一页时地址变成?pageIndex =2:

因为是分页,所以可以根据分页的需求定制出页面类代码如图:

package cn.news.util;

import java.util.List;

import cn.news.entity.NewsDetail;

public class Page {
    //泛型
    private List<NewsDetail> list;

    public List<NewsDetail> getList() {
        return list;
    }
    public void setList(List<NewsDetail> list) {
        this.list = list;
    }
    public int getPageIndex() {
        return pageIndex;
    }
    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getTotalPages() {
        return totalPages;
    }
    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
    public int getTotalRecords() {
        return totalRecords;
    }
    public void setTotalRecords(int totalRecords) {
        this.totalRecords = totalRecords;
    }
    //当前页
    private int pageIndex;
    //页的大小
    private int pageSize;
    //总页数
    private int totalPages;
    //总记录数
    private int totalRecords;

}

在newsdetaildao 数据访问层编写代码:

package cn.news.dao;

import java.util.List;

import cn.news.entity.NewsDetail;

/**
 * 接口
 * @author happy
 *
 */
public interface NewsDetailDAO {
    //1.1 写一个查询所有新闻纪录的方法
  public List<NewsDetail> getAllNews() throws Exception;
  public List<NewsDetail> getOnePageNews(int pageIndex,int pageSize) throws Exception;
  public int getCount() throws Exception;
  public int login(NewsDetail news) throws Exception;
}

编写其实现类:

package cn.news.dao.imp;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import cn.news.dao.BaseDao;
import cn.news.dao.NewsDetailDAO;
import cn.news.entity.NewsDetail;

public class NewsDetailImpl extends BaseDao implements NewsDetailDAO {

    public List<NewsDetail> getAllNews() throws Exception {
        List<NewsDetail> list =new ArrayList<NewsDetail>();
        String sql ="select * from newsDetails";
        ResultSet rs = executeQuery(sql);

        if (rs!=null) {
            while(rs.next()){
                NewsDetail news=new NewsDetail();
                news.setNewsId(rs.getInt("newsId"));
                news.setNewsTitle(rs.getString("newsTitle"));
                news.setNewsContent(rs.getString("newsContent"));
                news.setNewsCreateDate(rs.getDate("newsCreateDate"));
                news.setNewsAuthor(rs.getString("newsAuthor"));
                news.setNewsCategoryId(rs.getInt("newsCategoryId"));
                list.add(news);
            }
        }
            return list;
    }
    public List<NewsDetail> getOnePageNews(int pageIndex,int pageSize) throws Exception {
        List<NewsDetail> list=new ArrayList<NewsDetail>();
        String sql ="select top "+pageSize+" * from newsDetails where newsid not in (select top "+(pageIndex-1)*pageSize+" newsid from newsDetails)";
        ResultSet rs= executeQuery(sql);
        if(rs!=null){
            while(rs.next()){
                NewsDetail news=new NewsDetail();
                news.setNewsId(rs.getInt("newsId"));
                news.setNewsTitle(rs.getString("newsTitle"));
                news.setNewsContent(rs.getString("newsContent"));
                news.setNewsCreateDate(rs.getDate("newsCreateDate"));

                news.setNewsAuthor(rs.getString("newsAuthor"));
                news.setNewsCategoryId(rs.getInt("newsCategoryId"));
                //单个新闻对象加入新闻泛型
                list.add(news);
            }
        }
        return list;
    }
    public int getCount() throws Exception {
        String sql ="select count(1) from newsDetails";
        ResultSet rs=executeQuery(sql);
        int totalRecords=0;
        if(rs!=null){
            if(rs.next()){
                totalRecords=rs.getInt(1);
            }
        }
        return totalRecords;
    }
    public int login(NewsDetail news) throws Exception {
        // TODO Auto-generated method stub
        int flag =0;
        String sql ="select count(1) from newsDetails where newsid =? and newsCategoryId=?";
        Object [] paras ={news.getNewsId(),news.getNewsCategoryId()};
            ResultSet rs =executeQuery(sql, paras);
            if(rs!=null){
                if(rs.next()){
                    flag=1;
                }
            }
        return flag;
    }

}

在servlet类中把要显示的数据给jsp页面

package cn.news.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.junit.Test;

import cn.news.dao.imp.NewsDetailImpl;
import cn.news.entity.NewsDetail;
import cn.news.util.Page;

public class newsServlet extends HttpServlet {

    /**
     * 鎴戠殑鎴戠殑
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    /**
     *浣犵殑浣犵殑
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        NewsDetailImpl dao=new NewsDetailImpl();
        try {
            Page page =new Page();
            int pageSize =3;
            page.setPageSize(pageSize);
            String temp =request.getParameter("pageIndex");
            int pageIndex ;
            if(temp!=null){
                pageIndex=Integer.parseInt(temp);
            }else{
                pageIndex=1;
            }
            page.setPageIndex(pageIndex);
            //set pagetotal
            int count =dao.getCount();
            page.setTotalRecords(count);
            int totalPages=0;
            if(count%pageSize==0){

                totalPages=count/pageSize;
            }else{
                totalPages=count/pageSize+1;
            }

            page.setTotalPages(totalPages);
            List<NewsDetail> list = dao.getOnePageNews(pageIndex, pageSize);
            page.setList(list);
            request.setAttribute("list", page);
        } catch (Exception e) {
            e.printStackTrace();
        }
        request.getRequestDispatcher("/index.jsp").forward(request, response);
    }

}

在jsp页面控制要显示的页面

 </ul>
      <ul class="classlist">
    <%
           Page page2 = (Page)request.getAttribute("list");
            //从作用域中取出一个泛型
              List<NewsDetail> list= page2.getList();
            for(NewsDetail item :list){
            //一个item就是一个新闻对象
            //item.getNewsTitle();
        %>
            <li><a href=‘newspages/news_read.jsp‘> <%=item.getNewsTitle() %> </a>
            <span> <%=item.getNewsCreateDate() %> </span></li>

       <% }

        %>
        <p align="right"> 当前页数:[<%=page2.getPageIndex() %>/<%=page2.getTotalPages() %>]&nbsp;<a href="<%=path %>/servlet/newsServlet?pageIndex=<%=page2.getPageIndex()-1 %>">上一页</a> <a href="<%=path %>/servlet/newsServlet?pageIndex=<%=page2.getPageIndex()+1 %>">下一页</a> <a href="#">末页</a> </p>
      </ul>                                                                                                    
时间: 2024-08-26 16:12:59

新闻发布系统 分页实现的相关文章

新闻发布系统&lt;分页&gt;

分页实现: 实现数据的分页显示,需要以下几个关键步骤: ①确定每页显示的总页数 ②计算显示的总页数 ③编写SQL语句 当点击下一页时地址变成?pageIndex =2: 1.创建util包,Page类,定义相关属性并进行封装: package cn.news.util; import java.util.List; import cn.news.entity.NewsDetail; public class Page { //当前页 private int pageIndex; //页面记录数

牛腩新闻发布系统——真假分页

牛腩新闻发布系统已近尾声,牛老师重磅推出真假分页作为压轴,足以见得分页的重要性.我们就一起看一下真假分页的实现以及各自的特点. 一.分页简介 当我们显示足够大的数据量时,所有数据显示在一页上,会造成不必要的麻烦,本着为用户服务的态度,我们往往采用分页显示的处理办法.分页主要分为真分页与假分页. 假分页: 从数据库一次性取出所有数据绑定到控件上,再将所有数据根据每页显示记录条数进行分页.当数据量 比较大时,这种分页方法会造成查询速度, 使用户体验度降低,但是跳页速度较快. 真分页:在执行查询操作的

牛腩新闻发布系统总结——网站发布和分页制作

牛腩新闻发布系统的视频看了将近半个月的时间,今天成功地把它发布了,哈哈.第一次看教学视频看得这么专注,都不带走思的,很不错.给小牛老师赞一个,嘿嘿! 言归正传,每学完一个阶段,最重要的就是总结,所以就允许我以倒序的形式,颗粒归仓吧! 牛腩新闻发布系统的发布 参考博文: win7下IIS的安装和配置 http://www.jb51.net/article/29787.htm VS2010网站发布详解 http://wanghaitaoboke.blog.163.com/blog/static/17

牛腩新闻发布系统-真假分页

牛腩新闻发布系统在新闻管理页面出现这么一个问题,当新闻条数非常多的时候,表格会很长,如下图,圆角矩形就会出现一个缺口.在这里就引出了分页技术. 具体解决办法如下: 1.我们首先在Web窗体源中拉入一个GridView控件,然后在设计中设置其属性.AllowPaging:True,,PageSize:5(可根据自己意愿来). <span style="font-size:18px;"><asp:GridView ID="GridView1" runa

新闻发布系统,添加新闻+++文件上传

1.新闻发布系统 2.文件上传+++ ①首先在index.jsp的界面上初始化一个表单. <body> <form enctype="multipart/form-data" action="<%=path%>/1.jsp" method="post"> 姓名:<input type="text" name="username"/> 选择文件:<inpu

安卓项目-利用Sqlite数据库,开发新闻发布系统

本教程致力于程序员可以快速的学习安卓移动端手机开发. 适合于已经习得一种编程语言的同仁. 更多志同道合,想要学习更多编程技术的大神们. 小弟不才,麻烦关注一下我的今日头条号-做全栈攻城狮. 本文章是基于上篇文章基础之上进行深入学习的.程序员带你学习安卓开发-XML文档的创建与解析 Sqlite数据库: Sqlite数据库是在安卓中使用较广泛的数据库.其为简单.轻巧的Sql类文件型数据库.因以简单的文本形式保存,所以安全性不是很高.只要拿到sqlite数据库文件就可以得到数据.所以这就决定了sql

牛腩新闻发布系统---外键约束下如何删除记录

一.为什么使用外键? 查了些资料,八个字"保持完整性.一致性",结合我之前做的重构机房收费系统,我的理解是"防止相关表中数据没有关联而变得孤立,最终导致数据冗余",得出这个结论是上次让贾丽敏帮忙点系统时候我最深刻的感受,因为我的数据库关系图中辣么多张表却没有丝毫关系-- 既然官方解释是"完整性和一致性",就先来说明一下: 对于完整性和一致性,不少人都混为一谈了. 完整性(integrity)更多是针对实际业务来说的,比如说一个职员ID,不能在一个

牛腩新闻发布系统概要

开始了B/S项目学习,第一个学习内容就是开发新闻发布系统,跟着牛腩老师的视频学习有几天了,在这个过程 中也积累了点知识,在这里把新闻发布系统的一个轮廓叙述一下了. 系统说明 1.系统的整体功能 就是能够实现后台人员添加新闻,在前台可以浏览新闻并发表评论 2.功能图 3.数据库设计图 4.建表 --建立数据库 create database newssystem --建立类别表 create table category ( id int identity(1,1) primary key, [n

牛腩新闻发布系统笔记——怎么写CSS

根据这牛腩学习敲新闻发布系统已经有一段时间了,挺佩服牛腩的,讲那么多东西,我听着也不觉得枯燥,反而有种,一不留神就会错过很多东西的感觉,所以有些地方也是重复又重复的在看. 这篇博客就总结总结小编在学习牛腩新闻发布系统的时候一些笔记.可能知识还比较原生态,but who cares.现在先提炼出来,以后慢慢的体会和升华吧. 牛腩一部分可以说是和机房相似,也是让我从.net到c#的一个过渡.中间一部分就是讲div +css了.里面的知识说多也不多的,根据不同的需求,它又有各种变形和组合,这加起来就有