当前位置: 首页 > news >正文

JavaWeb学习——day8(MVC模式与session、cookie)

文章目录

  • 一、MVC 模式
    • 1. MVC 模式概述
    • 2. MVC 模式的优势
    • 3. MVC 的组件作用
  • 二、实现用户注册功能(cookie保存用户名 session保存登陆状态 )
    • 步骤 1:修改 LoginServlet.java 处理登录请求
    • 步骤 2:设计 main.jsp 主界面,显示用户名
    • 步骤 3:创建 logout.jsp 处理用户退出
    • 步骤 4:实现自动登录功能(可选)
  • 测试 Session 和 Cookie
    • 步骤 1:登录并检查 Session 和 Cookie
      • 检查 Session:
    • 步骤 2:检查 Cookie
      • 检查 Cookie:
      • 验证自动填写:
  • 2. 测试登出功能
    • 步骤 1:退出登录
    • 步骤 2:检查登出后是否清除 Session 和 Cookie

一、MVC 模式

1. MVC 模式概述

  • MVC(Model-View-Controller)是一种分层架构模式,用于分离应用的不同功能,增强代码的可维护性和可扩展性。
    • Model(模型层):负责应用的核心数据和业务逻辑,处理数据的获取、处理、存储等。
    • View(视图层):负责展示数据给用户,通常是 HTML 页面、JSP 页面等。
    • Controller(控制器层):作为用户请求的调度中心,负责接收请求、调用模型层业务处理,再将结果交给视图层展示。

2. MVC 模式的优势

  • 解耦:每一层关注不同的职责,避免了功能逻辑混合。
  • 灵活性:可以轻松替换视图层(比如从 JSP 换成其他框架)。
  • 可维护性:逻辑清晰,便于测试和修改。
  • 团队协作:不同开发人员可以分别负责不同层(前端、后端、数据层)。

3. MVC 的组件作用

  • Model(模型层):
    负责数据的持久化操作(如数据库交互),它不关心数据如何展示,专注于业务逻辑。
  • View(视图层):
    展示用户数据,接收用户输入。视图层通常是 JSP、HTML,或者前端框架。
  • Controller(控制器层):
    控制器是请求的入口,负责接收用户的请求、调用适当的 Model 来处理数据,再将结果传递给 View。

二、实现用户注册功能(cookie保存用户名 session保存登陆状态 )

步骤 1:修改 LoginServlet.java 处理登录请求

在 LoginServlet.java 中处理登录请求,并在登录成功后创建 Session、设置 Cookie。

package com.example.controller;import com.example.model.UserService;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie; // 确保这里导入jakarta
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;@WebServlet("/login")
public class LoginServlet extends HttpServlet {private UserService userService = new UserService();@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String rememberMe = request.getParameter("rememberMe");boolean isAuthenticated = userService.checkLogin(username, password);if (isAuthenticated) {HttpSession session = request.getSession();session.setAttribute("username", username);// 关键修复:统一使用 jakarta.servletif (rememberMe != null) {// 使用 jakarta.servlet.http.CookieCookie cookie = new Cookie("username", username);cookie.setMaxAge(30 * 24 * 60 * 60); // 30天有效期response.addCookie(cookie);}response.sendRedirect("main.jsp");} else {response.sendRedirect("fail.jsp");}}
}
  • 解释:
    登录成功后,创建一个 HttpSession,并将用户名存入 session 中。
    如果勾选了“记住我”,就通过 Cookie 保存用户信息,Cookie 默认保存 30 天。
    登录成功后跳转到 main.jsp 页面,失败则跳转到 fail.jsp。

步骤 2:设计 main.jsp 主界面,显示用户名

在 main.jsp 页面显示登录成功后的用户名。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Main Page</title>
</head>
<body>
<h2>欢迎,${sessionScope.username}</h2>
<a href="logout.jsp">登出</a>
</body>
</html>
  • 解释:
    使用 ${sessionScope.username} 从 session 中读取登录的用户名,并显示在主页面上。
    提供一个登出链接,用户点击后会跳转到 logout.jsp 进行退出操作。

步骤 3:创建 logout.jsp 处理用户退出

用户点击登出按钮后,清除 session 和 Cookie,返回到登录页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="jakarta.servlet.http.Cookie" %> <!-- 使用 jakarta.servlet -->
<html>
<head><title>Logout</title>
</head>
<body>
<%// 清除 sessionsession.invalidate();// 清除 "remember me" 的 cookieCookie cookie = new Cookie("username", null);cookie.setMaxAge(0); // 设置过期时间为 0,删除 cookieresponse.addCookie(cookie);  // 使用 jakarta.servlet.http.Cookie
%>
<h2>您已成功登出</h2>
<a href="login.jsp">返回登录</a>
</body>
</html>
  • 解释:
    通过 session.invalidate() 清除 session 信息,登出用户。
    如果有保存“记住我”功能的 Cookie,使用 cookie.setMaxAge(0) 将 Cookie 删除。
    登出成功后,用户可以返回登录页面。

步骤 4:实现自动登录功能(可选)

在用户访问页面时,如果存在有效的 Cookie,自动填充用户名。
在 login.jsp 页面中,增加代码检查是否有“记住我” Cookie:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="jakarta.servlet.http.Cookie" %> <!-- 使用 jakarta.servlet --><html>
<head><title>Login Page</title>
</head>
<body>
<h2>Login Page</h2>
<form action="login" method="post">用户名:<input type="text" name="username" value="<%= request.getParameter("username") != null ? request.getParameter("username") : "" %>"><br>密码:<input type="password" name="password"><br><input type="checkbox" name="rememberMe"> 记住我<br><input type="submit" value="登录">
</form><%// 检查是否有 "remember me" 的 cookieCookie[] cookies = request.getCookies();if (cookies != null) {for (Cookie cookie : cookies) {if ("username".equals(cookie.getName())) {out.println("<script>document.getElementsByName('username')[0].value='" + cookie.getValue() + "';</script>");}}}
%>
</body>
</html>
  • 解释:
    如果存在 username 的 Cookie,自动将其填充到用户名输入框中。

测试 Session 和 Cookie

步骤 1:登录并检查 Session 和 Cookie

第一步:填写用户名(如 admin)和密码,然后点击登录按钮。
第二步:如果登录成功,你应该被重定向到主界面(如 main.jsp)。在主界面上,你应该能够看到“欢迎,admin”,表示你已经成功登录。

检查 Session:

