目录
[方法1:sendRedirect("页面地址") ------ 重定向(说白了就是跳转网页)](#方法1:sendRedirect("页面地址") —— 重定向(说白了就是跳转网页))
[方法2:setHeader("头名", "值") ------ 设置响应头](#方法2:setHeader("头名", "值") —— 设置响应头)
[方法3:addCookie(Cookie对象) ------ 添加Cookie(后续会具体讲解Cookie)](#方法3:addCookie(Cookie对象) —— 添加Cookie(后续会具体讲解Cookie))
[四、重点详解:重定向 sendRedirect](#四、重点详解:重定向 sendRedirect)
[4.1 基本用法](#4.1 基本用法)
[4.2 经典场景:登录验证](#4.2 经典场景:登录验证)
[五、转发 vs 重定向(考试必考对比)](#五、转发 vs 重定向(考试必考对比))
一、它是什么?
还记得 request 吗?request 是浏览器发过来的"请求包裹"。
那 response 就是反过来------服务器返回给浏览器的"响应包裹"。
浏览器 ──request(请求)──→ 服务器
浏览器 ←─response(响应)── 服务器
生活比喻:你在餐厅点了一碗面(request),厨师做好后,服务员把面端给你(response)。
二、它能干什么?
response 负责服务器给浏览器"回信"。主要干三件事:
| 功能 | 说明 |
|---|---|
| 重定向 | 让浏览器自动跳转到另一个页面 |
| 设置响应头 | 告诉浏览器一些额外信息(比如5秒后刷新) |
| 添加Cookie | 把Cookie存到浏览器上 |
三、核心方法(考试重点)
方法1:sendRedirect("页面地址") ------ 重定向(说白了就是跳转网页)
这是 response 最重要的方法,考试必考。
作用:让浏览器自动跳转到另一个页面。
<%
response.sendRedirect("login.jsp");
%>
效果 :浏览器地址栏变成 login.jsp,页面内容也变成 login.jsp。
方法2:setHeader("头名", "值") ------ 设置响应头
作用:告诉浏览器做一些特殊操作。
定时刷新跳转:
html
<%
// 5秒后自动跳转到百度
response.setHeader("Refresh", "5;url=https://www.baidu.com");
%>
<p>5秒后自动跳转到百度...</p>
方法3:addCookie(Cookie对象) ------ 添加Cookie(后续会具体讲解Cookie)
作用:把数据存到浏览器上。
html
<%
Cookie c = new Cookie("username", "zhangsan");
c.setMaxAge(60 * 60 * 24); // 保存24小时
response.addCookie(c);
%>
这个方法等讲到Cookie那一课再细讲,现在先知道有这个东西就行。
四、重点详解:重定向 sendRedirect
4.1 基本用法
html
<%
response.sendRedirect("welcome.jsp");
%>
效果:
-
浏览器地址栏从
check.jsp变成welcome.jsp -
页面内容变成
welcome.jsp的内容
4.2 经典场景:登录验证
登录页 login.jsp:
html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>登录</title></head>
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
验证页 check.jsp:
html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("admin".equals(username) && "123".equals(password)) {
// 登录成功 → 重定向到欢迎页
response.sendRedirect("welcome.jsp");
} else {
// 登录失败 → 重定向回登录页
response.sendRedirect("login.jsp");
}
%>
欢迎页 welcome.jsp:
html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>欢迎</title></head>
<body>
<h1>登录成功!欢迎你!</h1>
</body>
</html>
运行 :访问 login.jsp → 输入 admin / 123 → 点登录 → 跳转到 welcome.jsp,地址栏也变了。
五、转发 vs 重定向(考试必考对比)
response.sendRedirect() 是重定向 ,和转发经常放在一起考。
| 对比项 | 转发 forward | 重定向 sendRedirect |
|---|---|---|
| 代码 | request.getRequestDispatcher("页面").forward(request, response) |
response.sendRedirect("页面") |
| 请求次数 | 1次 | 2次 |
| 地址栏 | 不变 | 改变 |
| request数据 | 保留 | 丢失 |
| 属于哪个对象 | request的方法 | response的方法 |
生活比喻
转发 = 你打电话给客服,客服说"我帮你转接另一个部门"
→ 你没挂电话,还是同一通电话
→ 地址栏不变,数据保留
重定向 = 你打电话给客服,客服说"你打另一个号码吧"
→ 你挂了电话,重新拨号
→ 地址栏改变,之前的数据没了
什么时候用哪个?
| 场景 | 用转发还是重定向? |
|---|---|
| 登录成功,跳转到主页 | 重定向(地址栏要变) |
| 查询结果传给结果页 | 转发(数据要保留) |
| 登录失败,回到登录页 | 重定向 |
| A页面处理完,数据给B页面显示 | 转发 |
简单判断:需要保留数据 → 转发;需要地址栏改变 → 重定向。
六、完整对比代码
转发:
html
<%
request.setAttribute("msg", "这是要传递的数据");
request.getRequestDispatcher("target.jsp").forward(request, response);
%>
-
地址栏不变
-
target.jsp能拿到request.getAttribute("msg")
重定向:
html
<%
request.setAttribute("msg", "这是要传递的数据");
response.sendRedirect("target.jsp");
%>
-
地址栏变成
target.jsp -
target.jsp拿不到request.getAttribute("msg")(因为数据丢了)
七、总结
response = 服务器返回给浏览器的响应
核心方法:
1. sendRedirect("页面") → 重定向,地址栏改变,数据丢失
2. setHeader("Refresh","5") → 定时刷新
必记对比:
┌──────────┬────────────────────┬──────────────────────┐
│ │ 转发 forward │ 重定向 sendRedirect │
├──────────┼────────────────────┼──────────────────────┤
│ 请求次数 │ 1次 │ 2次 │
│ 地址栏 │ 不变 │ 改变 │
│ 数据 │ 保留 │ 丢失 │
│ 属于 │ request │ response │
└──────────┴────────────────────┴──────────────────────┘