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


第六步:
/*
*  根据用户需求添加商品进购物车。
*  首先需要判断用户是否已经进行了登录。 这就需要创建一个过滤器,进行登录请求的过滤。
*   如果用户登录了就获取用户的请求参数,如商品的名称、简介、数量等。
*   如果用户没有登录则需要在过滤器中进行拦截,使其跳转到登录界面。
*
*   获取完用户的请求参数之后,需要判断商品是否已经加入购物车。
*   此处需要三个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处理业务。

 

posted @ 2019-04-23 21:47  浪子。  阅读(578)  评论(0编辑  收藏  举报