Java基础——Servlet(六)分页相关
前面写了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}页
<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(六)分页相关的更多相关文章
- Java实习生常规技术面试题每日十题Java基础(六)
目录 1.在Java语言,怎么理解goto. 2.请描述一下Java 5有哪些新特性? 3.Java 6新特性有哪些. 4.Java 7 新特性有哪些. 5.Java 8 新特性有哪些. 6.描述Ja ...
- Java基础——Servlet
什么是Servlet Servlet是Java Web的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l ...
- Java基础——Servlet(七)过滤器&监听器 相关
一.过滤器简介 Filter 位于客户端和请求资源之间,请求的资源可以是 Servlet Jsp html (img,javascript,css)等.用于拦截浏览器发给服务器的请求(Request) ...
- Java基础——Servlet(一)
在学习Servlet之前,需要首先学习一些关联性的知识. 一.动态网页程序 动态网页:它是网页中的偏功能性的部分也是最重要的部分.它不是我们平时所看见的页面特效,展示的效果.而是,一种交互行为.比如, ...
- Java基础——Servlet(八)文件上传下载
一.简单的文件上传常见的组件Smartupload , Apache 的 commons FileUploadSmartupload上传的步骤: 1.初始化上传上下文 2.准备上传 3.保存文件 &l ...
- java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问
本文将详解 equals()与hashCode()方法 概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) publi ...
- Java基础——Servlet(五)
哈哈哈...学习Servlet学了半个多月,因为中间有比较灰心的时候,有几天是啥都不学了的状态,看了好几部励志的电影.呃~还是得继续吧.本来计划是好好夯实这里的基础,结果在网找到了介绍比较全面的视频, ...
- Java基础--常用API--日期相关API
一.java.util.Date 1.只用于显示系统时间,其大部分操作由Calendar代替. 格林威治时间(GMT):指的是1970年1月1日0时,不同地区有时间差. 默认输出格式:星期.月.日.时 ...
- Java基础--常用API--IO流相关API
一.IO流 1.定义: IO流指的是Input/Output流,即输入流/输出流. 输入流:将外界信息写入程序,即从外界获取信息,属于读操作. 输出流:将程序数据发送给外界,即向外界传输数据,属于写操 ...
随机推荐
- Web 前端 注意知识点
一. 前端使用技巧: 1. button的用法.在使用按钮时可以自由在内设置style属性,来改变形态.可以给予type=sbumit提交属性. 2. 各种使用符号: # <!--小于 大于 ...
- 「PKUSC2018」星际穿越(倍增)
倍增好题啊! 我们我们预处理 \(f[x][i]\) 表示 \(x\) 点最左到达的端点,\(sum[x][i]\) 表示 \(x\) 点最左到达的端点时 \(f[x][i]\sim x\) 的答案, ...
- mongoose入门
概述 像Mysql和Mongodb这样的数据库,一般都是在命令行或者工具里面进行操作,如果想在node搭建的服务器上面操作,就必须要利用特殊的模块的.其中操作Mongodb数据库需要用到mongoos ...
- a 便签实现 下载
如果想通过纯前端技术实现文件下载,直接把a标签的href属性设置为文件路径即可,如下: <a href="https://cdn.shopify.com/s/files/1/1545/ ...
- Numpy.random中shuffle与permutation的区别(转)
huffle与permutation的区别 函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序):区别在于shuffle直接在原来的数组上进行操作,改变原 ...
- 基于.Net + SqlServer的分库分表设计方案
在说分库分表之前,先简单介绍下网站架构,这样有助于理解为何需要分库分表这种技术.因为所有的技术,大多都是因为业务的需要而产生的. 1.网站发展的第一阶段 大致架构如下,因为没有多少用户访问,所以单台服 ...
- C++ STL基本容器的使用(vector、list、deque、map、stack、queue)
1.关联容器和顺序容器 C++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector.list.deque等.关联容器主要有map和set.如下图: 1.vector基本使用 #incl ...
- 转:TCP为什么要3次握手和4次挥手时等待2MSL、 TCP如何保证消息顺序以及可靠性到达
关于tcp三次握手.四次挥手可以看这里:TCP与UDP的差别以及TCP三次握手.四次挥手 1.TCP为甚要3次握手? 在谢希仁著<计算机网络>第四版中讲“三次握手”的目的是“为了防止已失效 ...
- url最后的“/”是什么作用
多了个尾巴 有时候,当你尝试在地址栏输入https://123/demo的时候,会发现浏览器会重定向到https://123/demo/这个地址,也就是多了个/,发生了重定向.有图为证: 上面这个图是 ...
- 公共技术点(Android 动画基础)
转载地址:http://p.codekk.com/blogs/detail/559623d8d6459ae793499787 一 传统 View 动画(Tween/Frame) 1.1 Tween 动 ...