java通用分页--02 Debug的使用

简介: java通用分页--02 Debug的使用

什么是通用分页:

在Java中,通用分页是指一种通用的工具或类,用于简化开发人员在分页查询时的操作。通过使用通用分页,开发人员可以快速、方便地实现分页功能,并在不同的业务场景中进行复用。

1.理解分页思想:

通用分页的思想是将分页逻辑封装起来,实现通用性和可复用性。通过将分页逻辑抽象化为一个组件或工具类,可以在不同的业务场景中轻松应用,并减少开发人员的重复性工作。这样,分页查询可以更加简洁、高效地实现,提升了代码的可读性和维护性。同时,也提供了一种灵活的方式来处理大型数据集的分页查询需求。

2.优化pagebean:

pagebean优化分页查询的代码它封装了分页查询的逻辑,并提供了便捷的操作和查询性能优化

package com.xiaoye.util;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
/**
 * 分页工具类
 *
 */
public class PageBean {
  private int page = 1;// 页码
  private int rows = 10;// 页大小
  private int total = 0;// 总记录数
  private boolean pagination = true;// 是否分页
//  增加一个属性url,保留上一次发送的请求地址
//  增加一个属性paramMap,保留上一次发送的请求携带的参数
//   req.getParameterMap();
//  增加一个最大页的方法
//  增加一个下一页的方法
//  增加一个上一页的方法
//  初始化pagebean的方法
  //最大页
  public int maxPage() {
    return this.total % this.rows ==0 ?
        this.total /this.rows :
          this.total /this.rows;
  }
  //下一页
  public int nextPage() {
    return this.page < this.maxPage() ?
        this.page + 1 :this.page;
  }
  //上一页
  public int prevPage() {
    return this.page > 1 ? this.page -1 :this.page;
  }
  public void setRequest(HttpServletRequest req) {
    //初始化默认查询第几页的数据
    this.setPage(req.getParameter("page"));
    this.setRows(req.getParameter("rows"));
    this.setPagination(req.getParameter("pagination"));
    //保留上一次的URL
    this.setUrl(req.getRequestURL().toString());
    //保留携带的参数
    this.setParamMap(req.getParameterMap());
  }
  //重写setPagination
  private void setPagination(String pagination) {
    if(StringUtils.isNotBlank(pagination)) {
      this.setPagination(!"false".equals(pagination));
    }
  }
  //重写setRows
  private void setRows(String rows) {
        if(StringUtils.isNotBlank(rows)) {
          this.setRows(Integer.valueOf(rows));
        }
  }
  //重写setPage
  private void setPage(String page) {
     if(StringUtils.isNotBlank(page)) {
       this.setPage(Integer.valueOf(page));
     }
  }
  private String url;
  private Map<String,String[]> paramMap;
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public Map<String, String[]> getParamMap() {
    return paramMap;
  }
  public void setParamMap(Map<String, String[]> paramMap) {
    this.paramMap = paramMap;
  }
  public PageBean() {
    super();
  }
  public int getPage() {
    return page;
  }
  public void setPage(int page) {
    this.page = page;
  }
  public int getRows() {
    return rows;
  }
  public void setRows(int rows) {
    this.rows = rows;
  }
  public int getTotal() {
    return total;
  }
  public void setTotal(int total) {
    this.total = total;
  }
  public void setTotal(String total) {
    this.total = Integer.parseInt(total);
  }
  public boolean isPagination() {
    return pagination;
  }
  public void setPagination(boolean pagination) {
    this.pagination = pagination;
  }
  /**
   * 获得起始记录的下标
   * 
   * @return
   */
  public int getStartIndex() {
    return (this.page - 1) * this.rows;
  }
  @Override
  public String toString() {
    return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
  }
}

优化之前:

优化之后:

package com.xiaoye.util;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/bookServlet")
public class BookServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    this.doPost(req, resp);
  }
  @SuppressWarnings("unused")
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//    String bname = req.getParameter("bname");
//    //map包含了浏览器传递到后台的所有参数
//    Map<String, String[]> map = req.getParameterMap();
//    //浏览器请求地址
//    String url = req.getRequestURL().toString();
    //简化
    PageBean pageBean=new PageBean();
    pageBean.setRequest(req);
    req.setAttribute("pageBean", pageBean);
    req.getRequestDispatcher("bookList.jsp").forward(req, resp);
  }
}

输出结果:

 

 

 

3.分页自定义jsp标签

什么是分页自定义jsp标签:

