前面写了Servlet(一)到(五),主要是在网上搜罗的视频、对分页这块还是不太清楚。于是有找到一些视频,重新学习了一下。主要是对分页的认识和设计思路。也是为了方便我以后回忆一下。。

一、分页常识

pageSize //每页有多少条记录 --用户设定

rowCount //一共有多少条记录 --从数据库中查的

pageIndex //当前查看的是第几页 --用户选择的

beginRow //从第几行开始查询 --计算得到 pageSize*(pageIndex-1)

pageCount //总共有多少页 --计算

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

二、PageInfo 类

public class PageInfo {
private int pageSize; // 页面大小
private int pageCount; // 页面总数
private int pageIndex; // 当前页
private int beginRow; // 开始页
private int rowCount; // 总条数 private boolean hasNext; // 是否有后一页
private boolean hasPre; // 是否有前一页 public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getPageCount() {
return pageCount;
} public void setPageCount(int pageCount) {
this.pageCount = pageCount;
} public int getPageIndex() {
return pageIndex;
} public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
} public int getBeginRow() {
return beginRow;
} public void setBeginRow(int beginRow) {
this.beginRow = beginRow;
} public int getRowCount() {
return rowCount;
} public void setRowCount(int rowCount) {
this.rowCount = rowCount;
} public boolean isHasNext() {
return hasNext;
} public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
} public boolean isHasPre() {
return hasPre;
} public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
} }

三、分页工具类

public class PageUtil {

        public static PageInfo getPageInfo(int pageSize, int rowCount, int pageIndex) {
PageInfo p=new PageInfo();
pageSize=getPageSize(pageSize);
p.setPageSize(pageSize);
p.setRowCount(rowCount);
p.setPageCount(getPageCount(pageSize,rowCount));
p.setBeginRow(getBeginRow(pageSize,pageIndex));
p.setHasNext(isHasNext(pageIndex,getPageCount(pageSize,rowCount)));
p.setHasPre(isHasPre(pageIndex));
p.setPageIndex(pageIndex);
return p;
} //判断当是否有前一页
private static boolean isHasPre(int pageIndex) {
if(pageIndex==1){
return false;
}
else {
return true;
}
} //判断是不是有下一页
private static boolean isHasNext(int pageIndex, int pageCount) {
if(pageIndex==pageCount||pageCount==0){
return false;
}
else{
return true;
}
} //计算从第几行开始查询
private static int getBeginRow(int pageSize, int pageIndex) {
return pageSize*(pageIndex-1);
} //计算页的总数
private static int getPageCount(int pageSize, int rowCount) {
if(rowCount%pageSize==0){
return rowCount/pageSize;
}
else{
return rowCount/pageSize+1;
}
} //返回pageSize
private static int getPageSize(int pageSize) {
return pageSize==0?10:pageSize;
} }

四、页面

<script type="text/javascript">
function subForm(){
//form1.action="AdminServlet?flag=manage";
form1.submit();
}
</script> <body> <form action ="AdminServlet" method="post" name="form1">
<input type="hidden" name=flag value="manage" />
<table width=80% border=1 cellspacing=0s>
<c:forEach var="u" items="${adminList}">
<tr>
<td>${u.id }</td>
<td>${u.userName }</td>
<td>${u.password }</td>
<td>${u.note }</td>
<td><a href="admin/admin_edit.jsp?id=${u.id }" >修改</a> | <a onclick="return confirm('确定要删除吗?')"
href="AdminServlet?flag=del&id=${u.id }" >删除</a></td>
</tr>
</c:forEach>
</table> 共有 ${ pageInfo.rowCount} 条记录,当前第 ${ pageInfo.pageIndex} 页, 共 ${ pageInfo.pageCount}页 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<c:choose>
<c:when test="${pageInfo.hasPre }">
<a href="AdminServlet?flag=manage&pageIndex=1" >首页</a>
<a href="AdminServlet?flag=manage&pageIndex=${pageInfo.pageIndex-1 }" >前一页 </a>
</c:when>
<c:otherwise>
首页 前一页
</c:otherwise>
</c:choose> <c:choose>
<c:when test="${pageInfo.hasNext }">
<a href="AdminServlet?flag=manage&pageIndex=${pageInfo.pageIndex+1 }" >下一页</a>
<a href="AdminServlet?flag=manage&pageIndex=${pageInfo.pageCount }" >尾页 </a>
</c:when>
<c:otherwise>
下一页 尾页
</c:otherwise>
</c:choose> <a href="javascript:subForm()" >转到</a> 第 <input type="text" name="pageIndex" value=${pageInfo.pageIndex }> 页 </form>

五、控制层

