• mvc:一


    商城实体:用户  商品  订单  分类(主要涉及到的实体)
    实体关系:
      用户和商品: 没关系
      用户和订单:一对多
      用户和分类: 没关系
      商品和订单:多对多
      分类和商品:一对多
      订单和分类: 没关系

    用户表

    用户表中的字段:看注册就可以了

    订单表

    用户和订单是一对多关系,需要在订单实体中引用用户

     商品表

    分类表

     

     综上

     今日任务:用户模块开发

    用户注册  用户激活  用户登录  用户退出,完全可以写4个servlet但这样不好,所以关于用户的操作都封装usreservlet中

    环境搭建:

      1.数据库和表

      2.新建项目

        导入jar包:驱动包c3p0 dbutils beanutils jstl mail

        导配置文件(c3p0连接的配置文件)和工具类

        原型页面

      3.项目目录结构  web model version 2.5 ,tomcat 7

      doGet、doPost方法只是为了区分请求的不同来处理编码的,现在有了filter,那么doGet、doPost就失去了它的意义了,我们把处理请求统一放在service周期方法中。处理结果要么请求转发(用的最多),要么重定向,要么向页面打印数据。

    /**
     * 通用的servlet,然后让其它servlet继承BaseServlet,它要在web.xml里面配置
     */
    public class BaseServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        /**
         * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
         */
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                //1、获取方法名称
                String mName = request.getParameter("method");
                    //判断方法参数是否为空,若为空,执行默认的方法,这个方法index(),所有的servlet都应该有,所以要写在BaseServlet里面,总不能给用户展示404页面吧
                    if (mName == null || mName.trim().length()==0) {
                        mName = "index";
                    }
                //2、获取方法对象
                Method method = this.getClass().getMethod(mName, HttpServletRequest.class,HttpServletResponse.class);
                //3、让方法执行,接收返回值
                String path = (String) method.invoke(this,request,response);
                //4、判断返回值是否为空,若不为空统一请求转发
                if (path!=null) {
                    request.getRequestDispatcher(path).forward(request, response);
                }
            }catch(Exception e) {
                e.printStackTrace();
                throw new RuntimeException();
            }
        }
        public String index(HttpServletRequest request, HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=utf-8");    //设置响应编码
            response.getWriter().print("亲,不要捣乱");
            return null;
        }
    }

    案例一:用户注册

    需求:在register.jsp上填写用户的信息,点击保存,将用户信息保存到数据库中

    步骤分析:1.设置默认首页(index.jsp),让其自动跳转到/jsp/index.jsp(理解:访问localhost:8080/store时,自动到index.jsp页,这个页自动跳转到项目的主页/jsp/index.jsp)

    2、修改index.jsp上的  注册 超链接(说明:可以直接让它链接到那个地址上面,但是不好。要跳转到用户注册页面上,和用户相关,jsp也是一种servlet,用其进行转发过去) <a href='/store/user?method=registUI'>注册</a>

    3、在userServlet中编写registUI方法,方法作用请求转发到/jsp/register.jsp(好处:如果把这个页面放在WEB-INF下直接链接不过去,而用转发一点问题没有)

    4、修改register.jsp上的表单信息action ="/store/user?method=regist"  method  为每一个子标签添加name属性

    5、点击注册按钮 向userServlet发送请求

    6、userServlet中表写regist方法

      获取参数,封装成user对象  

      调用service完成注册  

      生成提示信息,转发到/jsp/msg.jsp

    7、service中的操作:

      调用dao完成注册操作,发送邮件点此激活

    8、UserDao往数据库中插入一条数据

     

     最后插入成功

    案例二:用户激活

    需求:用户登录邮箱之后,点击邮箱中的连接,完成用户激活操作
    步骤分析:

    1.点击邮箱中的链接,向商城userservlet发送一个请求

      user?method = active&code=xxx

    2.在userservlet中编写active(积极的)方法

      接收code

      调用service完成激活   返回值:user

      生成提示信息   转发

    3.在service中获取激活方法

      通过code获取用户

        若没有找到:提示重新激活或者重新注册

        若找到了:设置激活转台为1       将code设置为null(没有用了,就是用来验证是否激活的)

    4.在dao需要编写两个方法:getByCode   update

    案例三:用户登录

    Request的作用范围是一次访问的过程,生命周期随着访问开始而开始,随着服务器的响应完毕而结束.所以更多的数据会添加到这个域对象,(这里我还会啰嗦几句转发和重定向的区别)

    需求:在一个登录页面上,输入用户名和密码,点击登录,完成登录操作
    步骤分析:
    1.在index.jsp点击 登录 连接,跳转到登录页面

    2.在userserlvet中编写 loginUI(这里和注册一样通过servlet返回一个路径跳转,而不是直接链接到登录页面)

    3.修改login.jsp表单的信息
      action: /user?method=login
      给子标签添加name属性

    5.点击提交发送请求
    6.在userservlet中编写login方法
      获取用户名和密码
      调用service完成登录 返回值:user
    若登录成功,跳转到index.jsp 并展示用户信息
    若登录失败,
      若user为空(用户名在数据库中不存在):提示 用户名和密码 跳转到login.jsp
      若user不为空但是未激活:提示信息 "请先去邮箱激活,再登录" 跳转msg.jsp

    7.service,dao(获取用户信息就可)

     

    案例四:用户退出

    就是把session清空,而不仅仅是移除user信息,因为session里面还有可能有其它信息

    需求:点击 index.jsp上 退出连接,退出当前的用户,跳转index.jsp
    步骤分析:
    1.点击 index.jsp上 退出 连接,向userservlet发送请求
      /user?methode=logout
    2.在userservlet中编写logout方法
      销毁session
      重定向到index.jsp

    总结:

    扩展:
      记住用户名
    需求:
      登录成功之后,若勾选了记住用户名,下一次再登录的时候,会展示出来用户名
    步骤分析:
      修改login方法的逻辑
        登录成功之后,判断是否勾选了记住用户名
        若勾选了,将用户名(将用户名编码)保存到cookie中
        在login.jsp加载成功的时候需要从cookie中获取用户名且展示出来

  • 相关阅读:
    Python经典的算法题【多测师】
    百度流氓驱动bd0001.sys【多测师】
    github上的前端面试题
    利用H5 FormData 实现表单中多图上传(可带其他如String类型数据)
    border-color的深入理解
    一个好玩的小制作,以及在<a/>中的标签href="javascript:;"/href="javascript:void(0);"/href="javascript:"的用法
    css进行网站布局
    Mybatis中的<trim>标签应用
    css居中小技巧
    css布局模型
  • 原文地址:https://www.cnblogs.com/djlindex/p/11415327.html
Copyright © 2020-2023  润新知