Javaweb——(day08)书城项目3-5

文章目录

  • 书城项目第三阶段
    • 1.页面jsp动态化
    • 2.抽取页面中相同的内容
    • 3.登录,注册错误提示,及表单回显
    • 4.BaseServlet的抽取
    • 5.使用EL表达式修改表单回显
  • 书城项目第四阶段——图书模块
    • 1.MVC概念
    • 2.编写图书模块的数据库表
    • 3.编写图书模块的JavaBean
    • 4.编写图书模块的Dao和测试Dao
    • 5.编写图书模块的Service和测试Service
    • 6.编写图书模块的Web层,和页面联调测试
      • 1.图书列表功能的实现
      • 2.前后台的简单介绍
      • 3.添加图书功能的实现
      • 4.删除图书功能的实现
      • 5.修改图书功能的实现
  • 书城项目第五阶段——分页
    • 1.图书分页
      • 1.分页模型Page的抽取
      • 2.分页的初步实现
      • 3.首页、上一页、下一页、末页实现
      • 4.分页模块中跳转到指定页数功能实现
      • 5.分页模块中,页码1,2,3,4,5的显示,要显示5个页码,并且页码可以点击跳转
      • 6.修改分页后,增加,删除,修改图书信息的回显页面
    • 2.首页index.jsp的跳转
    • 3.分页条的抽取
      • 抽取分页条中请求地址为url变量
    • 4.首页价格搜索
    • 5.价格区间搜索并分页功能的实现

书城项目第三阶段

1.页面jsp动态化

1、在html页面顶行添加page指令。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

2、修改文件后缀名为:.jsp

Javaweb——(day08)书城项目3-5_第1张图片
Javaweb——(day08)书城项目3-5_第2张图片

3、使用IDEA搜索替换.html为.jsp

Javaweb——(day08)书城项目3-5_第3张图片
Javaweb——(day08)书城项目3-5_第4张图片

替换结果,及运行检测:

Javaweb——(day08)书城项目3-5_第5张图片
Javaweb——(day08)书城项目3-5_第6张图片

2.抽取页面中相同的内容

Javaweb——(day08)书城项目3-5_第7张图片

1.head中css、jquery、base标签——head.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme()
            + "://"
            + request.getServerName()
            + ":"
            + request.getServerPort()
            + request.getContextPath()
            + "/";
%>


    Title








在这里插入图片描述

<%-- 静态包含 base标签、css样式、jQuery文件 --%>
	<%@ include file="/pages/common/head.jsp"%>
	


	
	
	
	
名称 价格 作者 销量 库存 操作
${book.name} ${book.price} ${book.author} ${book.sales} ${book.stock} 修改 删除
添加图书
<%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%>

web.xml配置

    <servlet>
        <servlet-name>BookServletservlet-name>
        <servlet-class>github.web.BookServletservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>BookServletservlet-name>
        <url-pattern>/manager/bookServleturl-pattern>
    servlet-mapping>

运行结果如下:

Javaweb——(day08)书城项目3-5_第31张图片


2.前后台的简单介绍

Javaweb——(day08)书城项目3-5_第32张图片


3.添加图书功能的实现

在这里插入图片描述

当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键F5,就会发起浏览器记录的最后一次请求。


Javaweb——(day08)书城项目3-5_第33张图片

BookServlet程序中添加add方法

    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     

//        1、获取请求的参数==封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook()保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//                /manager/bookServlet?action=list
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req, resp);

        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
    }

修改book_edit.jsp页面

Javaweb——(day08)书城项目3-5_第34张图片

<%@ page contentType="text/html;charset=UTF-8" language="java" %>




编辑图书
	<%-- 静态包含 base标签、css样式、jQuery文件 --%>
	<%@ include file="/pages/common/head.jsp"%>



		

		
名称 价格 作者 销量 库存 操作
<%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%>

运行结果:

Javaweb——(day08)书城项目3-5_第35张图片

Javaweb——(day08)书城项目3-5_第36张图片


4.删除图书功能的实现

