Servlet 会话与核心技术(Cookie、Session、ServletContext、ServletConfig 详解)
·
Servlet 会话与四大核心技术详解
(Cookie、Session、ServletContext、ServletConfig)含原理图解、作用、生命周期、常用方法、使用步骤、区别对比,适合考试 + 作业 + 面试背诵。
一、前提:会话概念
1. 什么是会话
一次会话:浏览器第一次访问服务器开始,直到浏览器关闭为止,期间所有多次请求,属于同一次会话。
2. 为什么需要会话技术
HTTP 协议是无状态的:每次请求都是独立的,服务器不会记住上一次用户信息。→ 用 Cookie、Session 保存用户状态、登录信息、购物车等。
3. 会话技术分类
- 客户端会话技术:Cookie(数据存在浏览器)
- 服务端会话技术:Session(数据存在服务器)
二、Cookie 详解
1. 原理图解
- 服务器创建 Cookie → 响应头带回浏览器
- 浏览器保存 Cookie
- 下次访问自动携带 Cookie 请求服务器
2. 作用
- 少量数据保存在客户端浏览器
- 记住用户名、免登录、浏览记录
- 存储文本、字符串,大小有限
3. 常用 API & 使用步骤
① 创建 Cookie
java
运行
Cookie cookie = new Cookie("username","zhangsan");
② 设置存活时间
java
运行
cookie.setMaxAge(60*60*24); // 单位:秒
// 正数:持久化保存
// 负数:浏览器关闭自动删除(默认)
// 0:立即删除Cookie
③ 发送 Cookie 到浏览器
java
运行
response.addCookie(cookie);
④ 服务器获取 Cookie
java
运行
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (Cookie c : cookies) {
String name = c.getName();
String value = c.getValue();
}
}
4. Cookie 特点
- 存在浏览器端,不安全
- 只能存字符串,容量小
- 可被禁用、清除
- 不能存中文(需编码解码)
三、HttpSession 详解
1. 原理
- 第一次请求:服务器创建 Session,生成唯一 JSESSIONID
- JSESSIONID 通过 Cookie 发给浏览器
- 浏览器下次请求携带 JSESSIONID
- 服务器根据 ID 找到用户的 Session
2. 作用
- 服务端保存用户数据
- 存放登录状态、会员信息、购物车
- 安全性高,大小无限制
3. 常用 API
① 获取 Session 对象
java
运行
// 没有就新建,有就获取
HttpSession session = request.getSession();
② 域对象:存 / 取 / 删数据
java
运行
// 存
session.setAttribute("user", "张三");
// 取
Object user = session.getAttribute("user");
// 删
session.removeAttribute("user");
③ 销毁 & 有效期
java
运行
// 手动销毁会话
session.invalidate();
// 设置空闲过期时间(秒)
session.setMaxInactiveInterval(30*60);
4. Session 生命周期
- 创建:第一次调用
getSession() - 存活:浏览器不关闭、无超时
- 销毁:
- 手动
invalidate() - 超时自动销毁
- 服务器正常关闭
5. Cookie 与 Session 区别
表格
| 对比 | Cookie | Session |
|---|---|---|
| 存储位置 | 浏览器客户端 | 服务器端 |
| 安全性 | 低,易篡改 | 高 |
| 存储内容 | 小、字符串 | 任意对象、大数据 |
| 生命周期 | 可手动设置 | 依赖会话 + 超时 |
| 依赖关系 | 独立 | 依赖 Cookie (JSESSIONID) |
四、ServletContext 全局域对象
1. 概述
- 全局唯一:一个项目只有一个
ServletContext - 服务器启动创建,服务器关闭销毁
- 俗称:全局上下文对象
2. 作用
- 整个项目共享数据(所有用户、所有 Servlet 共享)
- 获取项目全局配置参数
- 获取项目资源真实路径
3. 获取方式
java
运行
//方式1
ServletContext context = getServletContext();
//方式2
ServletContext context = request.getServletContext();
4. 核心方法
① 全局域存取值
java
运行
context.setAttribute("globalMsg","全局数据");
context.getAttribute("globalMsg");
② 获取项目真实路径
java
运行
String path = context.getRealPath("/");
③ 获取全局配置参数
java
运行
String value = context.getInitParameter("key");
5. 生命周期
- 服务器启动 → 创建
- 服务器关闭 → 销毁
五、ServletConfig 对象
1. 作用
代表 单个 Servlet 的配置对象用来获取当前 Servlet 的局部初始化参数
2. 获取方式
java
运行
ServletConfig config = getServletConfig();
3. 常用方法
java
运行
//获取当前servlet名称
String servletName = config.getServletName();
//获取当前servlet局部初始化参数
String value = config.getInitParameter("key");
4. 特点
- 每个 Servlet 独有一个
ServletConfig - 只作用于当前 Servlet
- 配置写在 web.xml/ @WebServlet 注解内
六、四大域对象 完整对比
四个域:
- PageContext:页面范围(JSP)
- HttpServletRequest:一次请求范围
- HttpSession:一次会话范围
- ServletContext:整个项目全局范围
表格
| 域对象 | 范围 | 生命周期 | 适用场景 |
|---|---|---|---|
| request | 一次请求 | 请求结束销毁 | 转发传参 |
| session | 一次会话 | 浏览器关闭 / 超时 | 登录、购物车 |
| servletContext | 整个项目 | 服务器启停 | 全局共享、网站统计 |
| servletConfig | 单个 Servlet | Servlet 启停 | 读取局部配置 |
七、完整使用代码示例
1. Cookie 示例
java
运行
//创建
Cookie cookie = new Cookie("nickname","test");
cookie.setMaxAge(1000);
response.addCookie(cookie);
2. Session 示例
java
运行
HttpSession session = request.getSession();
session.setAttribute("loginUser","admin");
3. ServletContext 示例
java
运行
ServletContext app = getServletContext();
app.setAttribute("count",100);
4. ServletConfig 示例
java
运行
ServletConfig config = getServletConfig();
String info = config.getInitParameter("info");
八、极简总结
- Cookie:客户端存数据,不安全,小数据
- Session:服务端存数据,安全,依赖 Cookie,存登录信息
- ServletContext:全局唯一,项目共享,服务器启停
- ServletConfig:单个 Servlet 专属,读取局部配置
- 域范围从小到大:
request < session < servletContext
更多推荐




所有评论(0)