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

news/2025/1/8 19:36:09/

修改头像流程

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)) {// 用户名和密码正确,创建cookieCookie 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”等。

http://www.ppmy.cn/news/79665.html

相关文章

Spring Boot传参注解详解

Spring Boot传参注解详解 在Spring Boot中&#xff0c;处理参数传递是开发Web应用程序时的常见任务。Spring Boot提供了多种注解&#xff0c;用于处理不同类型的参数传递。本篇博客将详细介绍这些注解&#xff0c;并提供示例说明。 1. 路径参数注解&#xff08;Path Paramete…

Redis安装及其配置文件修改

一、redis 安装 点击即可下载 https://download.redis.io/releases/ 将下载后的包通过xftp上传到服务器 解压&#xff0c;我这边是解压到/usr/local目录下 -- 创建路径 mkdir /usr/local/redis -- 解压 tar -zxvf redis-4.0.0.tar.gz -C /usr/local/redis 为防止编译失败&am…

CANopenNode Master RPDO 配置

文章目录 CANopenNode 简介CANopenNode 主栈SDO ClientRPDORPDO 通讯参数RPDO 通信参数设置实例PDO 映射参数RPDO 映射参数设置实例 CANopenNode 简介 CANopenNode 是一个开源的免费的开源 CANopen 协议栈。 对象字典为任何变量提供清晰灵活的组织。可以直接或通过读/写函数…

简单做一下 银川第九届数模A题

A题 随着三年新冠疫情结束后第一个五一假期的到来&#xff0c;许多人选择出门旅游&#xff0c;在有限的几天假期怎样玩好就是一件值得考虑的事。小明是一位旅游爱好者&#xff0c;想在五一期间到宁夏一些著名景点旅游。由于跟着旅游团会受到若干限制&#xff0c;所以他&#xf…

MapReduce是什么?有哪些特征和优点?

MapReduce是什么 Hadoop MapReduce是一个分布式计算框架&#xff0c;用于轻松编写分布式应用程序&#xff0c;这些应用程序以可靠&#xff0c;容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。 MapReduce是一种面向海量数据处理的一种指导思想&#xf…

如何解决端口号被占用的方法

在学习JavaWeb的过程中&#xff0c;在运行代码的时候经常会提示端口号被占用的情况&#xff1b;出现这情况的主要原因就是没有正常关闭tomcat。 那么遇到这种情况应该怎么解决呢&#xff1f; 首先第一种方式就是把电脑关机重启&#xff0c;这种方法可谓是百试百灵&#xff1b;另…

2023 最全 Java 面试八股(涵盖所有 Java 核心面试知识点),立刻收藏

2022 已成为过去式&#xff0c;不论这一年好与坏&#xff0c;我们都需要抓住新一年的机会&#xff0c;跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01;为了帮大家节约时间&#xff0c;给大家搞来了 …

Springboot +spring security,实现RememberMe和实现原理分析

一.简介 我们在登录网站的时候&#xff0c;除了让你输入用户名和密码&#xff0c;还会有个勾选框&#xff1a; 记住我。 比如下面这个截图&#xff1a; Spring Security 也提供了这个功能&#xff0c;今天来实践下。 二.创建项目 如何创建一个SpringSecurity项目&#xff0…