Javaweb——(day08)书城项目3-5_第37张图片

BookServlet程序中的delete方法

protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
//        1、获取请求的参数id,图书编程
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
//        2、调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
//        3、重定向回图书列表管理页面
//                /book/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
    }

给WebUtils工具类添加转换 int 类型的工具方法

    /**
     * 将字符串转换成为int类型的数据
     * @param strInt
     * @param defaultValue
     * @return
     */
    public static int parseInt(String strInt,int defaultValue) {
     
        try {
     
            return Integer.parseInt(strInt);
        } catch (Exception e) {
     
            e.printStackTrace();
        }
        return defaultValue;
    }

修改删除的连接地址

Javaweb——(day08)书城项目3-5_第38张图片

删除

给删除添加确认提示操作

Javaweb——(day08)书城项目3-5_第39张图片


运行结果如下:

Javaweb——(day08)书城项目3-5_第40张图片


5.修改图书功能的实现

Javaweb——(day08)书城项目3-5_第41张图片

更新【修改】的请求地址

Javaweb——(day08)书城项目3-5_第42张图片

修改

BookServlet程序中添加getBook方法

protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
        //1 获取请求的参数图书编号
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
        //2 调用bookService.queryBookById查询图书
        Book book = bookService.queryBookById(id);
        //3 保存到图书到Request域中
        req.setAttribute("book", book) ;
        //4 请求转发到。pages/manager/book_edit.jsp页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }

在book_edit.jsp页面中显示修改的数据

Javaweb——(day08)书城项目3-5_第43张图片


	
	
	
	
	
	

运行结果如下:

Javaweb——(day08)书城项目3-5_第44张图片

在BookServlet程序中添加update方法

    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
//        1、获取请求的参数==封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.updateBook( book );修改图书
        bookService.updateBook(book);
//        3、重定向回图书列表管理页面
//        地址:/工程名/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
    }

解决book_edit.jsp页面,即要实现添加,又要实现修改操作。

Javaweb——(day08)书城项目3-5_第45张图片

书城项目第五阶段——分页

1.图书分页

分页模块的分析:

Javaweb——(day08)书城项目3-5_第46张图片

1.分页模型Page的抽取

public class Page<T> {
     
    public static final Integer PAGE_SIZE=4;
    //当前页码
    private Integer pageNo;
    //总页码
    private Integer pageTotal;
    //当前页显示数量
    private Integer pageSize=PAGE_SIZE;
    //总记录数
    private Integer pageTotalCount;
    //当前页数据
    private List<T> items;

    public Integer getPageNo() {
     
        return pageNo;
    }

    public void setPageNo(Integer pageNo) {
     
        this.pageNo = pageNo;
    }

    public Integer getPageTotal() {
     
        return pageTotal;
    }

    public void setPageTotal(Integer pageTotal) {
     
        this.pageTotal = pageTotal;
    }

    public Integer getPageSize() {
     
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
     
        this.pageSize = pageSize;
    }

    public Integer getPageTotalCount() {
     
        return pageTotalCount;
    }

    public void setPageTotalCount(Integer pageTotalCount) {
     
        this.pageTotalCount = pageTotalCount;
    }

    public List<T> getItems() {
     
        return items;
    }

    public void setItems(List<T> items) {
     
        this.items = items;
    }

    @Override
    public String toString() {
     
        return "Page{" +
                "pageNo=" + pageNo +
                ", pageTotal=" + pageTotal +
                ", pageSize=" + pageSize +
                ", pageTotalCount=" + pageTotalCount +
                ", items=" + items +
                '}';
    }
}

2.分页的初步实现

BookDao.java代码:

    Integer queryForPageTotalCount();

    List<Book> queryForPageItems(int begin, int pageSize);

BookDaoImpl.java代码:

    @Override
    public Integer queryForPageTotalCount() {
     
        String sql = "select count(*) from t_book";
        Number count = (Number) queryForSingle(sql);
        return count.intValue();
    }

    @Override
    public List<Book> queryForPageItems(int begin, int pageSize) {
     
        String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath from t_book limit ?,?";
        return queryForList(Book.class,sql,begin,pageSize);
    }

