zoukankan      html  css  js  c++  java
  • 小项目-购物网站个别功能的具体实现思路-上(新手)


    第一步:
    /*
    *  用户注册的界面。
    *  用户点击注册按钮,会跳转到注册界面,用户填写完注册信息则会跳转到此Servlet。
    *  在此Servlet中我们首先需要设置编码格式。
    *  第二步是获取请求参数,就是用户在注册界面填写的信息。
    *  第三步则是需要验证用户名是否已经被注册,如果已经被注册则提示用户名被占用。
    *  如果没有被注册则将用户的信息添加到数据库表中。
    *  最后请求转发到注册界面。
    *
    *  该Servlet需要配合注册的JSP页面进行使用。
    * */

    
    
    第二步:
    /*
    *  登录界面的实现。
    *  用户点击登录跳转到登录的JSP界面,
    *  点击提交则跳转到此Servlet中进行账号密码是否正确的判断。
    *
    *  首先需要设置浏览器的编码格式,因为是POST的提交方式,可能在过程中会出现中文乱码的现象。
    *  然后是获取请求参数,分别是账号和密码。
    *  第三步是调用DAO层对账号密码所在的数据库表进行查询,校验账号密码是否正确,
    *  使用if语句进行判断,如果账号密码为空,则提示账号密码错误。
    *                      因为如果账号密码都为空,则是意味着在数据库中匹配不到。
    *  否则,将登陆成功,并且请求转发到主界面。
    *  在提交关键数据时需要使用session-会话对象
    *
    *  session  会话对象
            共享数据:session共享/会话共享
            特点: 同一次会话 共享数据可以获取  (会话:从共享数据开始 到 浏览器关闭/主动清除 。不受请求转发和重定向的影响
            只要存到session中 浏览器不关闭 或者 不主动清除 都可以获取)
            代码 :HttpSession session = req.getSession();//获取session对象
                   ession.setAttribute("关键字",数据对象名);
    
       该Servlet需要配合登录界面的JSP页面进行使用。
    * */
    
    
    
    
    第三步:
    /*
    *  主界面。
    *
    *  用户在地址栏输入网址,则跳转到此界面。
    *  此界面调用DAO层的查询所有商品的SQL语句查询所有商品。
    *  查询完所有商品之后,共享数据(关键字和对象名),该关键字在商品展示界面使用。
    *  再使用请求转发到负责展示数据的JSP界面。
    *
    *   此Servlet配合主界面的JSp文件。
    * */

    
    
    第四步:
    /*
    *  商品信息的详细介绍界面。
    *
    *  首先需要获取请求参数,也就是用户所点击的商品ID。
    *  然后调用DAO层进行该条商品的查询。
    *  第三步是共享数据。
    *  其次是请求转发到负责展示商品详细信息的JSP界面。
    *
    *  该Servlet需要配合展示商品详细信息的JSP界面进行使用。
    * */

    
    
    第五步:
    /*
     *  搜索框搜索某条信息,根据条件返回相应的数据。
     *
     *  第一步是设置浏览器返回的编码格式。
     *  第二步是获取请求参数。
     *  第三步是调用DAO层的SQL语句进行条件的查询。
     *  第四步是共享数据。
     *  第五步则是请求转发到负责展示数据的JSP页面。
     *
     *  该Servlet需要配合主界面进行使用。
     * */
    
    

    •  (1)用户注册:

    Servlet:


    @WebServlet("/register")
    public class RegisterServlet extends HttpServlet {
        /*
        *  用户注册的界面。
        *  用户点击注册按钮,会跳转到注册界面,用户填写完注册信息则会跳转到此Servlet。
        *  在此Servlet中我们首先需要设置编码格式。
        *  第二步是获取请求参数,就是用户在注册界面填写的信息。
        *  第三步则是需要验证用户名是否已经被注册,如果已经被注册则提示用户名被占用。
        *  如果没有被注册则将用户的信息添加到数据库表中。
        *  最后请求转发到注册界面。
        *
        *  该Servlet需要配合注册的JSP页面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置编码格式。
            req.setCharacterEncoding("UTF-8");
            //获取请求参数。
            String telephone = req.getParameter("telephone");
            String password = req.getParameter("password");
            String email = req.getParameter("email");
            String username = req.getParameter("username");
            //验证用户名是否已经被注册,唯一校验性。
            IUserDAO dao = new UserDAOImpl();
            boolean username1 = dao.isUsername(username);
            if (username1){
                //如果用户名已用,则提示用户名被占用。
                req.setAttribute("name","很抱歉,用户名已存在");
            }else{
                //如果没有注册则将用户信息添加到数据库中
                //String telephone, String password, String email, String username
                User user = new User(telephone,password,email,username);
                dao.insert(user);
                req.setAttribute("user","注册成功");
            }
            //请求转发到注册界面。
            req.getRequestDispatcher("/views/register.jsp").forward(req,resp);
        }
    }

    头部的JSp:

    <li><a href="/shop/views/register.jsp">注册</a></li>

    注册界面:

        <body>
            
            <div class="wrap">
                <div class="guimeilogo"></div>
                <div class="register">
                
                
                    <div class="top">
                        <h1>新用户注册</h1>
                        <a href="#">已有账号</a>
                    </div>
                    
                    
                    <div class="mid">
                
                <--!
                  form表单提交到了上面的Servlet中。
                --> <form action="/shop/register" method="post"> <input type="text" name="telephone" id="telephone" placeholder="手机号" required="required"/> <div class="sec"> <input type="text" name="code" id="code" placeholder="验证码" required="required" /> <a class="send" onclick="send()"> 发送验证码 </a> <script> function send(){ return false; } </script> </div> <input type="password" name="password" id="password" placeholder="密码" required="required" /> <input type="text" name="email" id="email" placeholder="邮箱" required="required" /> <input type="text" name="username" id="username" placeholder="亲,您的昵称" required="required" /> <input type="submit" id="submit" value="注册"/> ${name} </form> </div> </div> </div> </body>

    所需接口和实现类的SQL语句:

       /*
         * 用户注册---> 需要添加的SQL语句,将用户的信息添加到另一张数据库表单中
         * 根据注册要求  分别为
         *                   telephone(手机号)
         *                   password(密码)
         *                   email(邮箱)
         *                   username(用户名)
         */
        boolean insert(User u);
    
    
    实现类:
    
       @Override
        public boolean insert(User u) {
            String sql = "insert into user (telephone,password,email,username) values (?,?,?,?)";
            return DBUtil.excuteUpdate(sql,u.getTelephone(),u.getPassword(),u.getEmail(),u.getUsername());
        }

    流程:

      点击注册-转到注册JSP页面-填写信息,提交信息-Servlet处理。



    • (2)用户登录:

    所需的Servlet:

    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
        /*
        *  登录界面的实现。
        *  用户点击登录跳转到登录的JSP界面,
        *  点击提交则跳转到此Servlet中进行账号密码是否正确的判断。
        *
        *  首先需要设置浏览器的编码格式,因为是POST的提交方式,可能在过程中会出现中文乱码的现象。
        *  然后是获取请求参数,分别是账号和密码。
        *  第三步是调用DAO层对账号密码所在的数据库表进行查询,校验账号密码是否正确,
        *  使用if语句进行判断,如果账号密码为空,则提示账号密码错误。
        *                      因为如果账号密码都为空,则是意味着在数据库中匹配不到。
        *  否则,将登陆成功,并且请求转发到主界面。
        *  在提交关键数据时需要使用session-会话对象
        *
        *   session  会话对象
                共享数据:session共享/会话共享
                特点: 同一次会话 共享数据可以获取  (会话:从共享数据开始 到 浏览器关闭/主动清除 。不受请求转发和重定向的影响
                只要存到session中 浏览器不关闭 或者 不主动清除 都可以获取)
                代码 :HttpSession session = req.getSession();//获取session对象
                       ession.setAttribute("关键字",数据对象名);
    
                       该Servlet需要配合登录界面的JSP页面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 设置编码格式。
            req.setCharacterEncoding("UTF-8");
            // 获取请求参数。
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            // 调用DAO层。进行查询。
            IUserDAO dao = new UserDAOImpl();
            Map<String, Object> islogin = dao.islogin(username, password);
            // 如果账号密码为空,则提示账号密码错误。
            // 因为如果账号密码为空则是意味着在数据库中匹配不到。
            if (islogin == null){
                req.setAttribute("C","对不起,您的账号或密码错误");
                req.getRequestDispatcher("/views/login.jsp").forward(req,resp);
            // 否则 将成功登录。(使用Session)
            // 并且请求转发到主界面。
            }else {
                HttpSession session = req.getSession();
                session.setAttribute("W",islogin);
                resp.sendRedirect("/shop/home");
            }
        }
    }

    头部的JSP:

    <li><a href="/shop/views/login.jsp">登录</a></li> (shop为工程名,views为目录名,login.jsp为负责展示登录信息的界面)

    登录界面:

       <body>
            <div class="wrap">
                <div class="guimeilogo"></div>
                <div class="login">
                
                    <div class="top">
                        <h1>贵美商城</h1>
                        <a href="">新用户注册</a>
                    </div>
                    
                    <div class="mid">
                        <form action="/shop/login" method="post">
                        <input type="text" name="username" id="username" placeholder="手机号" required="required" />
                        <input type="password" name="password" id="password" placeholder="密码" required="required" />
                        <input type="submit" id="submit" value="立即登录"/>
                            ${C}
                        </form>
                    </div>
                    
                </div>
                
            </div>
        </body>

    所需接口和实现类的SQL语句:

    /*
        * 用户登陆
        *
        * 查询数据库数据,账户密码符合则跳转,否则则提示账户或密码错误。
        */
       Map<String,Object> islogin(String username,String password);
    
    
    实现类:
      
       @Override
        public Map<String, Object> islogin(String username, String password) {
            String sql = "select * from 用户表的表名 where 账户名 = ? and 密码名 = ?";
            List<Map<String, Object>> list = DBUtil.excuteQuery(sql, username, password);
            if (list.size()>0){
                return list.get(0);
            }
            return null;
        }

    流程:

        点击登录-跳转到登录界面-填写信息,提交信息-Servlet进行处理,返回最终结果。



    • (3)主界面

    所需的Servlet:

    // 映射路径。(相当于Web.xml里的配置路径)
    @WebServlet("/home")
    public class HomeServlet extends HttpServlet {
        /*
        *  主界面。
        *
        *  用户在地址栏输入网址,则跳转到此界面。
        *  此界面调用DAO层的查询所有商品的SQL语句查询所有商品。
        *  查询完所有商品之后,共享数据(关键字和对象名),该关键字在商品展示界面使用。
        *  再使用请求转发到负责展示数据的JSP界面。
        *
        *   此Servlet配合主界面的JSp文件。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1 调用DAO层
            IProductDAO dao = new ProductDAOImpl();
            //1、1 查询所有数据
            List<Map<String, Object>> list = dao.allProduct();
            //2 共享数据
            req.setAttribute("list",list);
            //3 请求转发到负责展示数据的JSP
            req.getRequestDispatcher("/views/index.jsp").forward(req,resp);
        }
    }

    所需输入的url:

    http://localhost:8080/shop/home

    主界面的JSP:

            <!--商品展示-->
            <h2>贵美优选</h2>
            <%--如果需要添加搜索功能的话,就需要用到JSP的if语句
                组成分为:
                          <c:choose>
                            <c:when test="${empty als}"></c:when>
                            ${empty 数据关键字}(意为如果这组数据为空就执行when里的代码)
                            ============================
                            如果数据不为空则执行
                            <c:otherwise></c:otherwise>
                            的数据
                          </c:choose>
                            --%>
    
            <%--开启循环--%>
            <c:choose>
                <%--如果als里数据为空则执行when里的代码段(搜索框)--%>
                <%--意思就是如果没有使用搜索框则展示when里的数据--%>
                <c:when test="${empty als}">
            <div id="wrap" style="margin: 0px auto">
            <%--
                使用forEach循环数据库文件。
    
                需要获取图片、价格、收藏数、简介的详细信息。
    
                使用${关键字,数据库数据名称}
            --%>
            <c:forEach var="list" items="${list}">
            <!-- 商品信息  -->
            <div class="products">
                       <!--商品图片-->
                <%--商品图片绑定数据库表的ID--%>
                <a   href="/shop/product?pid=${list.pid}" class="pimg" style="background-image: url(${list.pimage});"></a>
                <div class="info"> 
                    <div class="part"> 
                        <!--商品价格-->
                        <div class="price">${list.shopPrice}</div>
                        <div class="collect">
                            <!--商品收藏-->
                            <i class="icon-star"></i>${list.collect}
                     </div> 
                    </div> 
                    <i class="icon-select">    
                            <!--商品简介-->
                    </i>${list.pdesc}
              </div> 
            </div>
            </c:forEach>
            </div>
                </c:when>

    所需接口和实现类的SQL语句:

     /*
        *  查询所有数据使用list
        *  因为是查询所有
        *  不需要返回参数
        */
        List<Map<String,Object>> allProduct();
    
    
    实现类:
    /*
            * 使用查询的sql语句,直接返回
            */
            String sql = "select * from 商品的表名";
            return DBUtil.excuteQuery(sql);

    流程:

        用户输入URl-进入Servlet查询所有商品信息-主界面JSP负责展示。



    • (4)商品信息的详细介绍

    所需的Servlet:

    
    @WebServlet("/product")
    public class ProductServlet extends HttpServlet {
        /*
        *  商品信息的详细介绍界面。
        *
        *  首先需要获取请求参数,也就是用户所点击的商品ID。
        *  然后调用DAO层进行该条商品的查询。
        *  第三步是共享数据。
        *  其次是请求转发到负责展示商品详细信息的JSP界面。
        *
        *  该Servlet需要配合展示商品详细信息的JSP界面进行使用。
        * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 获取请求参数(pid)
            String pid = req.getParameter("pid");
            // 调用DAO层。
            IProductDAO dao = new ProductDAOImpl();
            Map<String, Object> map = dao.allProductByID(Integer.parseInt(pid));
            // 共享数据。
            req.setAttribute("map",map);
            // 请求转发到负责展示商品详细信息的主要界面。
            req.getRequestDispatcher("/views/product.jsp").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> </body>

    所需接口和实现类的SQL语句:

     /*
        * 根据用户点击的商品的ID查询该商品的所有数据
        * 查询单条使用MAP集合,需要返回ID
        */
        Map<String,Object> allProductByID(int pid);
    
    
    实现类:
    
    /*
        * 根据用户点击的商品的ID查询该商品的所有数据
        * 查询单条使用MAP集合,需要返回ID
        * */
        @Override
        public Map<String, Object> allProductByID(int pid) {
            String sql = "select * from product where pid = ?";
            List<Map<String, Object>> list = DBUtil.excuteQuery(sql, pid);
            if (list.size()>0){
                return list.get(0);
            }
            return null;
        }

    流程:

        首先在主界面的商品图片绑定数据库表的ID-点击图片就会获得iD-进入Servlet-查询该条ID的所有信息-JSp页面负责展示。



    • (5)搜索框

    所需的Servlet:

    
    @WebServlet("/search")
    public class SearchServlet extends HttpServlet {
        /*
         *  搜索框搜索某条信息,根据条件返回相应的数据。
         *
         *  第一步是设置浏览器返回的编码格式。
         *  第二步是获取请求参数。
         *  第三步是调用DAO层的SQL语句进行条件的查询。
         *  第四步是共享数据。
         *  第五步则是请求转发到负责展示数据的JSP页面。
         *
         *  该Servlet需要配合主界面进行使用。
         * */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 设置浏览器数据返回的编码格式。
            req.setCharacterEncoding("UTF-8");
            // 获取请求参数
            String search = req.getParameter("wname");
            
            // 调用DAO层的SQL语句进行条件查询
            IProductDAO dao = new ProductDAOImpl();
            List<Map<String, Object>> allsearch = dao.getAllsearch("%"+search+"%");
            
            // 共享数据。
            req.setAttribute("als",allsearch);
            // 请求转发(将要展示的数据转发到负责展示的JSP界面)
            req.getRequestDispatcher("/views/index.jsp").forward(req,resp);
    
        }
    }

    所需要的JSP页面:

    
                        <c:forEach var="als" items="${als}">
                            <!-- 商品信息  -->
                            <div class="products">
                                <!--商品图片-->
                                    <%--商品图片绑定数据库表的ID--%>
                                <a   href="/shop/product?pid=${als.pid}" class="pimg" style="background-image: url(${als.pimage});"></a>
                                <div class="info">
                                    <div class="part">
                                        <!--商品价格-->
                                        <div class="price">¥${als.shopPrice}</div>
                                        <div class="collect">
                                            <!--商品收藏-->
                                            <i class="icon-star"></i>${als.collect}
                                        </div>
                                    </div>
                                    <i class="icon-select">
                                        <!--商品简介-->
                                    </i>${als.pdesc}
                                </div>
                            </div>
                        </c:forEach>
                    </div>
                </c:otherwise>
            </c:choose>
      

    所需接口和实现类的SQL语句:

     /*
        * 根据用户输入的信息
        *  使用条件查找的SQL语句。
        *  因为不知道用户输入的是什么,会返回多少查询结果
        *  所以使用List集合。
        */
        List<Map<String,Object>> getAllsearch(String search);
    
    实现类:
    
    /*
        * 搜索框的查询语句,使用条件查询。
        * */
        @Override
        public List<Map<String, Object>> getAllsearch(String search) {
            String sql = "select * from product where pname like ?";
            return DBUtil.excuteQuery(sql,search);
        }

    流程:

        用户点击搜索栏输入内容-进入Servlet调用DAO层查询数据库与之相符合的内容-返回给JSP页面进行展示。


  • 相关阅读:
    博客园背景页面动态特效
    windows7 VirtualBox 安装docker异常:looks like something went wrong in step ‘looking for vboxmanage.exe’
    VUE 封装axios 接口
    实时显示系统当前时间时间
    Git 命令执行
    从模型训练中认知拟合现象
    ModernRNN
    Fundamentals of Recurrent Neural Network
    Language Model & Data Sampling
    Text Preprocessing
  • 原文地址:https://www.cnblogs.com/lxr521/p/10758726.html
Copyright © 2011-2022 走看看