• 小项目-购物网站个别功能的具体实现思路-中(新手)



    第六步:
    /*
    *  根据用户需求添加商品进购物车。
    *  首先需要判断用户是否已经进行了登录。 这就需要创建一个过滤器,进行登录请求的过滤。
    *   如果用户登录了就获取用户的请求参数,如商品的名称、简介、数量等。
    *   如果用户没有登录则需要在过滤器中进行拦截,使其跳转到登录界面。
    *
    *   获取完用户的请求参数之后,需要判断商品是否已经加入购物车。
    *   此处需要三个SQL语句:
    *                       查询商品是否加入到购物车。
    *                       如果商品已经被添加则更新商品的数量。
    *                       如果没有则将商品添加进入购物车。
    *   最后,添加成功则提示添加成功。
    *   然后请求转发到原界面。
    *
    *   该Servlet需要配合商品详细信息的JSp页面进行使用。
    * */

    
    
    第七步:
    /*
    *  我的购物车所需要的Servlet。
    *  用户点击我的购物车则跳转到此Servlet中,由此Servlet进行完一系列操作之后再转入负责展示数据的JSP页面
    *  首先,需要获取到登录数据的关键字,判断用户是否登录,如果用户没有登录则跳转到登录界面。
    *  如果用户已经登录过,则获取请求参数(uid),uid在我的数据库表中意为查询我当前账户所添加的所有商品信息。
    *  获取请求参数之后调用DAO层,进行数据的查询。
    *  最后共享参数和请求转发。
    *
    *  该Servlet需要配合购物车的JSP界面进行使用。
    * */
     

    
    
    第八步:
    /*
        *  根据用户需求删除购物车的某个商品。
        *  获取请求参数,获取用户点击的商品的ID,
        *  调用DAO层的SQL语句进行删除。
        *  请求转发到购物车界面。
        *
        *  该Servlet需要配合购物车的JSp页面进行使用。
        * */
     


    第九步:

    /*
        *  根据用户需求删除购物车所有的商品。
        *  用户点击购物车删除所有商品按钮之后,则跳转到此Servlet。
        *  然后通过Session和Map的键值对读取当前账户的uid,也就是获取购物车那张表里的输入当前账户的商品id
        *  第二步调取DAO层里的删除商品的SQL语句,对商品进行删除。
        *  最后重定向到购物车界面。
        *
        *  该Servlet需要配合购物车的JSP页面进行使用。
        * */


    第十步:

     /*
         *  注销登录
         *  用户点击注销登录按钮则跳转到此Servlet。
         *  销毁Session,销毁之后,相当于将登陆信息全部清除。
         *  然后重定向到主界面,因为没有数据的存在而且需要地址栏的改变,所以使用重定向。
         *
         *  该Servlet需要配合个人中心的JSP页面进行使用。
         * */



    • (6)根据用户需求添加商品进购物车。

    所需的Servlet:

    
    @WebServlet("/Addcart.do")
    public class AddcartServlet extends HttpServlet {
        /*
        *  根据用户需求添加商品进购物车。
        *  首先需要判断用户是否已经进行了登录。 这就需要创建一个过滤器,进行登录请求的过滤。
        *   如果用户登录了就获取用户的请求参数,如商品的名称、简介、数量等。
        *   如果用户没有登录则需要在过滤器中进行拦截,使其跳转到登录界面。
        *
        *   获取完用户的请求参数之后,需要判断商品是否已经加入购物车。
        *   此处需要三个SQL语句:
        *                       查询商品是否加入到购物车。
        *                       如果商品已经被添加则更新商品的数量。
        *                       如果没有则将商品添加进入购物车。
        *   最后,添加成功则提示添加成功。
        *   然后请求转发到原界面。
        *
        *   该Servlet需要配合商品详细信息的JSp页面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                // 判断当前是否有用户登陆
                Map islogin = (Map) req.getSession().getAttribute("W");
                // 获取请求参数,商品的名称、简介、数量等。
                String pid = req.getParameter("pid");
                String num = req.getParameter("num");
                Integer uid = (Integer) islogin.get("uid");
    
                IProductDAO dao = new ProductDAOImpl();
                // 判断商品是否已经加入购物车
                if (dao.AddCart(pid,uid)){
                    // 如果商品已经被添加就更新商品的数量。
                    dao.updateCart(pid,num,uid);
                }else{
                    // 如果商品没有加入过购物车就将商品加入到购物车。
                    dao.insertCart(pid,num,uid);
                }
                // 如果添加成功,则提示添加成功
                req.setAttribute("l","添加成功");
                //请求转发。
                req.getRequestDispatcher("/product").forward(req,resp);
            }
    
        }

    所需要的JSp页面:

    <body>
           <!-- 头部导航 -->
            <jsp:include page="/views/header.jsp"></jsp:include>
            <c:choose>
                <%--empty map
                    判断的是共享数据是否为空
                    而不是映射路径
                --%>
                <c:when test="${empty map}">
                    <h1>对不起,暂无该商品信息</h1>
                </c:when>
    
                <c:otherwise>
                    <div class="wrap">
                        <img src="${map.pimage}" />
                        <div class="description">
    
    
                            <form action="/shop/Addcart.do" method="post">
                                ${l}
                                <h2>${map.pdesc}</h2>
                                <div class="old_price">
                                    原价:
                                    <span>
                            ¥${map.marketPrice}
                        </span>
                                </div>
                                <div class="price">
                                    折扣价:
                                    <span>
                            ¥${map.shopPrice}
                        </span>
                                </div>
    
                                <div>
                                    尺码:均码
                                </div>
    
                                <div class="count">
                                    数量:
                                    <span class="s"></span>
                                    <input type="text" value="1" name="num" class="num" />
                                    <span class="s"></span>
                                </div>
                                <input type="hidden"  name="pid"  value="${map.pid}" />
                                <div>
                                    <input type="submit" value="加入购物车" class="goods_cart" />
                                </div>
    
                                <div>
                                    <input type="submit" value="立即购买" class="buy"/>
                                </div>
                            </form>
                        </div>
                    </div>
                </c:otherwise>
    
            </c:choose>

    所需要的接口和实现类:

     /*
        * 判断商品是否已经加入购物车
        * 需要返回ID
        * */
        boolean AddCart(String pid,Integer uid);
    
        /*
        *  添加商品进购物车
        *  添加Pid、UId和商品数量。
        * */
        boolean insertCart(String uid,String pid,Integer num);
    
        /*
        *  数量的更新。
        *  多次添加同一商品需要进行商品数量的更新
        * */
        boolean updateCart(String pid,String num,Integer uid);
    
    
    实现类:
    
    
      /*
         * 判断商品是否已经加入购物车
         * 需要返回ID
         * */
        @Override
        public boolean AddCart(String pid, Integer uid) {
           String sql =  "select * from car where pid = ? and uid = ?";
    
            List<Map<String, Object>> list = DBUtil.excuteQuery(sql, pid, uid);
    
            return list.size()>0;
        }
    
        /*
         * 添加商品进购物车
         * 添加Pid、UId和商品数量。
         * */
        @Override
        public boolean insertCart(String pid, String num,Integer uid) {
            String sql = "insert into car (uid,pid,num) values (?,?,?)";
    
            return DBUtil.excuteUpdate(sql,uid,pid,num);
        }
    
        /*
         * 数量的更新。
         * 多次添加同一商品需要进行商品数量的更新
         * */
        @Override
        public boolean updateCart(String pid, String num,Integer uid) {
            String sql = "update car set num = num+? where uid = ? and pid = ?";
            return DBUtil.excuteUpdate(sql,num,uid,pid);
        }

    流程:

        根据绑定的ID获取到是哪个商品-进入Servlet中进行购物车是否有此商品的判断、如果有则更新数量、如果没有则添加进去-返回到JSP页面进行提示是否添加成功



    • (7)点击进入我的购物车

    所需的Servlet:

    
    @WebServlet("/scart.do")
    public class ScartServlet extends HttpServlet {
        /*
        *  我的购物车所需要的Servlet。
        *  用户点击我的购物车则跳转到此Servlet中,由此Servlet进行完一系列操作之后再转入负责展示数据的JSP页面
        *  首先,需要获取到登录数据的关键字,判断用户是否登录,如果用户没有登录则跳转到登录界面。
        *  如果用户已经登录过,则获取请求参数(uid),uid在我的数据库表中意为查询我当前账户所添加的所有商品信息。
        *  获取请求参数之后调用DAO层,进行数据的查询。
        *  最后共享参数和请求转发。
        *
        *  该Servlet需要配合购物车的JSP界面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 获取登录数据的关键字,判断是否登录
         // W为前文登录时的关键字。
    Map islogin = (Map) req.getSession().getAttribute("W"); // 获取请求参数。 Integer uid = (Integer) islogin.get("uid"); // 调用DAO层 IProductDAO dao = new ProductDAOImpl(); List<Map<String, Object>> allcar = dao.allcar(uid); // 共享参数。 req.setAttribute("Wcc",allcar); // 请求转发 req.getRequestDispatcher("/views/goodscart.jsp").forward(req,resp); } }

    所需要的JSp页面:

    <body>
              <!-- 头部导航 -->
            <jsp:include page="/views/header.jsp"></jsp:include>
    
            <!-- 購物車 -->
            <div class="wrap">
                <div class="title">
                    <ul>
                    <li><input type="checkbox" name="" id="" value="" /> 全选</li>
                    <li>商品</li>
                    <li>商品信息</li>
                    <li>单价(元)</li>
                    <li>数量</li>
                    <li>小计(元)</li>
                    <li>操作</li>
                   </ul>
                </div>
                
    
                <c:forEach var="W" items="${Wcc}">
                <div class="goods">
                    <ul>
                        <li><img src="${W.pimage}"/> ${W.pname}</li>
                        <li>尺碼:均碼</li>
                        <li class="price">${W.pPrice}</li>
                        <li>
                            <div class="count">
                            
                            <span class="s"></span>
                            <input type="text" value="${W.num}" name="num" class="num" />
                            <span class="s"></span>
                            </div>
                        
                        </li>
                        <li class="subtotal">${W.pPrice}</li>
                        <li>
                            <a href="/shop/delete?oid=${W.oid}">刪除</a>
                        </li>
                    </ul>
                </div>
                </c:forEach>
                <div class="foot">
                    <ul>
                        ${b}
                        <li><a href="/shop/deletecar">全部刪除</a>
                        <li>總價:¥<span style="color: red; font-size: 30px; font-weight: 600;" id="total">11111</span>
                        <li><a href="#">去付款</a>
    
                    </ul>
                </div>
            </div>
        </body>

    所需要的接口和实现类:

    /*
        *
        *  查询购物车
        * */
        List<Map<String,Object>> allcar(int uid);
    
    实现类:
    
     /*
        *  查询购物车商品,使用多表联合查询。
        *  多条查询使用List集合。
        * */
        @Override
        public List<Map<String, Object>> allcar(int uid) {
            String sql = "select c.oid,p.pname pname,p.shopPrice pPrice,p.pimage pimage,c.num " +
                    "FROM car c " +
                    "INNER JOIN product p ON p.pid= c.pid where c.uid=?";
    
            return DBUtil.excuteQuery(sql,uid);
        }

    流程:

        用户点击我的购物车-进入Servlet获得现登录人员的id找出属于此用户的商品数据-反馈给JSP进行显示。



    • (8)根据用户需求删除购物车的某个商品

    所需的Servlet:

    @WebServlet("/delete")
    public class DeletionCartServlet extends HttpServlet {
        /*
        *  根据用户需求删除购物车的某个商品。
        *  获取请求参数,获取用户点击的商品的ID,
        *  调用DAO层的SQL语句进行删除。
        *  请求转发到购物车界面。
        *
        *  该Servlet需要配合购物车的JSp页面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 获取请求参数。
            String oid = req.getParameter("oid");
            // 调用DAO获取SQL语句。
            IProductDAO dao = new ProductDAOImpl();
            dao.deleteCart(Integer.parseInt(oid));
            // 请求转发。
            req.getRequestDispatcher("/scart.do").forward(req,resp);// 和(7)相连接
        }
    }

    所需要的JSP页面:

    <body>
              <!-- 头部导航 -->
            <jsp:include page="/views/header.jsp"></jsp:include>
    
            <!-- 購物車 -->
            <div class="wrap">
                <div class="title">
                    <ul>
                    <li><input type="checkbox" name="" id="" value="" /> 全选</li>
                    <li>商品</li>
                    <li>商品信息</li>
                    <li>单价(元)</li>
                    <li>数量</li>
                    <li>小计(元)</li>
                    <li>操作</li>
                   </ul>
                </div>
    
    
                <c:forEach var="W" items="${Wcc}">
                <div class="goods">
                    <ul>
                        <li><img src="${W.pimage}"/> ${W.pname}</li>
                        <li>尺碼:均碼</li>
                        <li class="price">${W.pPrice}</li>
                        <li>
                            <div class="count">
    
                            <span class="s"></span>
                            <input type="text" value="${W.num}" name="num" class="num" />
                            <span class="s"></span>
                            </div>
    
                        </li>
                        <li class="subtotal">${W.pPrice}</li>
                        <li>
                            <a href="/shop/delete?oid=${W.oid}">刪除</a>
                        </li>
                    </ul>
                </div>
                </c:forEach>
                <div class="foot">
                    <ul>
                        ${b}
                        <li><a href="/shop/deletecar">全部刪除</a>
                        <li>總價:¥<span style="color: red; font-size: 30px; font-weight: 600;" id="total">11111</span>
                        <li><a href="#">去付款</a>
                    </ul>
                </div>
            </div>
        </body>

    所需要的接口和实现类:

     /*
        *  删除购物车的某个商品
        *
        * */
        boolean deleteCart(int oid);
    
    
    实现类:
    
     /*
        *  删除单条商品。
        * */
        @Override
        public boolean deleteCart(int oid) {
            String sql = "delete from car where oid= ?";
            return DBUtil.excuteUpdate(sql,oid);
        }

    流程:

        用户点击删除,根据连接的地址和绑定的ID-转到Servlet处理业务-转到购物车JSp页面重新刷新JSp页面。



    • (9)根据用户需求删除购物车的所有商品

    所需的Servlet:

    
    @WebServlet("/deletecar")
    public class DeletecarServlet extends HttpServlet {
        /*
        *  根据用户需求删除购物车所有的商品。
        *  用户点击购物车删除所有商品按钮之后,则跳转到此Servlet。
        *  然后通过Session和Map的键值对读取当前账户的uid,也就是获取购物车那张表里的输入当前账户的商品id
        *  第二步调取DAO层里的删除商品的SQL语句,对商品进行删除。
        *  最后重定向到购物车界面。
        *
        *  该Servlet需要配合购物车的JSP页面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 通过Session和Map的键值对读取当前账户的uid,也就是获取购物车那张表里的输入当前账户的商品id
            Map user = (Map) req.getSession().getAttribute("W");
            Integer uid = (Integer) user.get("uid");
            // 调用DAO层。
            IProductDAO dao = new ProductDAOImpl();
            boolean b = dao.deleteCarts(uid);
            // 重定向到购物车界面。
            resp.sendRedirect("/shop/scart.do");// 和(7)相连接
    } }

    所需要的JSp页面:

    <body>
              <!-- 头部导航 -->
            <jsp:include page="/views/header.jsp"></jsp:include>
    
            <!-- 購物車 -->
            <div class="wrap">
                <div class="title">
                    <ul>
                    <li><input type="checkbox" name="" id="" value="" /> 全选</li>
                    <li>商品</li>
                    <li>商品信息</li>
                    <li>单价(元)</li>
                    <li>数量</li>
                    <li>小计(元)</li>
                    <li>操作</li>
                   </ul>
                </div>
    
    
                <c:forEach var="W" items="${Wcc}">
                <div class="goods">
                    <ul>
                        <li><img src="${W.pimage}"/> ${W.pname}</li>
                        <li>尺碼:均碼</li>
                        <li class="price">${W.pPrice}</li>
                        <li>
                            <div class="count">
    
                            <span class="s"></span>
                            <input type="text" value="${W.num}" name="num" class="num" />
                            <span class="s"></span>
                            </div>
    
                        </li>
                        <li class="subtotal">${W.pPrice}</li>
                        <li>
                            <a href="/shop/delete?oid=${W.oid}">刪除</a>
                        </li>
                    </ul>
                </div>
                </c:forEach>
                <div class="foot">
                    <ul>
                        ${b}
                        <li><a href="/shop/deletecar">全部刪除</a>
                        <li>總價:¥<span style="color: red; font-size: 30px; font-weight: 600;" id="total">11111</span>
                        <li><a href="#">去付款</a>
                    </ul>
                </div>
            </div>
        </body>

    所需要的接口和实现类:

    /*
        *  删除购物车的所有商品
        *
        * */
        boolean deleteCarts(int uid);
    
    实现类:
    
      /*
        *  删除多条商品。
        * */
        @Override
        public boolean deleteCarts(int uid) {
            String sql = "delete  from car where uid = ?";
            return DBUtil.excuteUpdate(sql,uid);
        }

    流程:

        用户点击全部删除,跳转到负责处理此业务的Servlet-Servlet根据id信息删除商品-返回给JSp页面进行刷新展示。



    • (10)用户注销

    hear界面(进入个人中心的方式):

        <div class="header_wrap">            
                <ul>
                    <c:choose>
                        <c:when test="${empty W}">
                            <li><a href="/shop/views/login.jsp">登录</a></li>
                            <li><a href="/shop/views/register.jsp">注册</a></li>
                        </c:when>
                        <c:otherwise>
                            <li>欢迎您,尊敬的VIP:<a href="/shop/views/persional.jsp">${W.username}</a></li>
                        </c:otherwise>
                    </c:choose>
    
                    <li><a href="#">我的收藏</a></li>
                    <li><a href="/shop/scart.do">我的购物车</a></li>
                    <li><a href="#">我的订单</a></li>
                    <li><a href="#">帮助中心</a></li>
                    <li><a href="#">商家后台</a></li>
                    
                </ul>
            </div>

    被跳转的JSP页面:

    body>
            <fieldset>
                <legend>
                    欢迎来到您的个人中心
                </legend>
                <div>
                    <ul>
                        <li><a href="/shop/LoginOut">注销当前账户</a></li>
                        <li><a href="/shop/home" >点击返回首页</a></li>
                        <li><a href="/shop/views/login.jsp">返回登陆界面</a></li>
                        <li><a href="/shop/views/login.jsp">点击修改密码</a></li>
                    </ul>
                </div>
    
                <iframe name="show" width="65%" height="85%"></iframe>
            </fieldset>
    </body>

    所需要的Servlet:

    
    @WebServlet("/LoginOut")
    public class LoginOutServlet extends HttpServlet {
        /*
        *  注销登录
        *  用户点击注销登录按钮则跳转到此Servlet。
        *  销毁Session,销毁之后,相当于将登陆信息全部清除。
        *  然后重定向到主界面,因为没有数据的存在而且需要地址栏的改变,所以使用重定向。
        *
        *  该Servlet需要配合个人中心的JSP页面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 销毁Session,销毁之后,相当于将登陆信息全部清除。
            req.getSession().invalidate();
            // 注销账号之后,重定向到主界面
            resp.sendRedirect("/shop/home");
    
        }
    }

    流程:

        用户进入个人中心-跳转到负责展示JSP,点击注销账户-进入Servlet处理业务。

  • 相关阅读:
    hibernate中many-to-one的not-found属性和@notfound注解
    使用excel中的数据快速生成sql语句
    maven的生命周期
    单点登录(sso)入门
    sql server生成随机id
    javascript时间戳与日期格式的相互转换
    前后端分离的概念
    idea中maven项目打jar包
    [na][win]AD域组策略wifi自动配置
    [na]mail收发过程
  • 原文地址:https://www.cnblogs.com/lxr521/p/10758744.html
Copyright © 2020-2023  润新知