BookService.java代码:

    Page<Book> page(int pageNo, int pageSize);

BookServiceImpl.java代码:

 	@Override
    public Page<Book> page(int pageNo, int pageSize) {
     
        Page<Book> page = new Page<Book>();
        // 设置每页显示的数量
        page.setPageSize(pageSize);
        // 求总记录数
        Integer pageTotalCount = bookDao.queryForPageTotalCount();
        // 求总页码
        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.queryForPageItems(begin,pageSize);
        // 设置当前页数据
        page.setItems(items);
        return page;
    }

BookServlet.java程序的代码:

    /**
     * 处理分页功能
     * @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/manager/book_manager.jsp").forward(req,resp);
    }

manager_menu.jsp中【图书管理】请求地址的修改:

Javaweb——(day08)书城项目3-5_第47张图片

<a href="manager/bookServlet?action=page">图书管理</a>

book_manager.jsp修改:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>
	<%-- 静态包含 base标签、css样式、jQuery文件 --%>
	<%@ include file="/pages/common/head.jsp"%>
	<script type="text/javascript">
		$(function () {
     
			// 给删除的a标签绑定单击事件,用于删除的确认提示操作
			$("a.deleteClass").click(function () {
     
				// 在事件的function函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。
				/**
				 * confirm是确认提示框函数
				 * 参数是它的提示内容
				 * 它有两个按钮,一个确认,一个是取消。
				 * 返回true表示点击了,确认,返回false表示点击取消。
				 */
				return confirm("你确定要删除【" + $(this).parent().parent().find("td:first").text() + "】?");
				// return false// 阻止元素的默认行为===不提交请求
			});
		});
	</script>
</head>
<body>
	
	<div id="header">
			<img class="logo_img" alt="" src="../../static/img/login.png" >
			<span class="wel_word">图书管理系统</span>
		<%-- 静态包含 manager管理模块的菜单  --%>
		<%@include file="/pages/common/manager_menu.jsp"%>
	</div>
	
	<div id="main">
		<table>
			<tr>
				<td>名称</td>
				<td>价格</td>
				<td>作者</td>
				<td>销量</td>
				<td>库存</td>
				<td colspan="2">操作</td>
			</tr>

			<c:forEach items="${requestScope.page.items}" var="book">
				<tr>
					<td>${
     book.name}</td>
					<td>${
     book.price}</td>
					<td>${
     book.author}</td>
					<td>${
     book.sales}</td>
					<td>${
     book.stock}</td>
					<td><a href="manager/bookServlet?action=getBook&id=${book.id}">修改</a></td>
					<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</a></td>
				</tr>
			</c:forEach>
			
			<tr>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td><a href="pages/manager/book_edit.jsp">添加图书</a></td>
			</tr>	
		</table>

		<div id="page_nav">
			<a href="#">首页</a>
			<a href="#">上一页</a>
			<a href="#">3</a>
			【${
     requestScope.page.pageNo}<a href="#">5</a>
			<a href="#">下一页</a>
			<a href="#">末页</a>共${
     requestScope.page.pageTotal}页,${
     requestScope.page.pageTotalCount}条记录
			到第<input value="4" name="pn" id="pn_input"/><input type="button"value="确定">
		</div>

	</div>

	<%--静态包含页脚内容--%>
	<%@include file="/pages/common/footer.jsp"%>
</body>
</html>

运行结果如下:

Javaweb——(day08)书城项目3-5_第48张图片

3.首页、上一页、下一页、末页实现


运行结果:

Javaweb——(day08)书城项目3-5_第49张图片

Javaweb——(day08)书城项目3-5_第50张图片

4.分页模块中跳转到指定页数功能实现


Page对象中的修改:

public void setPageNo(Integer pageNo) {
        // 数据边界的有效检查
        if (pageNo < 1) {
            pageNo = 1;
        }
        if (pageNo > pageTotal) {
            pageNo = pageTotal;
        }

        this.pageNo = pageNo;
    }