分页自定义JSP标签一般具有以下几个关键属性或功能:

  1. 当前页码(currentPage):表示用户当前所处的页数。
  2. 每页显示数量(pageSize):表示每页显示的数据条数。
  3. 数据总数(total):表示满足查询条件的数据总数量。
  4. 分页查询结果(dataList):表示查询到的当前页的数据列表。

使用分页自定义JSP标签可以使分页逻辑更加清晰和模块化,提高了代码的可读性和可维护性,并方便地在不同的JSP页面中进行重用。

tld

 

助手类

package com.xiaoye.util;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
/**
 * 分页工具类
 *
 */
public class PageBean {
  private int page = 1;// 页码
  private int rows = 10;// 页大小
  private int total = 0;// 总记录数
  private boolean pagination = true;// 是否分页
//  增加一个属性url,保留上一次发送的请求地址
//  增加一个属性paramMap,保留上一次发送的请求携带的参数
//   req.getParameterMap();
//  增加一个最大页的方法
//  增加一个下一页的方法
//  增加一个上一页的方法
//  初始化pagebean的方法
  //最大页
  public int maxPage() {
    return this.total % this.rows ==0 ?
        this.total /this.rows :
          this.total /this.rows;
  }
  //下一页
  public int nextPage() {
    return this.page < this.maxPage() ?
        this.page + 1 :this.page;
  }
  //上一页
  public int prevPage() {
    return this.page > 1 ? this.page -1 :this.page;
  }
  public void setRequest(HttpServletRequest req) {
    //初始化默认查询第几页的数据
    this.setPage(req.getParameter("page"));
    this.setRows(req.getParameter("rows"));
    this.setPagination(req.getParameter("pagination"));
    //保留上一次的URL
    this.setUrl(req.getRequestURL().toString());
    //保留携带的参数
    this.setParamMap(req.getParameterMap());
  }
  //重写setPagination
  private void setPagination(String pagination) {
    if(StringUtils.isNotBlank(pagination)) {
      this.setPagination(!"false".equals(pagination));
    }
  }
  //重写setRows
  private void setRows(String rows) {
        if(StringUtils.isNotBlank(rows)) {
          this.setRows(Integer.valueOf(rows));
        }
  }                                   
  //重写setPage
  private void setPage(String page) {
     if(StringUtils.isNotBlank(page)) {
       this.setPage(Integer.valueOf(page));
     }
  }
  private String url;
  private Map<String,String[]> paramMap;
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public Map<String, String[]> getParamMap() {
    return paramMap;
  }
  public void setParamMap(Map<String, String[]> paramMap) {
    this.paramMap = paramMap;
  }
  public PageBean() {
    super();
  }
  public int getPage() {
    return page;
  }
  public void setPage(int page) {
    this.page = page;
  }
  public int getRows() {
    return rows;
  }
  public void setRows(int rows) {
    this.rows = rows;
  }
  public int getTotal() {
    return total;
  }
  public void setTotal(int total) {
    this.total = total;
  }
  public void setTotal(String total) {
    this.total = Integer.parseInt(total);
  }
  public boolean isPagination() {
    return pagination;
  }
  public void setPagination(boolean pagination) {
    this.pagination = pagination;
  }
  /**
   * 获得起始记录的下标
   * 
   * @return
   */
  public int getStartIndex() {
    return (this.page - 1) * this.rows;
  }
  @Override
  public String toString() {
    return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
  }
}

没有优化之前:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link
  href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
  rel="stylesheet">
<script
  src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍列表</title>
