文章目录
- 从一个例子说起
-
-
- 它的作用就是:
- 详细拆解
- 常见用法场景
- 小拓展
-
- response vs request
- 1. 先搞懂两个对象的身份
-
- **request = 请求(浏览器 → 服务器)**
- **response = 响应(服务器 → 浏览器)**
- 2. 跳转是谁发给谁?
- 3. 为什么不能用 request?
- 4. 最形象的比喻
- 5. 再看两个跳转,全都是 response
-
- **服务器告诉浏览器要跳转**
从一个例子说起
response.setHeader("refresh", "3;url=login.jsp");
它的作用就是:
让浏览器等待 3 秒,然后自动跳转到 login.jsp 页面。
详细拆解
常见用法场景
- 登录失败:账号或密码错误,3秒后返回登录页
- 登出成功:已退出登录,3秒后返回登录页
- 操作成功:添加成功,2秒后返回列表页
小拓展
- 想立刻跳转(0 秒):response.setHeader("refresh", "0;url=login.jsp");
- 跳转前可以先输出提示文字,用户体验更好:out.println("账号或密码错误!");
response.setHeader("refresh", "3;url=login.jsp");
response vs request
1. 先搞懂两个对象的身份
request = 请求(浏览器 → 服务器)
- 浏览器发给服务器的包裹
- 里面装的是:账号、密码、参数、Cookie
- 方向:浏览器 → 服务器
- 它是**“送来的包裹”**
response = 响应(服务器 → 浏览器)
- 服务器回复给浏览器的包裹
- 里面装的是:HTML、状态码、跳转指令、Cookie
- 方向:服务器 → 浏览器
- 它是**“返回的指令”**
2. 跳转是谁发给谁?
跳转指令 = 服务器告诉浏览器:“你3秒后去别的页面”
这是服务器对浏览器的命令,所以必须放在 response 里。
response.setHeader("refresh", "3;url=login.jsp");
意思就是: 服务器 → 响应头 → 浏览器:等3秒,跳转到登录页。
3. 为什么不能用 request?
因为 request 是浏览器发给服务器的,不是服务器发给浏览器的!
你如果写:
request.setHeader... ❌ 错误
就等于: 浏览器告诉服务器:我等会儿跳走 这完全逻辑颠倒!
4. 最形象的比喻
- request = 学生交作业(浏览器→服务器)
- response = 老师批改作业(服务器→浏览器)
setHeader("refresh") 相当于: 老师对学生说:你3秒后离开教室 → 这是老师的指令,必须写在 response(老师的回复) 里!
5. 再看两个跳转,全都是 response
response.sendRedirect("xxx"); // 立即跳转
response.setHeader("refresh", "3;url=xxx"); // 延时跳转
两个跳转,全都是 response 调用!
因为跳转永远是:
服务器告诉浏览器要跳转
- request:浏览器 → 服务器(只能拿数据,不能跳转)
- response:服务器 → 浏览器(才能输出、跳转、设置头)
所以跳转必须用 response,绝对不能用 request!




