Servlet实现分页效果

本文实例为大家分享了Servlet实现分页效果的具体代码,供大家参考,具体内容如下

分页的算法:

需要定义四个变量,它们有各自的用处
int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录

说明:

pageSize是指定,pageNow是指用户的选择。
rowCount是从表中查询得到的。
pageCount是计算出来的,该计算公式为:

if(rowCount%pageSize==0) {
 pageCount=rowCount/pageSize;
} else {
 pageCount=rowCount/pageSize+1;
}

如果使用语句:select 字段名列表 from 表名 where id between ? and ?
这个sql语句确实比较快,但是存在一个问题,即如果表的id被删除了,那么某页可能就会少一条记录。

因此,最终方法是如下语句:
select top pageSize 字段名列表 from 表名 where id not in(select top pageSize*(pageNow-1) id from 表名)

实现代码为:

import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class fenye extends HttpServlet{
 public void doGet(HttpServletRequest req,HttpServletResponse res)
  {
    Connection ct=null;
    PreparedStatement ps=null;
    ResultSet rs=null; 

    int pageSize=3; //希望每页显示记录的条数
       int pageNow=1;  //初始化当前页为第一页
       int pageCount=0; //总页数,需要通过计算得知
       int rowCount=0; //记录总数,查表获知
       String sPageNow=req.getParameter("pageNow"); //接收传递过来的当前页面
      if(sPageNow!=null) //若接收到非空值,将其转为整数
       {
          pageNow=Integer.parseInt(sPageNow);
      } 

  try{
         PrintWriter pw=res.getWriter();
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Students","sa","密码");
      ps=ct.prepareStatement("select count(*) from [Students].[dbo].[Students]"); //获取表中记录总数
      rs=ps.executeQuery();
      while(rs.next())
      {
        rowCount=rs.getInt(1); //获取表中记录总数
      }
      if(rowCount%pageSize==0)  //计算总页面数
      {
        pageCount=rowCount/pageSize;
      }
      else
      {
        pageCount=rowCount/pageSize+1;
      } 

 ps=ct.prepareStatement("select top "+pageSize+" * from [Students].[dbo].[Students] where id not in(select top "+pageSize*(pageNow-1)+" id from [Students].[dbo].[Students])"); 

    rs=ps.executeQuery();
    pw.println("<body><center>");  //将查询结果以表的形式展现
    pw.println("<table border=1");
    pw.println("<tr><th>id</th><th>name</th><th>grade</th></tr>");
    while(rs.next())
    {
      pw.println("<tr>");
      pw.println("<td>"+rs.getInt(1)+"</td>");
      pw.println("<td>"+rs.getString(2)+"</td>");
      pw.println("<td>"+rs.getString(3)+"</td>");
      pw.println("</tr>");
    }
    pw.println("</table>");
    if(pageNow==1)  //前一页超链接,当已经跳转到第一页时,页面不再改变
    {
      pw.println("<a href=fenye?pageNow="+pageNow+">"+"forward"+"</a>");
    }
    else   //未跳转到第一页时,每点击一次超链接,页面向前跳转一次
    {
      pw.println("<a href=fenye?pageNow="+(pageNow-1)+">"+"forward"+"</a>");
    }
    if(pageCount<=5) //控制显示页数超链接的个数
    {
      for(int i=1;i<=pageCount;i++)
       {
      pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
       }
    }else if(pageCount-pageNow<=5)
    {
      for(int i=pageNow;i<=pageCount;i++)
      pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
    }else //当页面数过多时,为了页面美观需要控制显示超链接个数
    {
      for(int i=pageNow;i<=pageNow+5;i++)
        pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
    } 

    if(pageNow==pageCount) //已经为最后一页时,点击后一页不再跳转
     {
       pw.println("<a href=fenye?pageNow="+pageNow+">"+"backward"+"</a>");
    }
    else
    {
      pw.println("<a href=fenye?pageNow="+(pageNow+1)+">"+"backward"+"</a>");
    }
    pw.println("</center></body>");
    }catch(Exception ex){
      ex.printStackTrace();
    } 

  } 

 public void doPost(HttpServletRequest req,HttpServletResponse res)
  {
  this.doGet(req,res);
  }
}

执行结果:

当每页显示记录数为3时:

点击相应连接可以成功跳转。

最后一页显示为:

对应代码:

if(pageCount<=5)
  {
    for(int i=1;i<=pageCount;i++)
     {
    pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
     }
  }

点击backward不再跳转。

为了显示程序控制页数超链接数目的效果如何,将每页显示记录数改为1。

第一页显示效果:

对应代码:

else
    {
      for(int i=pageNow;i<=pageNow+5;i++)
        pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
    }

当前页码逐渐增大时的显示效果:

