经验分享

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

前面一篇完成了多条件的查询,这篇开始学习分页,很多网页是默认显示20条数据,想看更多数据,就通过点击下一页的方式实现。这篇就来模拟这个分页实现过程。1. 项目环境准备之前我们实现的都是图书管理后台功能,现在分页,我们在前端页面,所以我把素材中product_list.jsp和ad文件夹拷贝到Eclipse中的WebContent的目录下。product_list.jsp就是我们要实现分页

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


1. 项目环境准备

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

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

https://github.com/Anthonyliu86/BookManagement_JavawebDemo

2. 分页思路分析

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

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


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

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<Book> 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<Book> 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<Book> findBooks(int currentPage, int pageSize) throws SQLException {
     QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
     return qr.query("select * from book limit ?,?", new BeanListHandler<Book>(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<Book> 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<Book> 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.BookSer

原创不易,完成人机校验,阅读全文

相关推荐