零基础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             │
└──────────┴────────────────────┴──────────────────────┘
相关推荐
这个昵称不容易1 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
张张123y2 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
文丑颜不良啊3 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼3 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
冻柠檬飞冰走茶5 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
文丑颜不良啊5 小时前
LeetCode2161~2180题目解析
java·leetcode
FRing035 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊5 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆6756 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典