欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

《尚硅谷》JavaWeb课程书城项目笔记——第五阶段(3):书城首页模块

时间:2023-07-31

目录

1、首页图书表单的显示

2、分页代码的优化

3、价格筛选功能的实现


1、首页图书表单的显示

新建ClientBookServlet类

package web;import pojo.Book;import pojo.Page;import service.BookService;import service.impl.BookServiceImpl;import utils.WebUtils;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class ClientBookServlet extends baseServlet{ private BookService bookService = new BookServiceImpl(); 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(int pageNo,int pageSize)==Page,获取Page对象 Page page = bookService.page(pageNo,pageSize); // 3 将page保存到域对象中 req.setAttribute("page",page); // 4 请求转发到pages/client/index.jsp页面 req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp); }}

ClientBookServlet web.ClientBookServlet ClientBookServlet /client/bookServlet

由index.jsp跳转到ClientBookServlet

由ClientBookServlet查询分页数据并在client/index.jsp显示

<%--开始显示图书--%>书名:${book.name}作者:${book.author}价格:¥${book.price}销量:${book.sales}库存:${book.stock}<%--结束显示图书--%>

2、分页代码的优化

将分页代码中的请求地址抽取成page类中的url属性

在类Page中创建属性url

// 页码引用地址 private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; }

将图书管理模块与首页模块分页功能的引用地址更改

首页上一页

下一页末页

location.href="${pageScope.basePath}${requestScope.page.url}&pageNo=" + pageNo;

在Servlet模块中给url赋值

// 设置页码的引用地址page.setUrl("manager/bookServlet?action=page");

// 设置页码的引用地址page.setUrl("client/bookServlet?action=page");

将分页功能抽取出来,使用静态包含进行引用

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%--分页条的开始--%> <%--页码大于1,才显示首页和上一页--%> 首页 上一页 <%--页码输出开始--%> <%--情况1:总的页码数小于等于5--%> <%--情况2:总的页码数大于5页--%> <%--子情况1:当前页面在前三页--%> <%--子情况2:当前页面在最后三页--%> <%--子情况3:当前页面在中间--%> 【${i}】 ${i} <%--页码输出结束--%> <%--页码小于总页码,才显示末页和下一页--%> 下一页 末页 共${requestScope.page.pageTotal}页,${requestScope.page.pageTotalCount}条记录 到第 <%--分页条的结束--%>

<%--静态包含分页功能--%><%@ include file="/pages/common/page_nav.jsp"%>

3、价格筛选功能的实现

Dao层代码编写

BookDao

Integer queryForPageTotalCountByPrice(int min, int max); List 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 queryForPageItemsByPrice(int begin, int pageSize, int min, int max) { String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` `imgPath` " + "from t_book where price between ? and ? order by price limit ?,?"; List books = queryForList(Book.class, sql,min,max,begin, pageSize); return books; }

测试

@Test public void queryForPageTotalCountByPrice() { System.out.println(bookDao.queryForPageTotalCountByPrice(5,50)); } @Test public void queryForPageItemsByPrice() { for (Book book : bookDao.queryForPageItemsByPrice(0, 4,5,50)) { System.out.println(book); } }

Service层代码编写

BookService

Page pageByPrice(int pageNo, int pageSize, int min, int max);

BookServiceImpl

@Override public Page pageByPrice(int pageNo, int pageSize, int min, int max) { Page page = new Page(); page.setPageSize(pageSize); // 1 求总的记录数 Integer pageTotalCount = bookDao.queryForPageTotalCountByPrice(min,max); page.setPageTotalCount(pageTotalCount); // 2 求总的页码 Integer pageTotal = pageTotalCount / pageSize; if (pageTotalCount % pageSize > 0) { pageTotal++; } page.setPageTotal(pageTotal); // 数据边界的有效检查 if(pageNo < 1) { pageNo = 1; } if (pageNo > pageTotal) { pageNo = pageTotal; } page.setPageNo(pageNo); // 3 求当前页数据 // 设置开始索引位置 int begin = (pageNo - 1) * Page.PAGE_SIZE; List items = bookDao.queryForPageItemsByPrice(begin,pageSize,min,max); page.setItems(items); return page; }

测试 

@Test public void pageByPrice() { System.out.println(bookService.pageByPrice(1, 4,5,50)); }

Servlet层代码编写

ClientBookServlet

protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1 获取请求的参数pageNo、ageSize、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(int pageNo,int pageSize,min,max)==Page,获取Page对象 Page page = bookService.pageByPrice(pageNo,pageSize,min,max); // 设置页码的引用地址 page.setUrl("client/bookServlet?action=pageByPrice"); // 3 将page保存到域对象中 req.setAttribute("page",page); // 4 请求转发到pages/manager/book_manager.jsp页面 req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp); }

显示页面的修改

修改表单的提交地址、增加隐藏输入框指明调用的方法、价格搜索框数据的回显

设置筛选数据的页码跳转

ClientBookServlet中的pageByPrice方法

// 设置页码的引用地址 StringBuilder stringBuilder = new StringBuilder("client/bookServlet?action=pageByPrice"); if (req.getParameter("min") != null) { stringBuilder.append("&min=").append(req.getParameter("min")); } if (req.getParameter("max") != null) { stringBuilder.append("&max=").append(req.getParameter("max")); } page.setUrl(stringBuilder.toString());


注:本文章所含内容来源于尚硅谷教育,仅供学习参考使用。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。