Servlet实现后台分页查询
相信大家在搭建后台的时候,经常会使用到分页功能,当然,目前有不少框架(如esayUI)都自带分页的实现,为了更好的理解分页原理,近期本人自己摸索了关于分页查询的一些心得。
归根结底,分页的核心还是在封装PageBean,并通过一定的算法对其进行判断,赋值
public class PageBean<T> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int currentPage; //当前第几页 ,请求传过来
private int pageCount; // 每页显示多少条数据
private int totalCount; //总记录数,查询数据获得 private int totalPage; //总页数, 通过 totalCount 和 pageCount计算获得 private int startIndex; //开始索引,与pageCount 组成 limit 条件 private List<T> pageData; //分页显示的页数,如 1,2,3,4
private int start;
private int end; public PageBean(int currentPage,int pageCount,int totalCount){
this.currentPage=currentPage;
this.pageCount=pageCount;
this.totalCount=totalCount; if(totalCount % pageCount==0){
this.totalPage = totalCount/ pageCount;
}else{
this.totalPage= totalCount/pageCount+1;
} this.startIndex = (currentPage-1)*pageCount; this.start=1;
this.end=5; if(pageCount<=5){
this.end= this.totalPage;
}else{ this.start=currentPage-2;
this.end = currentPage+2; if(start<=0){
this.start=1;
this.end=5;
}
if(this.end > this.totalPage){
this.end=totalPage;
this.start=end-4;
}
}
} public int getCurrentPage() {
return currentPage;
} public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
} public int getPageCount() {
return pageCount;
} public void setPageCount(int pageCount) {
this.pageCount = pageCount;
} public int getTotalCount() {
return totalCount;
} public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
} public int getTotalPage() {
return totalPage;
} public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
} public int getStartIndex() {
return startIndex;
} public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
} public List<T> getPageData() {
return pageData;
} public void setPageData(List<T> pageData) {
this.pageData = pageData;
} public int getStart() {
return start;
} public void setStart(int start) {
this.start = start;
} public int getEnd() {
return end;
} public void setEnd(int end) {
this.end = end;
} public static long getSerialversionuid() {
return serialVersionUID;
} }
Controller层
int currentPage = Integer.valueOf(request.getParameter("currentPage")); int pageCount=7; BlogTypeService blogType = new BlogTypeServiceImpl(); PageBean<BlogType> page = blogType.page(currentPage, pageCount);
request.setAttribute("page", page);
request.getRequestDispatcher("/jsp/blogType.jsp").forward(request, response);
service层
public PageBean<BlogType> page(int currentPage,int pageCount) {
int totalCount=blogType.getTotal(); PageBean<BlogType> pageBean = new PageBean<>(currentPage, pageCount, totalCount);
int startIndex = pageBean.getStartIndex();
pageBean.setPageData(blogType.page(startIndex, pageCount));
return pageBean;
}
dao层
public List<BlogType> page(int currentPage,int pageCount){
String sql = "select * from t_blogtype limit ?,?";
PageBean<BlogType> pageBean =null;
Connection conn =null;
PreparedStatement ps =null;
ResultSet rs =null;
BlogType blogType =null;
try {
conn =DBDao.connection();
ps=conn.prepareStatement(sql);
ps.setInt(1, currentPage);
ps.setInt(2, pageCount);
rs=ps.executeQuery();
List<BlogType> list =new ArrayList<BlogType>();
while(rs.next()){
blogType = new BlogType();
blogType.setId(rs.getInt("id"));
blogType.setTypeName(rs.getString("typeName"));
blogType.setOrderNum(pageCount);
list.add(blogType);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} public int getTotal() {
String sql ="select count(id) from t_blogtype";
Connection conn =null;
PreparedStatement ps=null;
ResultSet rs=null;
int count=0;
try{
conn= DBDao.connection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
rs.next();
count=rs.getInt(1); }catch(Exception e){
e.printStackTrace();
}
return count; }
因为本文主要在说分页查询,所以关于 数据库的连接就一并放到dao里了!
(其实本人是不知道将数据库的连接放在哪里。。。。嘻嘻)
jsp
<body>
共有${page.totalCount }个分类,共有${page.pageCount }页,当前为第${page.currentPage }页,每页显示${page.pageCount }条
<table align="center" width="100%">
<thead>
<th>选择</th>
<th>序号</th>
<th>博客类别</th>
<th>博客排序</th>
<th>操作</th>
</thead>
<tbody align="center" border="1">
<c:forEach items="${page.pageData }" var="page">
<tr>
<td><input type="checkbox" name="id"/></td>
<td>${page.id }</td>
<td>${page.typeName }</td>
<td>${page.orderNum }</td>
<td><a>修改</a>|<a>删除</a></td>
<td></td>
</tr>
</c:forEach>
</tbody> </table>
<!-- 分页 -->
<div style="text-align:center;">
<a href="${pageContext.request.contextPath }/blogType?currentPage=1">首页</a>
<!-- 如果当前页为第一页,就没有上一页这个标签 -->
<c:if test="${page.currentPage==1 }">
<c:forEach begin="${page.start }" end="${page.end }" step="1" var="i">
<c:if test="${page.currentPage == i}">
${i}
</c:if>
<c:if test="${page.currentPage != i}">
<a href="${pageContext.request.contextPath}/blogType?currentPage=${i}">${i}</a>
</c:if>
</c:forEach>
<a href="${pageContext.request.contextPath }/blogType?currentPage=${page.currentPage+1}">下一页</a>
</c:if>
<!-- 如果不是首页也不是尾页,就与上一页和下一页 -->
<c:if test="${page.currentPage>1 && page.currentPage<page.totalPage }">
<a href="${pageContext.request.contextPath }/blogType?currentPage=${page.currentPage-1}">上一页</a>
<c:forEach begin="${page.start }" end="${page.end }" step="1" var="i">
<c:if test="${page.currentPage == i}">
${i}
</c:if>
<c:if test="${page.currentPage != i}">
<a href="${pageContext.request.contextPath}/blogType?currentPage=${i}">${i}</a>
</c:if>
</c:forEach>
<a href="${pageContext.request.contextPath }/blogType?currentPage=${page.currentPage+1}">下一页</a>
</c:if>
<!-- 如果是最后一页,则没有下一页 -->
<c:if test="${page.currentPage==page.totalPage }">
<a href="${pageContext.request.contextPath }/blogType?currentPage=${page.currentPage-1}">上一页</a>
<c:forEach begin="${page.start }" end="${page.end }" step="1" var="i">
<c:if test="${page.currentPage == i}">
${i}
</c:if>
<c:if test="${page.currentPage != i}">
<a href="${pageContext.request.contextPath}/blogType?currentPage=${i}">${i}</a>
</c:if>
</c:forEach> </c:if>
<a href="${pageContext.request.contextPath }/blogType?currentPage=${page.totalPage}">尾页</a>
</div> </body>
Servlet实现后台分页查询的更多相关文章
- Servlet 分页保存查询条件
第一种情况:一个页面走一个JSP页面和Servlet 解决办法: /** 把用户这一次选择的所有条件保存Map集合中,再把 map存到Session会话中,点击分页时进入将Servlet中再将Sess ...
- Servlet实现数据库查询(MyEclipse10,Tomcat7.0,JDK1.7,)——Java Web练习(三)
1.MyEclipse | New Web Project :TestServlet01,修改index.jsp的代码: <%@ page language="java" i ...
- jsp+servlet实现模糊查询和分页效果
---恢复内容开始--- 1.DAO+MVC包 2.DAO接口方法定义 package com.wanczy.dao; import java.math.BigDecimal;import java. ...
- 最简单的Servlet继承HttpServlet查询数据库登录验证
<%-- Created by IntelliJ IDEA. User: yunqing Date: 2017-12-06 Time: 9:11 To change this template ...
- java使用插件pagehelper在mybatis中实现分页查询
摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件 PageHelper是国内牛人的一个开源项目,有兴趣的可以去看源码,都有 ...
- java servlet手机app访问接口(三)高德地图云存储及检索
这篇关于高德地图的随笔内容会多一点, 一.业务说明 对应APP业务中的成员有两类,一是服务人员,二是被服务人员, 主要实现功能, 对APP中的服务人员位置进行时时定位, 然后通过被服务人员登 ...
- java servlet手机app访问接口(一)数据加密传输验证
前面几篇关于servlet的随笔,算是拉通了 servlet的简单使用流程,接下去的文章将主要围绕手机APP访问接口这块出发续写,md5加密传输--->短信验证--->手机推送---> ...
- 基于jsp+servlet图书管理系统之后台用户信息删除操作
上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/de ...
- Servlet+jsp的分页案例
查询的分页,在web中经常用到.一般,分页要维护的信息很多,我们把这些相关的信息,分装到一个类中,PageBean.具体如下: package cn.itcast.utils; import java ...
随机推荐
- 201521123024 《Java程序设计》第5周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能编 ...
- 201521123118《java程序设计》第一周学习总结
1. 本周学习总结 根据学习的过程中,虽然听学习过的人说过,c语言和java语言差不多,学习过c语言 在学java会比较容易,但是这一周发现,java和c还是有一些差别的: java语言是面向对象的语 ...
- 201521123039《Java程序设计》第十三周学习总结
1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 下面是IP地 ...
- 201521123032 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- JAVA课程设计-学生信息管理系统(个人博客)
1. 团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模块或任务说明 负责person类的编写,建立person对象, 完成M ...
- 数据库系统概论——Chap. 1 Introduction
数据库系统概论--Introduction 一.数据库的4个基本概念 数据(data):数据是数据库中存储的基本单位.我们把描述事物的符号记录称为数据.数据和关于数据的解释是不可分的,数据的含义称为数 ...
- python 输出颜色的与样式的方法
上次遇到这个问题就想写下来,其实当时我也不怎么会,老师说这个东西不需要理解,只需要死记硬背,写的多了就记住了,所以今天搜集了几篇文章,加上自己的理解,写下了这篇python 输出颜色的样式与方法的文章 ...
- 1-SDK开发初探-8266
先分享一个比较感动的事情 其实做实物是因为好多人看了我的文章之后还是会遇到各种各样的问题,然后呢真是让亲们搞的自己好累.......所以就想着如果亲们用自己做的板子,出现什么问题能够快速的解决,,而且 ...
- Python扩展方法一二事
前言 跟着一个有强迫症的老板干活是一件极其幸福的事情(你懂的).最近碰到一个问题,简单的说就是对一个对象做出部分修改后仍然返回此对象,于是我就写了一个方法,老板看了之后只有一句话:不雅观,改成直接对此 ...
- 使用 TUN 设备实现一个简单的 UDP 代理隧道
若要实现在 Linux 下的代理程序,方法有很多,比如看着 RFC 1928 来实现一个 socks5 代理并自行设置程序经过 socks5 代理等方式,下文是使用 Linux 提供的 tun/tap ...