java书籍访问案例_JavaWeb学习-案例练习-图书管理后台- 9 -分 页操作

本文介绍了一个JavaWeb应用中实现图书管理后台分页操作的详细步骤,包括前端页面调整、分页思路分析、后端代码实现(PageServlet、PageBean、Dao层、Service层)以及JSP页面的修改,最终实现上一页和下一页功能并处理边界问题。
摘要由CSDN通过智能技术生成

原标题:JavaWeb学习-案例练习-图书管理后台- 9 -分 页操作

前面一篇完成了多条件的查询,这篇开始学习分页,很多网页是默认显示20条数据,想看更多数据,就通过点击下一页的方式实现。这篇就来模拟这个分页实现过程。

1. 项目环境准备

之前我们实现的都是图书管理后台功能,现在分页,我们在前端页面,所以我把素材中product_list.jsp和ad文件夹拷贝到Eclipse中的WebContent的目录下。product_list.jsp就是我们要实现分页的前端页面。

8f171e3797bc9c59958ffbf5515d6706.png

上图是项目工程结构,全部代码放在了github上。

https://github.com/Anthonyliu86/BookManagement_JavawebDemo

2. 分页思路分析

当前product_list的效果是这样,布局是采用表格布局,一行显示四本书,也就是一个tr里面有4个td。

60f054e6a1739df3995c56e0a136aab0.png

为了我们简单,这里我们只用一行,每行显示4本书,想看第五本书,必须点击下一页菜单。所以,我们在product_list.jsp中这个表格,只留下一个tr,第一行也只留下一个td,也就是一本书,最后效果是这样的

4988c738a3e28d0e40cf2bd07a71d5fd.png

下图是所有层交互的思路。

afb71f555b667aec320c30f7d689d4b6.png

3. 分页代码实现过程

在点击下一页之后,这个动作需要跳转到一个servlet,我们先来创建这个servlet,叫pageServlet。

3.1 创建一个PageServlet.java

当前这个servlet代码是空,这个文件主要写设置每页显示个数,和当前页id获取,然后返回一个页面对象。所以,我们先创建一个关于页面的Bean类。

3.2 创建PageBean.java

在domian包下创建一个PageBean.java文件,写入下面代码。

import java.util.List;

public class PageBean {

private int pageSize;

private int currentPage;

private int count;

private int totalPage;

private List books;

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getCount() {

return count;

}

public void setCount(int count) {

this.count = count;

}

3.3 Dao层代码

在BookDao这个接口中新增两个方法,一个是求总记录数,第二个是查找分页数据

/**

* 得到总记录数

* @return

* @throws SQLException

*/

public int count() throws SQLException;

/**

* 查找分页数据

* @param currentPage

* @param pageSize

* @return

* @throws SQLException

*/

public List findBooks(int currentPage, int pageSize)throws SQLException;

然后在BookDaoImpl.java添加这两个方法的具体实现代码。

public int count() throws SQLException {

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

long l = (Long)qr.query("select count(*) from book", new ScalarHandler(1));

return (int)l;

}

public List findBooks(int currentPage, int pageSize) throws SQLException {

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

return qr.query("select * from book limit ?,?", new BeanListHandler(Book.class),(currentPage-1)*pageSize, pageSize);

}

3.4 Service层

BookService接口添加根据currentPage和pageSize两个参数,得到PageBean的方法。

/**

* 得到总记录数

* @return

* @throws SQLException

*/

public int count() throws SQLException;

/**

* 查找分页数据

* @param currentPage

* @param pageSize

* @return

* @throws SQLException

*/

public List findBooks(int currentPage, int pageSize)throws SQLException;

具体方法实现,添加到BookServiceImpl.java中

public PageBean findBooksPage(int currentPage, int pageSize) {

try {

int count = bd.count();

int totalPage = (int)Math.ceil(count*1.0/pageSize);

List books = bd.findBooks(currentPage, pageSize);

//封装成一个PageBean对象

PageBean pb = new PageBean();

pb.setBooks(books);

pb.setCount(count);

pb.setCurrentPage(currentPage);

pb.setTotalPage(totalPage);

pb.setPageSize(pageSize);

return pb;

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

3.5 Servlet代码

回到PageServlet.java中,看看这个servlet如何写。

package com.anthony.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.anthony.domain.PageBean;

import com.anthony.service.BookService;

import com.anthony.service.BookServiceImpl;

public class PageServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//初始化每页显示记录数

int pageSize = 4;

int currentPage = 1; //表示当前页

String currPage = request.getParameter("currentPage");

if(currPage != null) { //第一次访问页面currPage可能为null

currentPage = Integer.parseInt(currPage);

}

//调用业务层方法

BookService bs = new BookServiceImpl();

//分页查询,并返回PageBean对象

PageBean pb = bs.findBooksPage(currentPage, pageSize);

//请求跳转

request.setAttribute("pb", pb);

request.getRequestDispatcher("/product_list.jsp").forward(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

3.6 Product_list.jsp修改

3.6.1 添加JSTL约束

在product_list.jsp顶部添加JSTL约束。

3.6.2 解析PageBean对象到jsp中

bookStore列表

首页    >    计算机    >    图书列表

商品目录


计算机

    共100种商品

productlist.gif

浏览器打开https://localhost:8080/BookManagement/pageServlet 效果是这样的

85af590b0e2ce66b91ef98a3f957733f.png

3.6.3 实现上一页和下一页功能

现在我们就差上一页和下一页这个功能没有实现。

下面代码主要看 上一页 和下一页中代码。

bookStore列表

首页    >    计算机    >    图书列表

商品目录


计算机

    共100种商品

productlist.gif

效果如下

de11bcb793ff70317edf5b241b0cb16b.png

当前还是有一个问题,上一页和下一页都可以一直点击下去,没有做边界处理。

3.6.4 上一页和下一页边界处理

因为需要对上一页和下一页的边界判断,例如上一页边界情况,如果当前currentPage等于1,那么就上一页不能再减1。同样,当前currentPage等于totalPage,那么不能加1. 这种if判断,我们可以用三元运算符来一行代码搞定。

如果currentPage=1, 前端点击上一页,永远传递currentPage=1, 如果currentPage=totalPage,那么传递就是currentPage=totalPage,也就是最后一页。

到这里,分页操作完成。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值