项目阶段四:首页的分页

1、首页 index.jsp 的跳转

在这里插入图片描述

web下的index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--只负责请求转发--%>
<jsp:forward page="/client/bookServlet?action=page"></jsp:forward>

复制一份原来的index.jsp到web下的pages下添加文件夹client下
在这里插入图片描述

/**
 * 首页的分页
 * @param req
 * @param resp
 * @throws ServletException
 * @throws IOException
 */
protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1 获取请求的参数 pageNo 和 pageSize
    int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
    int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);

    //2 调用BookService.page(pageNo,pageSize):Page对象
    Page<Book> page = bookService.page(pageNo, pageSize);
    //3 保存Page对象到Request域中
    req.setAttribute("page",page);
    //4 请求转发到pages/manager/book_manager.jsp页面
    req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
}

其web.xml配置文件:

<servlet>
    <servlet-name>ClientBookServlet</servlet-name>
    <servlet-class>com.atguigu.web.ClientBookServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ClientBookServlet</servlet-name>
    <url-pattern>/client/bookServlet</url-pattern>
</servlet-mapping>

2、分页条的抽取

2.1、抽取分页条中请求地址为 url 变量

1.在 page 对象中添加 url 属性

// 分页条的请求地址
private  String url;

2 在 Servlet 程序的 page 分页方法中设置 url 的分页请求地址

BookServlet.java:

Page<Book> page = bookService.page(pageNo, pageSize);

page.setUrl("manager/bookServlet?action=page");
//        //3 保存Page对象到Request域中
req.setAttribute("page",page);
ClientBookServlet.java:
//3 保存Page对象到Request域中
req.setAttribute("page",page);

page_nav.jsp:

<%--大 于 首 页 , 才 显 示 --%>
<c:if test="${requestScope.page.pageNo > 1}">
    <a href="${requestScope.page.url}&pageNo=1">首页</a>
    <a href="${requestScope.page.url}&pageNo=${requestScope.page.pageNo-1}">上一页</a>
</c:if>

<c:if test="${requestScope.page.pageNo != i}">
    <a href=${requestScope.page.url}&pageNo=${i}>${i}<a/>
</c:if>

<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageNo+1}">下一页</a>
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageTotal}">末页</a>

3、首页价格搜索

在这里插入图片描述

BookDao:

 /**
  * 查询价格在区间[min,max]里的总记录数
  * @param min 最低价
  * @param max 最高价
  * @return 价格在区间[min,max]里的记录条数
  */
Integer queryForPageTotalCountByPrice(int min,int max);

 /**
  * 查询价格在区间[min,max]里的数据信息
  * @param begin 本页数据开始的索引
  * @param pageSize 本页显示多少条数据
  * @param min 最低价
  * @param max 最高价
  * @return 返回该查询结果的数据信息集合
  */
List<Book> queryForPageItemsByPrice(int begin,int pageSize,int min,int max);

BookDaoImpl:

@Override
public Integer queryForPageTotalCountByPrice(int min, int max) {
    String sql = "select count(*) from t_book where price between ? and ?";
    Number count = (Number) queryForSingleValue(sql, min, max);
    return count.intValue();
}

@Override
public List<Book> queryForPageItemsByPrice(int begin, int pageSize, int min, int max) {
    String sql = "select `id`,`bookName`,`author`,`price`,`sales`,`stock`,`img_path` imgPath from t_book " +
            "where price between ? and ? order by price limit ?,?";
    return queryForList(Book.class,sql,min,max,begin,pageSize);
}

BookDaoTest:

@Test
public void queryForPageTotalCountByPrice() {
    System.out.println(bookDao.queryForPageTotalCountByPrice(0, 20));
}

@Test
public void queryForPageItemsByPrice() {
    List<Book> books = bookDao.queryForPageItemsByPrice(0, 2, 0, 20);

    for (Book book : books) {
        System.out.println(book);
    }
}

BookService:

/**
 * 价格在区间[min,max]的page对象所含信息
 * @param pageNo 第几页
 * @param pageSize 一页显示几条数据
 * @param min 最低价
 * @param max 最高价
 * @return
 */
Page<Book> pageByPrice(int pageNo,int pageSize,int min,int max);

BookServiceImpl:

@Override
public Page<Book> pageByPrice(int pageNo, int pageSize, int min, int max) {

    Page<Book> page = new Page<Book>();

    // 设置每页显示的数量
    page.setPageSize(pageSize);
    // 求总记录数
    Integer pageTotalCount = bookDao.queryForPageTotalCountByPrice(min,max);
    // 设置总记录数
    page.setPageTotalCount(pageTotalCount);

    Integer pageTotal = pageTotalCount / pageSize;
    if (pageTotalCount % pageSize > 0) {
        pageTotal += 1;
    }
    // 设置总页码
    page.setPageTotal(pageTotal);

    //设置当前页为第几页
    page.setPageNo(pageNo);

    // 求当前页数据的开始索引
    int begin = (page.getPageNo() - 1) * pageSize;
    // 求当前页数据
    List<Book> items = bookDao.queryForPageItemsByPrice(begin,pageSize,min,max);
    page.setItems(items);

    return page;
}

BookServiceTest:

@Test
public void pageByPrice() {
    Page<Book> bookPage = bookService.pageByPrice(1, 4, 0, 30);
    System.out.println(bookPage);
}

ClientBookServlet:

protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1 获取请求的参数 pageNo 和 pageSize
    int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
    int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
    int min = WebUtils.parseInt(req.getParameter("min"), 0);
    int max = WebUtils.parseInt(req.getParameter("max"), Integer.MAX_VALUE);

    //2 调用BookService.page(pageNo,pageSize):Page对象
    Page<Book> page = bookService.pageByPrice(pageNo,pageSize,min,max);
    //3 保存Page对象到Request域中
    req.setAttribute("page",page);
    //4 请求转发到pages/manager/book_manager.jsp页面
    req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
}

index.jsp:

<div class="book_cond">
	<form action="client/bookServlet" method="get">
		<input type="hidden" name="action" value="pageByPrice">
		价格:<input id="min" type="text" name="min" value="${param.min}"> 元 -
			<input id="max" type="text" name="max" value="${param.max}"><input type="submit" value="查询" />
	</form>
</div>

修改在区间[min,max]里显示出来数据的页码

protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1 获取请求的参数 pageNo 和 pageSize,min,max
    int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
    int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
    int min = WebUtils.parseInt(req.getParameter("min"), 0);
    int max = WebUtils.parseInt(req.getParameter("max"), Integer.MAX_VALUE);

    //2 调用BookService.pageByPrice(pageNo,pageSize):Page对象
    Page<Book> page = bookService.pageByPrice(pageNo, pageSize, min, max);

    StringBuilder sb = new StringBuilder("client/bookServlet?action=pageByPrice");
    // 如果最小价格的参数,追加到分页条的地址参数中
    if(req.getParameter("min") != null){
        sb.append("&min=").append(req.getParameter("min"));
    }
    // 如果最大价格的参数,追加到分页条的地址参数中
    if(req.getParameter("max") != null){
        sb.append("&max=").append(req.getParameter("max"));
    }
    page.setUrl(sb.toString());

    //3 保存Page对象到Request域中
    req.setAttribute("page",page);

    //4 请求转发到pages/manager/book_manager.jsp页面
    req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值