  • 在 main.jsp 页面,你应该使用以下代码来显示当前登录的用户名:
<h2>欢迎,${sessionScope.username}</h2>
  • 在服务器端,LoginServlet 中将用户名存储到 session 中:
HttpSession session = request.getSession();
session.setAttribute("username", username);

确认:如果你在登录后能够看到用户名(比如“欢迎,admin”),说明 Session 工作正常。
如图:
在这里插入图片描述
在这里插入图片描述

步骤 2:检查 Cookie

“记住我”功能:如果用户在登录时勾选了“记住我”选项,登录成功后会设置一个 Cookie 来保存用户名。你可以通过以下方法检查 Cookie 是否被设置。

检查 Cookie:

在浏览器中,右键点击页面,选择 “Inspect”(检查),进入 Application 标签页。
在左侧的 Cookies 中找到你的站点,看是否有名为 username 的 Cookie。
在这里插入图片描述

验证自动填写:

退出登录并关闭浏览器后,再次访问登录页面时,输入框中的用户名应该会自动填充为你之前登录时保存的用户名(例如:admin),这是因为 Cookie 保存了用户名。
如图:
在这里插入图片描述

2. 测试登出功能

步骤 1:退出登录

  • 在主界面(main.jsp),应该有一个登出按钮链接到 logout.jsp:
<a href="logout.jsp">登出</a>

步骤 2:检查登出后是否清除 Session 和 Cookie

  • 退出操作:点击登出按钮后,你应该会被重定向到一个登出页面(logout.jsp)。
    logout.jsp 中:
  • session.invalidate() 会清除当前的 session。
  • 通过 response.addCookie(cookie) 来删除保存的 username Cookie。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="jakarta.servlet.http.Cookie" %>
<html>
<head><title>Logout</title>
</head>
<body><% // 清除 sessionsession.invalidate(); // 清除 "remember me" 的 cookieCookie cookie = new Cookie("username", null);cookie.setMaxAge(0); // 设置过期时间为 0,删除 cookieresponse.addCookie(cookie);  // 使用 jakarta.servlet.http.Cookie%><h2>您已成功登出</h2><a href="login.jsp">返回登录</a>
</body>
</html>
  • 确认:登出后,如果重新访问页面,Session 和 Cookie 应该都被清除,用户名不会再自动填充,用户必须重新登录。
  • 在这里插入图片描述

相关文章:

  • Few-Shot革命:PhotoDoodle艺术图像编辑实战——零样本门槛玩转3D/流体/手绘特效
  • 软件项目管理挣值计算
  • Spring-去除IDEA中的黄色波浪线提示
  • 错误 C2365 “SID”: 重定义;以前的定义是“typedef”
  • LNMP一键自动化部署
  • Three.js入门第一步:两种方式搭建你的3D项目[特殊字符]️
  • 通过使用gitee发布项目到Maven中央仓库最新教程
  • 以产教协同推进老年生活照护实训室虚拟仿真建设策略
  • 时光印记:记录生活,珍藏回忆
  • SQLite3 在嵌入式系统中的应用指南
  • Apache SeaTunnel Flink引擎执行流程源码分析
  • 安全再升级! 正也科技通过信息安全等级保护三级备案
  • 探秘Flink维表:从源码到运行时的深度解析
  • MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口
  • Python中的数据可视化:使用Matplotlib绘制图表
  • JAVA并发篇--深入理解线程池原理
  • 【学习笔记】3.1 Encoder-only PLM
  • react快速开始项目模板
  • MyBatis 的一级缓存导致的数据一致性问题分析
  • PFEIFFER普发ASM340检漏器维护保养手侧
  • 如何加强省市级门户网站的建设/营销型网站建设的价格
  • 做的比较好的个人网站/百度灰色关键词技术
  • 自己做的网站项目面试/百度关键词搜索趋势
  • 自己做网站能宣传自己的产品吗/会计培训班要多少钱
  • wordpress影视主题下载/武汉seo优化代理
  • 爱站网关键词挖掘工具熊猫/网站seo资讯