BookService中page方法的修改:

@Override
    public Page page(int pageNo, int pageSize) {
        Page page = new Page();
        // 设置每页显示的数量
        page.setPageSize(pageSize);
        // 求总记录数
        Integer pageTotalCount = bookDao.queryForPageTotalCount();
        //设置总记录数
        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 items = bookDao.queryForPageItems(begin,pageSize);
        // 设置当前页数据
        page.setItems(items);
        return page;
    }

5.分页模块中,页码1,2,3,4,5的显示,要显示5个页码,并且页码可以点击跳转

需求:显示5个连续的页码,而且当前页码在中间。除了当前页码之外,每个页码都可以点击跳到指定页。

<%--页码输出的开始	--%>
			
				<%--情况1:如果总页码小于等于5的情况,页码的范围是:1-总页码--%>
				
					
					
				
				<%--情况2:总页码大于5的情况--%>
				
					
					<%--小情况1:当前页码为前面3个:1,2,3的情况,页码范围是:1-5.--%>
					
						
						
					
					<%--小情况2:当前页码为最后3个,8,9,10,页码范围是:总页码减4-总页码--%>
					
						
						
					
					<%--小情况3:4,5,6,7,页码范围是:当前页码减2-当前页码加2--%>
					
						
						
					
					
				
			
				
					
						【${i}】
					
					
						${i}
					
				
    		<%--页码输出的结束	--%>

Javaweb——(day08)书城项目3-5_第51张图片

6.修改分页后,增加,删除,修改图书信息的回显页面

1.在修改的请求地址上追加当前页码参数:

Javaweb——(day08)书城项目3-5_第52张图片

2.在book_edit.jsp页面中使用隐藏域记录下pageNo参数:

Javaweb——(day08)书城项目3-5_第53张图片

3.在服务器重定向的时候,获取当前页码追加上进行跳转:

package github.web;