<style type="text/css">
.page-item input {
  padding: 0;
  width: 40px;
  height: 100%;
  text-align: center;
  margin: 0 6px;
}
.page-item input, .page-item b {
  line-height: 38px;
  float: left;
  font-weight: 400;
}
.page-item.go-input {
  margin: 0 10px;
}
</style>
</head>
<body>
  <form class="form-inline"
    action="${pageContext.request.contextPath }/book.action" method="post">
    <div class="form-group mb-2">
      <input type="text" class="form-control-plaintext" name="bname"
        placeholder="请输入书籍名称">
    </div>
    <button type="submit" class="btn btn-primary mb-2">查询</button>
  </form>
  <table class="table table-striped bg-success">
    <thead>
      <tr>
        <th scope="col">书籍ID</th>
        <th scope="col">书籍名</th>
        <th scope="col">价格</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>圣墟第1章</td>
        <td>1</td>
      </tr>
      <tr>
        <td>1</td>
        <td>圣墟第1章</td>
        <td>1</td>
      </tr>
    </tbody>
  </table>
  <form action="" id="pageBeanForm" method="post">
    <input type="hidden" name="page">
  </form>
  <!-- 分页条 69-85 -->
  <ul class="pagination justify-content-center">
    <li class="page-item"><a class="page-link"
      href='javascript:gotoPage(1)'>首页</a></li>
    <li class="page-item"><a class="page-link"
      href='javascript:gotoPage(1)'>&lt;</a></li>
    <li class="page-item"><a class="page-link" href="#">1</a></li>
    <li class="page-item"><a class="page-link" href="#">2</a></li>
    <li class="page-item active"><a class="page-link" href="#">3</a></li>
    <!--下一页  -->
    <li class="page-item disabled"><a class="page-link" href="#">&gt;</a></li>
    <li class="page-item disabled"><a class="page-link" href="#">尾页</a></li>
    <li class="page-item go-input"><b>到第</b><input class="page-link"
      type="text" id="skipPage" name="" /><b>页</b></li>
    <li class="page-item go"><a class="page-link"
      href="javascript:skipPage()">确定</a></li>
    <li class="page-item"><b>共666条</b></li>
  </ul>
  <script type='text/javascript'>
    function gotoPage(page) {
      document.getElementById('pageBeanForm').page.value = page;
      /*提交一个from表单  */
      document.getElementById('pageBeanForm').submit();
    }
        /* 跳到那一页 */
    function skipPage() {
      var page = document.getElementById('skipPage').value;
      if (!page || isNaN(page) || parseInt(page) < 1
          || parseInt(page) > 1122) {
        alert('请输入1~N的数字');
        return;
      }
      /*执行跳到那一页  */
      gotoPage(page);
    }
  </script>
</body>
</html>

优化之后:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
  <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  <%@taglib uri="http://jsp.xiaoye.xy" prefix="x" %>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link
  href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
  rel="stylesheet">
<script
  src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍列表</title>
<style type="text/css">
.page-item input {
  padding: 0;
  width: 40px;
  height: 100%;
  text-align: center;
  margin: 0 6px;
}
.page-item input, .page-item b {
  line-height: 38px;
  float: left;
  font-weight: 400;
}
.page-item.go-input {
  margin: 0 10px;
}
</style>
</head>
<body>
  <form class="form-inline"
    action="${pageContext.request.contextPath }/book.action" method="post">
    <div class="form-group mb-2">
      <input type="text" class="form-control-plaintext" name="bname"
        placeholder="请输入书籍名称">
    </div>
    <button type="submit" class="btn btn-primary mb-2">查询</button>
  </form>
  <table class="table table-striped bg-success">
    <thead>
      <tr>
        <th scope="col">书籍ID</th>
        <th scope="col">书籍名</th>
        <th scope="col">价格</th>
      </tr>
    </thead>
    <tbody>
      <c:forEach items="${books }" var="b">
      <tr>
        <td>${b.bid }</td>
        <td>${b.bname }</td>
        <td>${b.price }</td>
      </tr>
      </c:forEach>
    </tbody>
  </table>
  <x:page pageBean="${pageBean }"></x:page>
</body>
</html>

输出结果:

 

4.枫叶debug调试代码

     1.debug启动项目:

        右击代码然后点击debug

点击Finish

出来两个选项 yes/no:

点击yes:

点击No:

     2.在将要调试的代码上打上断点:

    调试代码按F6即可

     双击要调试的代码

点击yes会直接跳到debug调试窗口 点击NO依然在J2EE但是不影响调试

变量:

调试的代码都会在这里面显示:

 

 


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
6月前
|
Web App开发 SQL Java
javaweb实现分页(二)
javaweb实现分页(二)
|
6月前
|
Web App开发 Java 关系型数据库
java中部的分页实现(二)
java中部的分页实现(二)
|
6月前
|
SQL 关系型数据库 MySQL
javaweb中实现分页,持续更新……
javaweb中实现分页,持续更新……
|
6月前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
|
安全 Java 持续交付
Java本地远程服务器debug调试
Java本地远程服务器debug调试
276 0
|
SQL 前端开发 Java
java通用分页前端(2)
java通用分页前端(2)
64 0
|
22天前
|
Java 程序员 调度
Java|PageHelper 怎么自作主张帮我分页?
没有调用 PageHelper.startPage,查询怎么也被自动分页了?
13 2
|
5月前
|
Java 应用服务中间件 编译器
详解JAVA远程debug
详解JAVA远程debug
157 0
|
6月前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
5月前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件