栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

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


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号