前面写了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. Web 前端 注意知识点

    一.  前端使用技巧: 1. button的用法.在使用按钮时可以自由在内设置style属性,来改变形态.可以给予type=sbumit提交属性. 2. 各种使用符号: # <!--小于 大于 ...

  2. 「PKUSC2018」星际穿越(倍增)

    倍增好题啊! 我们我们预处理 \(f[x][i]\) 表示 \(x\) 点最左到达的端点,\(sum[x][i]\) 表示 \(x\) 点最左到达的端点时 \(f[x][i]\sim x\) 的答案, ...

  3. mongoose入门

    概述 像Mysql和Mongodb这样的数据库,一般都是在命令行或者工具里面进行操作,如果想在node搭建的服务器上面操作,就必须要利用特殊的模块的.其中操作Mongodb数据库需要用到mongoos ...

  4. a 便签实现 下载

    如果想通过纯前端技术实现文件下载,直接把a标签的href属性设置为文件路径即可,如下: <a href="https://cdn.shopify.com/s/files/1/1545/ ...

  5. Numpy.random中shuffle与permutation的区别(转)

    huffle与permutation的区别 函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序):区别在于shuffle直接在原来的数组上进行操作,改变原 ...

  6. 基于.Net + SqlServer的分库分表设计方案

    在说分库分表之前,先简单介绍下网站架构,这样有助于理解为何需要分库分表这种技术.因为所有的技术,大多都是因为业务的需要而产生的. 1.网站发展的第一阶段 大致架构如下,因为没有多少用户访问,所以单台服 ...

  7. C++ STL基本容器的使用(vector、list、deque、map、stack、queue)

    1.关联容器和顺序容器 C++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector.list.deque等.关联容器主要有map和set.如下图: 1.vector基本使用 #incl ...

  8. 转:TCP为什么要3次握手和4次挥手时等待2MSL、 TCP如何保证消息顺序以及可靠性到达

    关于tcp三次握手.四次挥手可以看这里:TCP与UDP的差别以及TCP三次握手.四次挥手 1.TCP为甚要3次握手? 在谢希仁著<计算机网络>第四版中讲“三次握手”的目的是“为了防止已失效 ...

  9. url最后的“/”是什么作用

    多了个尾巴 有时候,当你尝试在地址栏输入https://123/demo的时候,会发现浏览器会重定向到https://123/demo/这个地址,也就是多了个/,发生了重定向.有图为证: 上面这个图是 ...

  10. 公共技术点(Android 动画基础)

    转载地址:http://p.codekk.com/blogs/detail/559623d8d6459ae793499787 一 传统 View 动画(Tween/Frame) 1.1 Tween 动 ...