import github.pojo.Book;
import github.pojo.Page;
import github.service.BookService;
import github.service.impl.BookServiceImpl;
import github.utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class BookServlet extends BaseServlet{
     
    private BookService bookService = new BookServiceImpl();

    /**
     * 处理分页功能
     * @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/manager/book_manager.jsp").forward(req,resp);
    }

    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
        //1 通过BookService查询全部图书
        List<Book> books = bookService.queryBooks();
        //2 把全部图书保存到Request域中
        req.setAttribute("books", books);
        //3、请求转发到/pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }

    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 0);
        pageNo+=1;
//        1、获取请求的参数==封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook()保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//                /manager/bookServlet?action=list
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req, resp);
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + pageNo);
    }

    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
//        1、获取请求的参数id,图书编程
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
//        2、调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
//        3、重定向回图书列表管理页面
//                /book/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));
    }

    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
//        1、获取请求的参数==封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.updateBook( book );修改图书
        bookService.updateBook(book);
//        3、重定向回图书列表管理页面
//        地址:/工程名/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo"));
    }

    protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
        //1 获取请求的参数图书编号
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
        //2 调用bookService.queryBookById查询图书
        Book book = bookService.queryBookById(id);
        //3 保存到图书到Request域中
        req.setAttribute("book", book) ;
        //4 请求转发到。pages/manager/book_edit.jsp页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }
}

2.首页index.jsp的跳转

Javaweb——(day08)书城项目3-5_第54张图片

1.在web下新建ClientBookServlet.java文件:

package github.web;

import github.pojo.Book;
import github.pojo.Page;
import github.service.BookService;
import github.service.impl.BookServiceImpl;
import github.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();

    /**
     * 处理分页功能
     * @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);
        page.setUrl("client/bookServlet?action=page");
        //3 保存Page对象到Request域中
        req.setAttribute("page",page);
        //4 请求转发到pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
    }
}

2.在page目录下新建client文件夹,在此文件夹下新建index.jsp文件:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



	
	书城首页

	<%-- 静态包含 base标签、css样式、jQuery文件 --%>
	<%@ include file="/pages/common/head.jsp"%>






价格: 元 -
您的购物车中有3件商品
您刚刚将时间简史加入到了购物车中
书名: ${book.name}
作者: ${book.author}
价格: ¥${book.price}
销量: ${book.sales}
库存: ${book.stock}
<%--静态包含分页条--%> <%@include file="/pages/common/page_nav.jsp"%>
<%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%>

3.WEB-INF文件夹下的web.xml文件配置:

    <servlet>
        <servlet-name>ClientBookServletservlet-name>
        <servlet-class>github.web.ClientBookServletservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>ClientBookServletservlet-name>
        <url-pattern>/client/bookServleturl-pattern>
    servlet-mapping>

4.将web文件夹下的index.jsp文件修改:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--只负责请求转发--%>

Javaweb——(day08)书城项目3-5_第55张图片

3.分页条的抽取

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

1.在page对象中添加url属性,并重新生成get、set方法与tostring:

Javaweb——(day08)书城项目3-5_第56张图片

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

  • 后台的!
    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);
        page.setUrl("manager/bookServlet?action=page");
        //3 保存Page对象到Request域中
        req.setAttribute("page",page);
        //4 请求转发到pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
  • 前台的!
    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);
        page.setUrl("client/bookServlet?action=page");
        //3 保存Page对象到Request域中
        req.setAttribute("page",page);
        //4 请求转发到pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }

3.修改分页条中请求地址为url变量输出,并抽取一个单独的jsp页面


这里太长了,看不懂的话请参考源码,具体步骤就是这样。主要分前后台同时修改!

4.首页价格搜索

Javaweb——(day08)书城项目3-5_第57张图片

1.修改client文件夹下的index.jsp文件:

Javaweb——(day08)书城项目3-5_第58张图片

2.在BookService.java文件下,新建如下方法:

Javaweb——(day08)书城项目3-5_第59张图片

3.ClientBookServlet.java文件添加如下代码:

    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);

        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);
    }

4.继续修改BookServiceImpl.java:

Javaweb——(day08)书城项目3-5_第60张图片

 @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;
    }

5.在BookDao.java添加如下代码:

Javaweb——(day08)书城项目3-5_第61张图片

6.在BookDaoImpl.java文件下添加如下:

package github.dao.impl;

import github.dao.BookDao;
import github.pojo.Book;

import java.util.List;

public class BookDaoImpl extends BaseDao implements BookDao {
     

    @Override
    public int addBook(Book book) {
     
        String sql = "insert into t_book(`name`,`author`,`price`,`sales`,`stock`,`img_path`) values(?,?,?,?,?,?)";
        return update(sql, book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath());
    }

    @Override
    public int deleteBookById(Integer id) {
     
        String sql = "delete from t_book where id = ?";
        return update(sql, id);
    }

    @Override
    public int updateBook(Book book) {
     
        String sql = "update t_book set `name`=?,`author`=?,`price`=?,`sales`=?,`stock`=?,`img_path`=? where id = ?";
        return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath(),book.getId());
    }

    @Override
    public Book queryBookById(Integer id) {
     
        String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath from t_book where id = ?";
        return queryForOne(Book.class, sql,id);
    }

    @Override
    public List<Book> queryBooks() {
     
        String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath from t_book";
        return queryForList(Book.class, sql);
    }

    @Override
    public Integer queryForPageTotalCount() {
     
        String sql = "select count(*) from t_book";
        Number count = (Number) queryForSingle(sql);
        return count.intValue();
    }

    @Override
    public List<Book> queryForPageItems(int begin, int pageSize) {
     
        String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath from t_book limit ?,?";
        return queryForList(Book.class,sql,begin,pageSize);
    }

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

    @Override
    public List<Book> 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 ?,?";
        return queryForList(Book.class,sql,min,max,begin,pageSize);
    }
}

7.局部具体测试:

Javaweb——(day08)书城项目3-5_第62张图片

5.价格区间搜索并分页功能的实现

Javaweb——(day08)书城项目3-5_第63张图片

你可能感兴趣的:(Javaweb,java,web)