day18文件上传下载与三层架构思想_头像上传/验证码/用户登录注销

文章详细阐述了Web应用中用户修改头像、密码的流程,涉及文件上传、数据库更新及Session管理。同时介绍了用户注销、系统记住用户及验证码验证的实现方法。此外,还讨论了传统的三层架构,包括表现层、业务层和数据访问层的职责及分层带来的好处。
摘要由CSDN通过智能技术生成

修改头像流程

1.点击修改头像超链接,跳转到修改头像的表单 /avatarUpload

2.提交表单

1.将文件保存到项目中的一个指定目录/headImg(3.0版本文件上传)

2.将文件在项目中的路径更新到数据库中

​ 1.获取当前登录用户的id(在Session中)

​ 2.获取文件所在项目中的路径/headImg/xxxxx.jpg

​ 将以上的两个数据传递到service中

3.在service中将两个数据封装到对象中,(因为在mybatis中的update方法只能接收两个参数,一个是namespace+sqlid,另一个就是SQL需要的数据) 传递给DAO

4.DAO层执行方法,将数据更新到数据库中

5.回到service回到servlet

6.将新的图片信息更新到Session中

7.跳转首页,获取头像

修改密码流程

  1. 用户点击修改密码链接,跳转到修改密码的表单 /updatePassword

  2. 用户填写表单后,并提交表单

    1. 获取用户的id(在session中)
    2. 获取用户的新密码和旧密码

    将以上三个数据传递到service(业务层)中

  3. 在service中校验旧密码与数据库中密码

    1. 正确,将新密码保存到数据库中对应用户的记录中。
    2. 错误,抛出异常。
  4. DAO层执行方法,将数据更新到数据库中

  5. 回到service回到Servlet

  6. 将新的密码信息更新到session中

  7. 跳转首页

注销用户

  1. 用户点击注销链接
  2. 服务端处理请求
    1. 方式一:使用servlet ,将session销毁或者删除session中的用户数据
    2. 方式二:在jsp中 ,将session销毁或者删除session中的用户数据
  3. 跳转到登录页面

记住用户

  1. 在登录Servlet中创建cookie并将其发送给客户端,以便在下次访问网站时自动填充用户名和密码。
  2. 在登录JSP页面中检查cookie是否存在,并将其值填充到登录表单中。
// 在登录Servlet中创建cookie并将其发送给客户端
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取用户输入的用户名和密码
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    // 验证用户名和密码是否正确
    if (checkUser(username, password)) {
        // 用户名和密码正确,创建cookie
        Cookie cookie = new Cookie("loginCookie", username + ":" + password);
        cookie.setMaxAge(60 * 60 * 24 * 7); // 设置cookie的有效期为一周
        response.addCookie(cookie);

        // 重定向到首页
        response.sendRedirect("/index");
    } else {
        // 用户名或密码不正确,返回错误信息
        response.getWriter().write("用户名或密码不正确");
    }
}

// 在登录JSP页面中将账号密码填充到登录表单中


    <%-- 将用户名和密码填充到登录表单中 --%>
    <input type="text" name="username" value="${cookie.username.value}" />
    <input type="password" name="password" value="${cookie.password.value}" />

验证码

  1. 在登录页面中生成验证码,并将其存储在session中。

  2. 在登录Servlet中获取用户输入的验证码,并与session中存储的验证码进行比较。

// RandomCodeSerlet
// 在登录页面中生成验证码,并将其存储在session中
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /** 生成验证码 **/
    // 将验证码存储在session中
    HttpSession session = request.getSession();
    session.setAttribute("RANDOMECODE_IN_SESSION", captcha);

    // 将验证码绘制到图片上,并将图片发送给客户端
    // .....
}

// LoginServlet
// 在登录Servlet中获取用户输入的验证码,并与session中存储的验证码进行比较
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取用户输入的验证码
    String captcha = request.getParameter("captcha");

    // 获取session中存储的验证码
    HttpSession session = request.getSession();
    Object storedCaptcha = session.getAttribute("RANDOMECODE_IN_SESSION");

    // 比较用户输入的验证码和session中存储的验证码
    if (captcha != null && captcha.equals(storedCaptcha)) {
        // 验证码正确,继续登录流程
        // ...
    } else {
        // 验证码不正确,返回错误信息
        request.setAttribute("errorMsg", "验证码不正确。");
        request.getRequestDispatcher("/login")
            .forward(requset, response);
    }
}

三层架构

  1. 表现层(Presentation Layer):负责接收用户请求,将请求转发给业务层,并将业务层的响应返回给用户。在Servlet中,通常由Servlet负责实现。

  2. 业务层(Business Layer):负责处理业务逻辑,包括数据的处理、计算、验证等。在Servlet中,通常由Service或Manager类负责实现。

  3. 数据访问层(Data Access Layer):负责与数据库进行交互,包括数据的读取、写入、更新等。在Servlet中,通常由DAO类负责实现。

三层架构可以帮助我们将代码进行分层,使得代码更加清晰、易于维护。

分层的好处

责任分离,各司其职,体现高内聚低耦合。

命名规范
  • 包名

    • 域名倒写.模块名.service:存放业务接口代码。
    • 域名倒写.模块名.service.impl:存放业务接口的实现类。
  • 类名

    • 表现层(Presentation Layer):通常以“Servlet”结尾,例如“RegisterServlet”、“LoginServlet”等。
    • 业务层(Business Layer):通常以“Service”结尾,例如“UserService”、“OrderService”等。
    • 数据访问层(Data Access Layer):通常以“Dao”结尾,例如“UserDao”、“OrderDao”等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值