置顶
- 注意事项
- 只能在同一个浏览器创建,同一个浏览器代表同一次会话。比如说你在Chrome中请求了创建Cookie接口,然后你在Firefox中请求遍历Cooke接口,就拿不到。
- 会话技术
- 什么是会话?
- 一次会话?
- 会话结束?
- 直到有一方断开,(关闭浏览器 || 关闭服务器)。
- 会话的功能?
- 共享数据的方式,Java中包含两种会话技术。
- Cookie【客户端】
- Session 【服务器端】
- JSP学习
- 概念
- Java Server Pages : Java服务器端页面可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义Java代码
- 用于简化书写!简化 ----》response.getWriter().write("写HTML代码");
- 原理
- JSP本质上就是一个Service。
- index.jsp ----》_index.java ----》index.class ----》由字节码提供访问。
- 服务器解析请求头是否有index.jsp
- 如果找到将index.jsp转换为下划线index.java
- 目录
- Tomcat目录下work放运行时产生的文件,该目录存放Java、字节码。访问页面就会生成该目录。
- C:\Users\用户名.IntelliJIdea2018.2\system\tomcat\Tomcat_9_0_14_my-batis\work\Catalina\localhost\ROOT\org\apache\jsp
- JSP的小脚本,JSP定义Java代码的方式。
- 注:都会在idea配置文件work目录下生成Java源代码。
- <% 代码 %>:定义的Java代码,在Service方法中,类似于Java的局部变量。
- <%! 代码 %>:定义的Java代码,类似于Java的成员位置。
- <%= 代码 %>:定义的java代码,会输出到页面上,取值展示在页面上。
- JSP的内置对象
- 在JSP页面中不需要获取和创建,可以直接使用的对象JSP一共有9个内置对象。
- 今天学习3个:request、response、out :字符输出流对象。
- 小问题
- response.getWriter()和out.write()的区别
- 答:在Tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
| <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
| <html> |
| <head> |
| <title>Title</title> |
| </head> |
| <body> |
| |
| <%--Java代码输出 总是先输出--%> |
| <% response.getWriter().write("response"); %> |
| |
| <% |
| |
| int LouisVan = 2; |
| |
| out.write("相对路径"); |
| %> |
| |
| <%--局部变量--%> |
| <%! private final int local = 10;%> |
| |
| <%--取值--%> |
| <%= "成员变量: " + LouisVan +", 局部变量: "+ local%> |
| |
| </body> |
| </html> |
Cookie
- 概念
- 快速入门,创建Cookie对象,请求URL:talk/JinLuLu
- 响应头(Response Headers)返回,Set-Cookie: msg=JinLuLu

| @RequestMapping("/JinLuLu") |
| public String pasha(HttpServletRequest request, HttpServletResponse response) throws Exception { |
| |
| Cookie cookie = new Cookie("msg", "JinLuLu"); |
| |
| response.addCookie(cookie); |
| return "创建cookie对象"; |
| } |
- 快速入门,遍历拿到Cookie对象,请求URL:talk/YuYaoYao
- 请求头(Request Headers)装载,Cookie: msg=JinLuLu

| public String YuYaoYao(HttpServletRequest request, HttpServletResponse response) throws Exception { |
| |
| if (null != request.getCookies()) { |
| Arrays.stream(request.getCookies()).forEach(item -> System.out.println("Name: " + item.getName() + ", Value: " + item.getValue())); |
| } else { |
| System.out.println("Cookie数组为空"); |
| } |
| return "遍历cookie对象"; |
| } |
- 导师田斌讲解:响应头、请求头

- 实现原理
- 基于响应头Set-Cookie和请求头Cookie实现。
- Cookie细节
- 一次可不可以发送多个Cookie呢?
- 可以
- 可以创建多个Cookie对象,调用response.addCookie进行保存。
- Cookie在浏览器中保存多长时间?
- 默认情况下,Cookie保存在浏览器的内存中,当浏览器关闭,Cookie自动销毁。
- 一般情况下,我们都希望在浏览器关闭的情况下,也保存Cookie信息;这里有持久化存储解决方案。
- setMaxAge(int 秒数)
- 整数:将Cookie数据写到硬盘的文件中,持久化储存,Cookie存活时间以秒为单位。
- 负数:代表默认情况。
- 零:删除Cookie信息。
- Cookie能不能存储中文?
- Tomcat8之前不能直接设置中文,Tomcat8之后Cookie支持中文。
- SpringBoot自动集成Tomcat8。
- Cookie共享问题?
- 假设在一个Tomcat服务器中,部署了多个Web项目,那么在这些Web项目中Cookie能不能共享?
- 不同服务器,Cookie是否可以共享?
- 举例:百度、百度贴吧、百度新闻。
- 怎么实现,使用共享域名实现?
- news.baidu.com、tieba.baidu.com
- 一级域名:baidu.com
- 二级域名:news、tieba
- 实现
- setDomain(String path);如果设置一级域名相同。那么多个服务器之间Cookie可以共享!
- cookie.setDomain(".baidu.com"),那么tieba.baidu.com、news .baidu.com中Cookie可以共享!
- Cookie的特点和作用?
- Cookie存储数据在客户端浏览器、不太安全,易丢失、易篡改。
- 浏览器对于单个Cookie的大小有限制(4kb)以及对同一个域名下的总Cookie数量也有限制(20个)。
- 作用
- Cookie一般用于存储少量的不太敏感的数据。
- 在不登录的情况下,完成服务器对客户端的身份识别。
- 案例一
- 需求
- 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
- 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串。
- 分析
- 在服务器中的Servlet判断是否有一个名为lastTime的Cookie对象。
- 有:不是第一次访问
- 响应数据:欢迎回来,您上次访问时间为:2021年8月21日10:11:49
- 写回Cookie : lastTime=2021年8月21日10:12:04 (注意:第二次访问的时间写回)
- 没有:是第一次访问响应数据:您好,欢迎您首次访问写回Set-Cookie : lastTime=2021年8月21日10:11:49
Session
-
知识点
- Session的实现是依赖于Cookie的
- 请求:Cookie: JSESSIONID=6A2B2AAF1A1A3C0D7A9D794C2990B1F2
- 响应:Set-Cookie: JSESSIONID=6A2B2AAF1A1A3C0D7A9D794C2990B1F2;
-
快速入门

- 服务器如何确保在一次会话范围内,多次获取的Session对象是同一个呢?

- 细节
- 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
- 答:默认情况下,不是。
- 解决方案:/Session
- 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
- 不是同一个,但是要确保数据不丢失(比如买手机加入购物车,期间服务器关闭,购物车数据会被清空!!!)
- 解决方案!
- 注:Tomcat自动帮我们把钝化和活化的事儿给办了!IDEA不行,因为IDEA重启Tomcat会删除work文件重建,则读取不到。
- Session钝化?
- 在服务器正常关闭之前,将Session对象序列化到硬盘上。
- (D:\MapCode\Tomcat9\work 在此目录保存 SESSIONS.ser 的Session对象)
- Session活化?
- 在服务器启动后,将Session文件转化为内存中的Session对象即可。
- 服务器正常启动D:\MapCode\Tomcat9\work\SESSIONS.ser 文件会被删除
- Session什么时候被销毁?
- 服务器关闭
- Session对象调用invalidate()方法。
- Session默认失效时间 30分钟!(例:30分钟内用户不做任何操作,则需要重新登陆)
- Tomcat下web.xml修改Session的过期时间。

- Session的特点

- 案例·验证码
- 需求

- 图文讲解

题
- 2023年5月10日

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~