• 学习总结—购物商城(第四周)


      第四周
    所花时间 15h左右
    代码量 1000行左右
    博客量 3篇
    学到的知识点 文件上传、python爬取疫情实时数据、购物网站的基本功能

    概述:最近在看一个有关网上商城项目的视频,从中学到了很多知识,包括多表的使用,ajax的使用,分页功能的实现,实现了热门商品、最新商品控制显示条数的功能,通过商品类别显示商品信息,以及通过弹出层显示商品信息的使用,商品信息以json格式传出,所以对json也有了一定的认识。算是从头到尾看完了整个项目的开发过程,掌握了一些基本的开发流程和技术,但是还有很多自己无法掌握的技术,等以后再慢慢学习吧。。。ajax和分页在之前已经总结过,所以这里只给出了热门商品、最新商品控制显示条数的功能,通过商品类别显示商品信息,以及通过弹出层显示商品信息方法。

    一、热门商品、最新商品控制显示条数的功能

    这个没什么难的,就是一些sql语句的使用。下面是主要代码

    public class ProductDao {
    
        public ArrayList<Product> findHotProductList() {
            String sql = "select * from product where is_host=? limit ?,?";
            ArrayList<Product> list = new ArrayList<>();
            Connection con = null;
            Statement state = null;
            con = DBUtil.getConn();
            PreparedStatement ps;
            ResultSet rs1 = null;
            try {
                ps = con.prepareStatement(sql);
                ps.setInt(1, 1);
                ps.setInt(2, 0);
                ps.setInt(3, 2);
                rs1 = ps.executeQuery();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            Product bean = null;
            try {
                while (rs1.next()) {
                    int pid = rs1.getInt("pid");
                    String pname = rs1.getString("pname");
                    String price = rs1.getString("price");
                    String pimage = rs1.getString("pimage");
                    String pdate = rs1.getString("pdate");
                    bean = new Product(pid, pname, price, pimage, pdate);
                    list.add(bean);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            DBUtil.close(rs1, state, con);
            return list;
        }
    
        public ArrayList<Product> findNewProductList() {
            String sql = "select * from product order by pdate desc limit ?,?";
            ArrayList<Product> list = new ArrayList<>();
            Connection con = null;
            Statement state = null;
            con = DBUtil.getConn();
            PreparedStatement ps;
            ResultSet rs1 = null;
            try {
                ps = con.prepareStatement(sql);
                ps.setInt(1, 0);
                ps.setInt(2, 2);
                rs1 = ps.executeQuery();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            Product bean = null;
            try {
                while (rs1.next()) {
                    int pid = rs1.getInt("pid");
                    String pname = rs1.getString("pname");
                    String price = rs1.getString("price");
                    String pimage = rs1.getString("pimage");
                    String pdate = rs1.getString("pdate");
                    bean = new Product(pid, pname, price, pimage, pdate);
                    list.add(bean);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            DBUtil.close(rs1, state, con);
            return list;
        }
    dao

    二、通过商品类别显示商品信息

    这个功能主要通过ajax来获取商品类别信息,然后根据商品类别的表中的cid来找到商品表中所对应的cid,使用到了多表的结合。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <script src="js/bootstrap.min.js" type="text/javascript"></script>
    
    <body style="background-color: #d0dfe9">
        <div>
            <div>
                <ul id="categoryUl">
                    <%-- <c:forEach items="${List }" var="category">
                            <li><a href="#">${category.cname }</a></li>
                        </c:forEach> --%>
    
                </ul>
            </div>
            <div>
            <table class="table">
                    <thead>
                        <tr bgcolor="#91c3e9">
                            <th>商品名</th>
                            <th>图片</th>
                            <th>上架日期</th>
                            <th>价格</th>
                            <th>操作</th>
                        </tr>
                    </thead>
                    <tbody>
    
                        <c:forEach items="${pageBean.list }" var="pro">
                            <tr>
                                <td>${pro.pname }</td>
                                <td><img src="${pageContext.request.contextPath }/${pro.pimage}" width="70" height="60"></td>
                                <td>${pro.pdate }</td>
                                <td>${pro.price }</td>
                                <td>查看 提交订单</td>
                            </tr>
                        </c:forEach>
    
                    </tbody>
                </table>
            
            </div>
            <!--分页 -->
        <div style=" 380px; margin: 0 auto; margin-top: 50px;" align="center">
            <ul class="pagination" style="text-align: center; margin-top: 10px;">
            
                <!-- 上一页 -->
                <c:if test="${pageBean.currentPage==1 }">
                    <li class="disabled">
                        <a href="javascript:void(0);" aria-label="Previous">
                            <span aria-hidden="true">&laquo;</span>
                        </a>
                    </li>
                </c:if>
                <c:if test="${pageBean.currentPage!=1 }">
                    <li>
                        <a href="${pageContext.request.contextPath}/ProductListByCidServlet?cid=${cid}&currentPage=${pageBean.currentPage-1 }" aria-label="Previous">
                            <span aria-hidden="true">&laquo;</span>
                        </a>
                    </li>
                </c:if>
                
            
                <!-- 显示每一页 -->
                <c:forEach begin="1" end="${pageBean.totalPage }" var="page">
                    <!-- 判断是否是当前页 -->
                    <c:if test="${page==pageBean.currentPage }">
                        <li class="active"><a href="javascript:void(0);">${page }</a></li>
                    </c:if>
                    <c:if test="${page!=pageBean.currentPage }">
                        <li><a href="${pageContext.request.contextPath}/ProductListByCidServlet?cid=${cid}&currentPage=${page }">${page }</a></li>
                    </c:if>
                </c:forEach>
                
                
                <!-- 下一页 -->
                <c:if test="${pageBean.currentPage==pageBean.totalPage }">
                    <li class="disabled">
                        <a href="javascript:void(0);" aria-label="Next"> 
                            <span aria-hidden="true">&raquo;</span>
                        </a>
                    </li>
                </c:if>
                <c:if test="${pageBean.currentPage!=pageBean.totalPage }">
                    <li>
                        <a href="${pageContext.request.contextPath}/ProductListByCidServlet?cid=${cid}&currentPage=${pageBean.currentPage+1 }" aria-label="Next"> 
                            <span aria-hidden="true">&raquo;</span>
                        </a>
                    </li>
                </c:if>
                
            </ul>
        </div>
        <!-- 分页结束 -->
            
        </div>
        <script type="text/javascript">
                //header.jsp加载完毕后 去服务器端获得所有的category数据
                $(function(){
                    var content = "";
                    $.post(
                        "CategoryListServlet",
                        function(data){
                            //[{"cid":"xxx","cname":"xxxx"},{},{}]
                            //动态创建<li><a href="#">${category.cname }</a></li>
                            for(var i=0;i<data.length;i++){
                                content+="<li><a href='ProductListByCidServlet?cid="+data[i].cid+"'>"+data[i].cname+"</a></li>";
                            }
                            
                            //将拼接好的li放置到ul中
                            $("#categoryUl").html(content);
                        },
                        "json"
                    );
                });
            </script>
    </body>
    </html>
    jsp
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            ProductService service = new ProductService();
            System.out.println("666");
            ArrayList<Category> List = service.findAllCategory();
            Gson gson = new Gson();
            String json = gson.toJson(List);
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write(json);
        }
    servlet
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
    
            //获得cid
            String cid = request.getParameter("cid");
            
            String currentPageStr = request.getParameter("currentPage");
            if(currentPageStr==null) currentPageStr="1";
            int currentPage = Integer.parseInt(currentPageStr);
            int currentCount = 2;
            ProductService service = new ProductService();
            PageBean pageBean = service.findProductListByCid(cid,currentPage,currentCount);
            
            request.setAttribute("pageBean", pageBean);
            request.setAttribute("cid", cid);
            request.getRequestDispatcher("/product.jsp").forward(request, response);
        }
    servlet
    public PageBean findProductListByCid(String cid, int currentPage, int currentCount) {
            // 封装一个PageBean 返回web层
            PageBean<Product> pageBean = new PageBean<Product>();
    
            // 1、封装当前页
            pageBean.setCurrentPage(currentPage);
            // 2、封装每页显示的条数
            pageBean.setCurrentCount(currentCount);
            // 3、封装总条数
            int totalCount = 0;
            totalCount = dao.getCount(cid);
            pageBean.setTotalCount(totalCount);
            // 4、封装总页数
            int totalPage = (int) Math.ceil(1.0 * totalCount / currentCount);
            pageBean.setTotalPage(totalPage);
    
            // 5、当前页显示的数据
            // select * from product where cid=? limit ?,?
            // 当前页与起始索引index的关系
            int index = (currentPage - 1) * currentCount;
            ArrayList<Product> list = null;
            list = dao.findProductByPage(cid, index, currentCount);
            pageBean.setList(list);
    
            return pageBean;
        }
    service
        public int getCount(String cid) {
    
            int ans = 0;
            String sql = "select * from product where cid='" + cid + "'";
            Connection con = null;
            Statement state = null;
            ResultSet rs = null;
            con = DBUtil.getConn();
            try {
                state = con.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) {
                    ans++;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            DBUtil.close(rs, state, con);
            return ans;
        }
    
        public ArrayList<Product> findProductByPage(String cid, int index, int currentCount) {
            ArrayList<Product> list = new ArrayList<>();
            String sql = "select * from product where cid=? limit ?,?";
            Connection con = null;
            Statement state = null;
            PreparedStatement ps;
            con = DBUtil.getConn();
            ResultSet rs1 = null;
            try {
                ps = con.prepareStatement(sql);
                ps.setString(1, cid);
                ps.setInt(2, index);
                ps.setInt(3, currentCount);
                rs1 = ps.executeQuery();
            } catch (SQLException e1) {
                // TODO 自动生成的 catch 块
                e1.printStackTrace();
            }
            Product bean = null;
            try {
                while (rs1.next()) {
                    int pid = rs1.getInt("pid");
                    String pname = rs1.getString("pname");
                    String price = rs1.getString("price");
                    String pimage = rs1.getString("pimage");
                    String pdate = rs1.getString("pdate");
                    bean = new Product(pid, pname, price, pimage, pdate);
                    list.add(bean);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            DBUtil.close(rs1, state, con);
            return list;
        }
    dao

     

     三、通过弹出层显示商品信息

    使用前需要导入相关jar包

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
    </head>
    <!-- 弹出层插件 -->
            <link href="${pageContext.request.contextPath}/css/popup_layer.css" type="text/css" rel="stylesheet"/>
            <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.8.3.min.js"></script>
            <script type="text/javascript" src="${pageContext.request.contextPath}/js/popup_layer.js"></script>        
            <!-- 调用插件弹出层的方法 -->
            <script type="text/javascript">
                $(function(){
                    //弹出层插件调用
                    new PopupLayer({
                        trigger:".clickedElement",//触发点 点击谁弹出div
                        popupBlk:"#showDiv",//弹出哪个div
                        closeBtn:"#closeBtn",//关闭按钮
                        useOverlay:true
                    });
                    
                });
                
                //点击按钮查询某个订单的详情
                function FindByPid(pid){
                    //清理上一次显示的内容覆盖
                    $("#showDivTab").html("");
                    $("#shodDivOid").html("");
                    $("#loading").css("display","block");
                    
                    
                    //ajax异步访问数据
                    $.post(
                        "${pageContext.request.contextPath }/FindByPid",
                        {"pid":pid},
                        function(data){
                            
                            //隐藏加载图片
                            $("#loading").css("display","none");
                
                            var content = "<tr><th width='20%'>图片</th><th width='25%'>商品</th><th width='20%'>价格</th><th width='20%'>是否热门</th></tr>";
                            for(var i=0;i<data.length;i++){
                                content+="<tr>"+
                                "<td>"+
                                    "<img src='${pageContext.request.contextPath }/"+data[i].pimage+"' width='81' height='56'>"+"</td>"+
                                "<td>"+data[i].pname+"</td>"+
                                "<td>¥"+data[i].price+"</td>"+
                                "<td>"+data[i].is_host+"</td>"+
                                "</tr>";
                            }
                            
                            $("#showDivTab").html(content);
                            
                            //订单编号
                            $("#shodDivOid").html(pid);
                        
                        },
                        "json"
                    );
                }
                
                
                
            </script>
    <body style="background-color: #d0dfe9" >
    <div >
    <div>
                <h2 align="center">热门商品</h2>
                <table class="table">
                    <thead>
                        <tr bgcolor="#91c3e9">
                            <th>商品编号</th>
                            <th>商品名</th>
                            <th>图片</th>
                            <th>上架日期</th>
                            <th>价格</th>
                            <th>操作</th>
                        </tr>
                    </thead>
                    <tbody>
    
                        <c:forEach items="${hotProductList }" var="hotPro">
                            <tr>
                                <td>${hotPro.pid }</td>
                                <td>${hotPro.pname }</td>
                                <td><img src="${pageContext.request.contextPath }/${hotPro.pimage}" width="70" height="60"></td>
                                <td>${hotPro.pdate }</td>
                                <td>${hotPro.price }</td>
                                <td><input type="button" value="查询" class="clickedElement"  onclick="FindByPid('${hotPro.pid }')"/></td>
                            </tr>
    
                        </c:forEach>
    
                    </tbody>
                </table>
            </div>
            <div >
                <h2 align="center">最新商品</h2>
                <table class="table">
                    <thead>
                        <tr bgcolor="#91c3e9">
                        <th>商品编号</th>
                        
                            <th>商品名</th>
                            <th>图片</th>
                            <th>上架日期</th>
                            <th>价格</th>
                            <th>操作</th>
                        </tr>
                    </thead>
                    <tbody>
    
                        <c:forEach items="${newProductList }" var="newPro">
                            <tr>
                            <td>${newPro.pid }</td>
                            
                                <td>${newPro.pname }</td>
                                <td><img src="${pageContext.request.contextPath }/${newPro.pimage}" width="70" height="60"></td>
                                <td>${newPro.pdate }</td>
                                <td>${newPro.price }</td>
                                <td><input type="button" value="查询"  class="clickedElement"  onclick="FindByPid('${newPro.pid }')"/></td>
                            </tr>
                        </c:forEach>
    
                    </tbody>
                </table>
            </div>
            <!-- 弹出层 HaoHao added -->
            <div id="showDiv" class="blk" style="display:none;">
                <div class="main">
                    <h2>编号:<span id="shodDivOid" style="font-size: 13px;color: #999"></span></h2>
                    <a href="javascript:void(0);" id="closeBtn" class="closeBtn">关闭</a>
                    <div id="loading" style="padding-top:30px;text-align: center;">
                        <img alt="" style="100px;height:100px;" src="${pageContext.request.contextPath }/upload/loading.gif">
                    </div>
                    <div style="padding:20px;">
                        <table id="showDivTab" style="100%">
                            
                        </table>
                    </div>
                </div>
                
            </div>
    </div>
    </body>
    </html>
    jsp

  • 相关阅读:
    HTTPs与HTTP的区别&HTTPs如何建立连接
    HTTP协议常见状态码和字段
    服务器负载均衡
    ARP协议工作原理
    C++智能指针
    C++类型转换
    Rust 只出现一次的数字 两种解法
    Rust 存在重复元素 两种解法
    Rust 旋转数组
    Rust 动态规划 买卖股票的最佳时机 II
  • 原文地址:https://www.cnblogs.com/MoooJL/p/12489954.html
Copyright © 2020-2023  润新知