前面写了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. codefirst数据迁移技术,在保留数据库数据下实现对模型的修改并映射到数据库

    一前言 这是我的处女作,写的不好的地方还望指出共同讨论.EF的数据访问方式有三种DbFirst,ModelFirst,还有本文要提到的CodeFirst 三者都是以ORM的方式建立.本人之前学习的.n ...

  2. [leetcode.com]算法题目 - Decode Ways

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  3. C语言通过匿名管道实现反弹式CMDShell

    #pragma comment(lib,"ws2_32.lib") #ifdef _MSC_VER #pragma comment( linker, "/subsyste ...

  4. BZOJ 1011--[HNOI2008]遥远的行星(乱搞)

    1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 5684  Solved ...

  5. 定位 和 z-index

    三.定位 定位有三种:(1) 相对定位.(2) 绝对定位.(3) 固定定位 1.相对定位(相对于自己原来的位置定位) 现象和使用: a.如果对当前元素仅仅设置了相对定位,那么与标准流的盒子没什么区别: ...

  6. python 数据类型三 (字典)

    一.字典的介绍 字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存 ...

  7. 520 简单表白代码(JS)

    这两天不知道咋了,迷迷糊糊的,突然知道今天是520的我,急急忙忙赶出个程序(新手,代码有点乱),发出来大家一起研究下(参考百度的). <!DOCTYPE html> <html> ...

  8. MySQL修改root密码的方法总结

    方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...

  9. java后端导入excel将数据写入数据库

    参考:https://www.cnblogs.com/hanfeihanfei/p/7079210.html @RequestMapping("/importExcel.do") ...

  10. Django中安装搜索引擎方法。

    全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持whoosh.solr.Xapian.Elasticsearc ...