对应代码:

 else if(pageCount-pageNow<=5)
    {
      for(int i=pageNow;i<=pageCount;i++)
      pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • jsp servlet javaBean后台分页实例代码解析
  • javabean servlet jsp实现分页功能代码解析
  • jsp+servlet+javabean实现数据分页方法完整实例
  • servlet分页代码示例
(0)

相关推荐

  • servlet分页代码示例

    1.首先创建一个对象 UserData,用以保存从数据库中获取的数据. 复制代码 代码如下: package com.tool; import java.math.BigDecimal;import java.util.Date; /** * Created by lx_sunwei on 14-1-6. */public class UserData { /**     * EMP表中的数据属性     */    private String ename;    private String

  • javabean servlet jsp实现分页功能代码解析

    前端实现用ligerUI实现分页,感觉用框架确实简单,闲着无聊,模拟着liger的分页界面实现了一遍(只要是功能,样式什么无视) 这里用基础的三层架构+servlet+jsp实现,思路很简单,把所有分页相关信息写入到一个pagebean类里面,service返回这个bean类,每次分页查询时都从该bean里查找信息.只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等 这是ligerUI实现的分页样式(实现过程我的上一篇博客有写:http://www.j

  • jsp servlet javaBean后台分页实例代码解析

    首先后台分页需要理清分页思路,把数据库里面需要分页的信息放到List集合中,然后按照页面反馈给后台的页码对List集合进行SubList切割把切完的List传到前端进行显示. 1.分页的demo文件结构图 导入的包 2.代码 SplitPageServlet代码 package ActionServlet; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import ja

  • jsp+servlet+javabean实现数据分页方法完整实例

    本文实例讲述了jsp+servlet+javabean实现数据分页方法.分享给大家供大家参考,具体如下: 这里秉着且行且记的心态,记录下学习过程,学得快忘得快,生怕遗忘,以备日后使用. 用到的部分代码是自己在网上查找,并自己修改,加上自己的理解.也不知道算不算原创,只做自己学习记录. 使用相关:PostgreSQL数据库.dom4j.JSP.Servlet 一.首先是工程格局,来个全局视图方便读者与自己查看与使用 思路为: 以config.xml文件记录配置信息,以方便数据库更改,方便移植与重用

  • Servlet实现分页效果

    本文实例为大家分享了Servlet实现分页效果的具体代码,供大家参考,具体内容如下 分页的算法: 需要定义四个变量,它们有各自的用处 int pageSize:每页显示多少条记录 int pageNow:希望显示第几页 int pageCount:一共有多少页 int rowCount:一共有多少条记录 说明: pageSize是指定,pageNow是指用户的选择. rowCount是从表中查询得到的. pageCount是计算出来的,该计算公式为: if(rowCount%pageSize==

  • mybatis分页效果实现代码

    本文为大家分享了mybatis分页效果展示的具体代码,供大家参考,具体内容如下 mybatis版本3.4以下 结构: spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org

  • 使用Mybatis实现分页效果示例

    一.创建分页的工具类PageUti,存储分页所需要的五个数据:pageIndex(当前页码),pageSize(每页记录条数),count(总记录数),pageNum(总页数),list(每一页的内容). /** * @param <T> 泛型类 */ public class PageUtil<T> { //当前页码 private int pageIndex; //每页记录数 private int pageSize; //总记录数 private int count; //总

  • 基于vue实现分页效果

    本文实例为大家分享了vue实现分页效果展示的具体代码,供大家参考,具体内容如下 <!doctype html> <html> <head> <meta charset="UTF-8"> <title>分页练习</title> <script src="js/vue.js"></script> </head> <style> .isList{ lis

  • python实现分页效果

    本文实例为大家分享了python实现分页效果展示的具体代码,供大家参考,具体内容如下 难点:清空Layout #!/usr/bin/python #-*-coding:utf-8-*- from PyQt4.QtCore import * from PyQt4.QtGui import * class PageWidget(QWidget): def __init__(self,parent=None): super(PageWidget,self).__init__(parent) self.

  • Vue form 表单提交+ajax异步请求+分页效果

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta charset="UTF-

  • 简单实现Ajax无刷新分页效果

    Ajax无刷新分页效果,如下代码实现 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax无刷新分页效果</title> <script type="text/javascript"> function showpage(url) { var xhr = new XML

  • NodeJS和BootStrap分页效果的实现代码

    1.数据处理 首先在动态js中,根据url参数获取数据库文档的数量,设置分页的大小,获取当前页面的数据,然后将文档数量pagecount,分页大小pagesize,以及当前页面currentpage传递到页面中. 2.处理分页效果 我采用的是JavaScript动态生成的,你也可以利用ejs支持函数的特性将其封装后生成html形式的分页. 首先,添加分页ul,在你的页面中需要显示的位置添加代码: <ul class="pagination" id="pagination

  • JS+CSS实现的拖动分页效果实例

    本文实例讲述了JS+CSS实现拖动分页效果的方法.分享给大家供大家参考.具体实现方法如下: <html> <head> <title>拖动分页</title> <meta http-equiv=Content-Type content="text/html; charset=utf-8"> <style> body{ border:0px; margin:0px; overflow:hidden; backgrou

  • JS实现table表格数据排序功能(可支持动态数据+分页效果)

    asp.net会经常遇到分页的效果,尤其是希望实现静态的html分页排序(html分页相信大家都已经有自己的解决方案.在这里就不多说).我写了一个简单的Demo排序. 数据就是字母和数字两组.(汉字需要找到asc码) 原理就是利用数组自带的sort排序,进行表格重组.已在.net mvc 中测试过.支持分页.(申明一点.只对当前页面数据排序 无刷新,对所有页面排序的话,肯定需要刷新.这点我还在解决中.)希望有新想法的高手们,给下指点. 下面把html的代码贴出来: <!DOCTYPE HTML

随机推荐