`
yinghuayu1324117
  • 浏览: 69963 次
  • 性别: Icon_minigender_2
  • 来自: 保定
文章分类
社区版块
存档分类

Google分页的经典案例

阅读更多

上一页[1][2][3][4][5][6][7][8][9][10]下一页,实现一个仿Google得分页。

 

1、创建Page类,

 

 

package cn.csdn.domain;
import java.util.List;
public class Page {
private int nowpage;// 当前页
private int countrecord;// 总记录数
private int countpage;// 总页数
private int pageindex;// 当前页记录开始的位置 (nowpage-1)*PAGESIZE
public static final int PAGESIZE = 5;// 每页显示的记录数
private int sumindex = 6;// 索引的sum值 代表的是 google页面中最大显示页数
private int startindex;// 开始的索引值
private int endindex;// 结束的索引值
private List allentities;
public Page() {
}
public Page(int countrecord, int nowpage) { // 可变
// 计算当前页
this.nowpage = nowpage;
// 计算出当前页开始的位置
this.pageindex = (nowpage - 1) * PAGESIZE;
// 计算总页数
this.countrecord = countrecord;
if (this.countrecord % this.PAGESIZE == 0) {
this.countpage = this.countrecord / this.PAGESIZE;
} else {
this.countpage = this.countrecord / this.PAGESIZE + 1;
}
// 计算索引位置
//==============第一种方法========
/*if (this.nowpage <= 4) {
this.startindex = 1;
this.endindex = this.nowpage + 2;
if(this.endindex>this.countpage){
this.endindex=this.countpage;
}
}else if(this.nowpage>4){
this.startindex=this.nowpage-3;
this.endindex=this.nowpage+2; 
if(this.endindex>this.countpage){
this.endindex=this.countpage;
this.startindex=this.countpage-5;
}
}*/
// ============第二种方法==========
if(nowpage<(lastpage-2)){ 
if(nowpage>=5){ 
//如果大于6的话,startindex要变大
startindex=nowpage-3;
}else{
startindex=1;
}
//endindex要变大
endindex=nowpage+2;
// 如果总页数小于6
if(endindex>lastpage){
endindex=lastpage;
}
}else{ 
endindex=lastpage;
startindex=endindex-5;
}
// ======================
}
//get、set方法
public int getNowpage() {
return nowpage;
}
public void setNowpage(int nowpage) {
this.nowpage = nowpage;
}
public int getCountrecord() {
return countrecord;
}
public void setCountrecord(int countrecord) {
this.countrecord = countrecord;
}
public int getCountpage() {
return countpage;
}
public void setCountpage(int countpage) {
this.countpage = countpage;
}
public int getPageindex() {
return pageindex;
}
public void setPageindex(int pageindex) {
this.pageindex = pageindex;
}
public int getSumindex() {
return sumindex;
}
public void setSumindex(int sumindex) {
this.sumindex = sumindex;
}
public int getStartindex() {
return startindex;
}
public void setStartindex(int startindex) {
this.startindex = startindex;
}
public int getEndindex() {
return endindex;
}
public void setEndindex(int endindex) {
this.endindex = endindex;
}
public List getAllentities() {
return allentities;
}
public void setAllentities(List allentities) {
this.allentities = allentities;
}
}

 

2dao方法中的代码:

public int getCountRecord() {
// 1、定义返回结果
int countrecord = 0;
// 2、获取数据库连接对象
conn = DBConn.getConn();
// 3、创建预处理的sql语句
String sql = "select count(*) from student";
try {
// 4、根据预处理的sql语句创建预处理的操作对象
pstmt = conn.prepareStatement(sql);
// 5、查询的时候 直接执行
rs = pstmt.executeQuery();

// 6、判断
if (rs.next()) {
countrecord = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBConn.close(rs, pstmt);
}
return countrecord;
}
// 获取当前页信息
public List<Student> getNowPageInfo(int pageindex,int pagesize) {
//1、定义返回结果变量
List<Student> allentities = new ArrayList<Student>();
//2、获取连接对象
conn = DBConn.getConn();
 try {
//3、根据预处理的sql语句创建预处理的操作对象
pstmt = conn.prepareStatement("select id,name,age,email from student limit ?,?");
//4、定义下标变量 并赋值
int index = 1;
pstmt.setInt(index++, pageindex);
pstmt.setInt(index++, pagesize);
//5、查询的时候 直接执行
rs = pstmt.executeQuery();
//判断
while(rs.next()){
//创建实体bean对象
Student entity = new Student();
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setAge(rs.getInt("age"));
entity.setEmail(rs.getString("email"));
//添加到集合中
allentities.add(entity);
}
 } catch (SQLException e) {
e.printStackTrace();
}finally{
DBConn.close(rs, pstmt);
}
return allentities;
}

 

3、在servlet中的代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf8");
//2.获取当前页
int nowpage=1;
String npage = req.getParameter("nowpage");
if(npage!=null){
nowpage = Integer.valueOf(npage);
}
//3、创建sevice服务操作对象
StudentServiceImpl ssi = new StudentServiceImpl();
//计算总记录数
int countrecord = ssi.getCountRecord();
//创建page对象
Page stupage = new Page(countrecord, nowpage);
//获取当前页信息
        List<Student> allentities = ssi.getNowPageInfo(stupage.getPageindex(),stupage.PAGESIZE);
//把当前页信息赋值给page对象的list集合
stupage.setAllentities(allentities);
//存入到reqeust中
req.setAttribute("stupage", stupage);
req.getRequestDispatcher("liststudents.jsp").forward(req, resp);
}

 4、在jsp中的代码

<div id="pg">
           <c:if test="${stupage.nowpage!=1}">
           <span>
             <a href="${pageContext.request.contextPath}/liststudents.do?nowpage=${stupage.nowpage-1>0?stupage.nowpage-1:1}">上一页</a>
           </span>
           </c:if>
        <c:forEach begin="${stupage.startindex}" end="${stupage.endindex}" var="indexnum">
           <span>
             [<a href="${pageContext.request.contextPath}/liststudents.do?nowpage=${indexnum}">${indexnum}</a>]
           </span>
         </c:forEach>  
           <c:if test="${stupage.nowpage!=stupage.countpage}">
           <span>
           <a href="${pageContext.request.contextPath}/liststudents.do?nowpage=${stupage.nowpage+1>stupage.countpage?stupage.countpage:stupage.nowpage+1}">下一页</a>
           </span>
           </c:if>
</div>

 

 

分享到:
评论

相关推荐

    Ajax经典案例开发大全

    **Ajax经典案例开发大全** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,大大提升了用户体验...

    仿GOOGLE搜索框的ASP源码

    在本案例中,"仿GOOGLE搜索框的ASP源码"是指一个使用ASP技术构建的搜索功能,其设计灵感来源于谷歌的搜索框,目的是为用户提供类似谷歌的搜索体验。这个源码不仅实现了搜索界面的模拟,还整合了数据库连接,使得用户...

    Google Suggest

    总结来说,Google Suggest是利用Ajax技术提升搜索引擎用户体验的一个经典案例,它的实现涉及到JavaScript编程、HTTP请求、JSON数据交换、DOM操作等多个方面,对于理解和学习Web开发,特别是前端交互设计具有很高的...

    android入门到精通

    通过17个经典案例,你可以深入理解Android平台的工作原理,并在实践中提升自己的编程能力。 1. **Android基础知识**:首先,你需要了解Java语言基础,因为Android应用主要使用Java或Kotlin进行开发。学习Android ...

    ajax经典实例大全

    在这个"Ajax经典实例大全"中,我们将深入探讨Ajax的核心概念、工作原理以及各种实用案例。 1. **Ajax核心概念** - XMLHttpRequest对象:这是Ajax技术的基础,它允许JavaScript在后台与服务器通信,而不会打断用户...

    ajax经典实例开发宝典

    这本宝典涵盖了Ajax的核心概念、关键技术和各种实用案例,对于Web开发者来说是宝贵的参考资料。 1. **Ajax基础** - **异步通信**:Ajax的核心是浏览器通过JavaScript创建XMLHttpRequest对象,实现后台与服务器的...

    Ajax经典实例大全

    - **分页加载**:无刷新地加载更多内容,提高页面性能。 - **实时聊天**:使用WebSocket或Long Polling等技术实现实时通信。 - **动态加载内容**:如Google地图的平滑滚动加载。 - **异步提交**:如评论、评分等...

    JAVA WEB典型模块与项目实战大全

    第3篇 项目案例实战  第23章 在线音乐管理系统(ajax+jsp+struts 2.x)  23.1 在线音乐管理系统简述  23.2 在线音乐管理系统前期准备  23.3 在线音乐管理系统具体实现——超级管理员操作  23.4 在线音乐...

    Pragmatic Ajax A Web2.0 Primer(国外经典)

    《Pragmatic Ajax A Web2.0 Primer》是一本深入探讨Web 2.0核心技术——Ajax(异步JavaScript和XML)的国外经典著作。这本书旨在帮助开发者理解如何利用Ajax技术构建更高效、更具交互性的Web应用程序。Ajax的核心...

    Android商业小项目(二手产品展示的一个平台)

    此外,考虑到数据量和网络条件,可能还使用了分页加载、数据缓存等策略,以提高用户体验。 3. **数据模型与API接口**: 项目中肯定包含了一系列的数据模型,这些模型对应着服务器端的JSON结构,用于解析和存储从...

    Linux内核设计与实现 Linux Kernel Development 第三版

    他曾是Google的员工,并在Linux内核开发方面做出了显著贡献。凭借其丰富的实践经验,Love在这本书中分享了许多宝贵的内核开发技巧和技术细节。 #### 主要内容概述 本书覆盖了Linux内核的各个方面,适合不同层次的...

    ASP网上购物系统旗舰版

    黑底深蓝、黑底炫彩、黑底深灰、黑底棕色、混合苍青、经典蓝色、朴素蓝色、 明亮蓝色、 精美浅蓝、 韵味深蓝、 品味棕色、 简洁灰色、 明亮银灰、 健康、 植物、 混合黄绿、 混合蓝绿、 可爱泡泡、 可爱洋红、 精美...

    《程序天下:JavaScript实例自学手册》光盘源码

    22.10 用JavaScript调用Google AdSense 22.11 Ajax效果:可拖拽的表格 22.12 JavaScript调用Web Service 22.13 用JavaScript实现编码解码 22.14 创建带属性的对象 22.15 用prototype实现JavaScript的继承 22.16 ...

    程序天下:JavaScript实例自学手册

    第1章 页面特效 ...1.2 页面自动最大化 1.3 页面自动刷新 ...22.10 用JavaScript调用Google AdSense 22.11 Ajax效果:可拖拽的表格 22.12 JavaScript调用Web Service 22.13 用JavaScript实现编码解码 22.14 创建带属性...

Global site tag (gtag.js) - Google Analytics