【Java Web趣味解读】重定向vs转发?Cookie和Session?三大作用域保姆级拆解!
导语
刚学Java Web的小伙伴是不是总被“重定向”“转发”“Cookie”“Session”这些概念绕晕?明明都是“跳转页面”,为啥分两种?明明都是存数据,Cookie和Session又有啥不一样?今天就用奶茶店、超市会员卡这些生活化的例子,把这些知识点掰开揉碎讲清楚,保证有趣又好记!
一、先唠唠“跳转那些事”:重定向vs转发(302和内部串门)
咱们先举个🌰:你去奶茶店买“芋泥波波茶”,这就是一次“请求”。
-
重定向:像你先去A店,A店说“我家没芋泥了,你去B店买吧”,你听完出门,自己走到B店再问一遍“要芋泥波波茶”。
-
本质:浏览器发了两次请求(A店一次,B店一次),第一次响应状态码302,响应头里会带
Location:B.jsp(告诉你该去哪个页面)。 -
特点:两次请求!会创建新的request对象,之前存的属性全丢(比如你在A店跟店员说“少糖”,到B店得重新说)。
-
趣味总结:“出门再进门,啥都得重说”。
-
-
转发:还是买奶茶,你去A店,A店店员自己跑到后厨(B工位)拿芋泥,然后把做好的奶茶递给你。
-
本质:Servlet内部行为,浏览器只发了一次请求,全程都是A店在内部协调。
-
特点:一次请求!request对象不变,之前存的“少糖”属性还在(店员记得你的要求)。
-
趣味总结:“内部串门,啥事都记得”。
-
💡 重定向vs转发 秒懂对比表:
|
特性 |
重定向 |
转发 |
|---|---|---|
|
请求次数 |
2次 |
1次 |
|
request对象 |
新创建 |
同一个 |
|
地址栏 |
会变(显示B店地址) |
不变(还显示A店地址) |
|
本质 |
浏览器主动跳转 |
Servlet内部跳转 |
二、数据存哪?Cookie和Session(超市会员卡的两种玩法)
买完奶茶去超市逛,会员卡就是咱们的“数据存储工具”,对应Cookie和Session:
-
Cookie:存在你手里的纸质会员卡!
✅ 可禁用:你可以把会员卡扔了(浏览器禁用Cookie),超市就认不出你了;
✅ 容量小:最多存4096字节(就像会员卡只能写几行字,存不了大文件);
✅ 可过期:会员卡设了有效期,到期就作废(代码里用
setMaxAge()设置,-1表示关闭浏览器就失效);✅ 随请求带:你每次去超市,都得主动出示会员卡(Cookie会随HTTP请求自动发送给服务器)。
-
是什么:浏览器端的小型存储区域,键值对形式(比如
key=userName, value=张三)。 -
趣味特点:
-
-
Session:超市后台记的会员电子档案!
✅ 基于Cookie:超市给你一张“临时小票”(JSESSIONID存在Cookie里),你凭小票就能查后台的电子档案;
✅ 容量大:想存多少存多少(只要服务器扛得住,比如存用户的购物车、登录状态);
✅ 可失效:长时间不用,档案就被清了(代码里用
setMaxInactiveInterval()设置超时时间);✅ 更安全:数据存在服务器,不怕被篡改(比Cookie安全,敏感数据优先存在Session里)。
-
是什么:Tomcat服务器端的存储区域,也是键值对形式。
-
趣味特点:
-
三、三大作用域:数据的“居住权限”(快递存放点的区别)
Java Web里的三大作用域,就像小区里的快递存放点,不同存放点,快递能放的时间、能拿的人都不一样:
-
request(请求域):快递柜的“临时格口”
-
范围:一次请求内有效(比如你取一次快递,打开格口拿完,格口就清空了);
-
场景:转发时传递数据(比如A Servlet查完商品数据,转发到JSP展示,用
request.setAttribute()存数据)。
-
-
session(会话域):小区的“个人代收点”
-
范围:整个浏览器会话有效(只要浏览器不关,或者没超时,都能取);
-
场景:用户登录后,存用户信息(比如登录状态、购物车),跨请求都能用。
-
-
applicationContext(应用域):小区的“公共仓库”
-
范围:整个Web应用有效(服务器不关,所有用户都能访问);
-
场景:存全局数据(比如网站在线人数、商品分类列表)。
-
💡 三大作用域 核心对比:
|
作用域 |
生命周期 |
访问范围 |
趣味比喻 |
|---|---|---|---|
|
request |
一次请求 |
仅本次请求 |
临时快递格口 |
|
session |
浏览器会话 |
当前用户 |
个人代收点 |
|
applicationContext |
应用启动到停止 |
所有用户 |
小区公共仓库 |
总结
-
重定向是两次请求,转发是一次请求,核心区别在“是否新建request对象”;
-
Cookie存在浏览器(不安全、容量小),Session存在服务器(安全、容量大),Session依赖JSESSIONID的Cookie实现;
-
三大作用域的核心是“数据的生命周期和访问范围”,request最小,applicationContext最大。