private void manage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        int pageSize=4;
int rowCount=_dao.getUserCount(); String pageIndexStr=request.getParameter("pageIndex");
int pageIndex=1;
if(!StrUtil.isNullOrEmpty(pageIndexStr)){
pageIndex=Integer.parseInt(pageIndexStr);
} PageInfo pageInfo=PageUtil.getPageInfo(pageSize,rowCount,pageIndex); List<UserInfo> adminList=_dao.getUserList(pageInfo); request.setAttribute("adminList", adminList);
request.setAttribute("pageInfo", pageInfo); request.getRequestDispatcher("/admin/admin_manage.jsp").forward(request, response);
}

Java基础——Servlet(六)分页相关的更多相关文章

  1. Java实习生常规技术面试题每日十题Java基础(六)

    目录 1.在Java语言,怎么理解goto. 2.请描述一下Java 5有哪些新特性? 3.Java 6新特性有哪些. 4.Java 7 新特性有哪些. 5.Java 8 新特性有哪些. 6.描述Ja ...

  2. Java基础——Servlet

    什么是Servlet Servlet是Java Web的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l  ...

  3. Java基础——Servlet(七)过滤器&监听器 相关

    一.过滤器简介 Filter 位于客户端和请求资源之间,请求的资源可以是 Servlet Jsp html (img,javascript,css)等.用于拦截浏览器发给服务器的请求(Request) ...

  4. Java基础——Servlet(一)

    在学习Servlet之前,需要首先学习一些关联性的知识. 一.动态网页程序 动态网页:它是网页中的偏功能性的部分也是最重要的部分.它不是我们平时所看见的页面特效,展示的效果.而是,一种交互行为.比如, ...

  5. Java基础——Servlet(八)文件上传下载

    一.简单的文件上传常见的组件Smartupload , Apache 的 commons FileUploadSmartupload上传的步骤: 1.初始化上传上下文 2.准备上传 3.保存文件 &l ...

  6. java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问

    本文将详解 equals()与hashCode()方法 概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) publi ...

  7. Java基础——Servlet(五)

    哈哈哈...学习Servlet学了半个多月,因为中间有比较灰心的时候,有几天是啥都不学了的状态,看了好几部励志的电影.呃~还是得继续吧.本来计划是好好夯实这里的基础,结果在网找到了介绍比较全面的视频, ...

  8. Java基础--常用API--日期相关API

    一.java.util.Date 1.只用于显示系统时间,其大部分操作由Calendar代替. 格林威治时间(GMT):指的是1970年1月1日0时,不同地区有时间差. 默认输出格式:星期.月.日.时 ...

  9. Java基础--常用API--IO流相关API

    一.IO流 1.定义: IO流指的是Input/Output流,即输入流/输出流. 输入流:将外界信息写入程序,即从外界获取信息,属于读操作. 输出流:将程序数据发送给外界,即向外界传输数据,属于写操 ...

随机推荐

  1. wpf 导出Excel

    private void Button_Click_1(object sender, RoutedEventArgs e) { ExportDataGridSaveAs(true, this.data ...

  2. jQuery ajax 302跨域

    一.ajax 302 ajax用于异步获取服务器数据,但是某天有这么一个使用场景: > 基于安全考虑,登录的用户的信息失效时,系统的所有ajax接口都由服务器直接重定向到系统的登录页面,此时登录 ...

  3. UCore-Lab0

    日期:2019/3/31 内容:UCore-Lab0 一.UCore实验 实验 说明 关键词 Lab1 bootloader的实现 中断 Lab2 物理内存管理 x86分段/分页模式 Lab3 虚拟内 ...

  4. [学习笔记]状压dp

    状压 \(dp\) 1.[SDOI2009]Bill的挑战 \(f[i][j]\) 表示匹配到字符串的第 \(i\) 位状态为 \(j\) 的方案数 那么方程就很明显了,每次枚举第 \(i\) 位的字 ...

  5. 01_python_初始python

    一.初始python python是一门解释型语言,弱类型语言 / python解释器最为常用的是cpython(官方) 弱类型语言:   a = 1 a = 'alex'   #说明变量a既可以是整 ...

  6. elasticsearch插件一head插件安装详解

    elasticsearch-head是一个用来浏览.与Elastic Search簇进行交互的web前端展示插件. elasticsearch-head插件主要用途: elasticsearch主要有 ...

  7. Vue.js 和 MVVM 的小细节

    Vue.js 和 MVVM 的小细节 转载 作者:流云诸葛 链接:www.cnblogs.com/lyzg/p/6067766.html MVVM 是Model-View-ViewModel 的缩写, ...

  8. html-文件上传设置accept类型延时问题

       今天在做文件上传时,采用了jQuery的upload插件,使用过程中发现了一个很有意思也很头疼的问题. 上传按钮,第一次点击时瞬间就可以打开文件选择框,之后再点击则需要等待恐怖的8s以上. 百度 ...

  9. 剑指offer一之二维数组中的查找

    一.题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.解答方法: 方法 ...

  10. (转)CentOS7安装Nginx1.14.2

    原文:https://blog.csdn.net/zhyfyz/article/details/84957381 https://blog.csdn.net/q85795362/article/det ...