零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)

目录

一、它是什么?

二、它能干什么?

三、核心方法(考试重点)

[方法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             │
└──────────┴────────────────────┴──────────────────────┘
相关推荐
Drone_xjw1 小时前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
r_oo_ki_e_1 小时前
Java Map 集合学习笔记
java·笔记·学习
SL-staff2 小时前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
咖啡八杯2 小时前
GoF设计模式——模板方法模式
java·后端·spring·设计模式
爱笑的源码基地3 小时前
一款全开源的信创云PACS影像云平台解决方案,支持多模态医学影像处理(CT/MR/DR/超声/病理等)
java·源码·国产化·pacs·云影像·区域pacs
我命由我123453 小时前
Android 开发问题:ClickableSpan 的点击事件没有生效
java·java-ee·android studio·android jetpack·android-studio·android runtime
2zcode3 小时前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
万亿少女的梦1683 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
微信开发api-视频号协议4 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
犀利豆4 小时前
#AI in Harness(一)
java·ai编程