零基础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             │
└──────────┴────────────────────┴──────────────────────┘
相关推荐
DJ斯特拉1 小时前
axios快速使用
开发语言·前端·javascript
许彰午1 小时前
39_Java单元测试JUnit入门
java·junit·单元测试
shushangyun_1 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
JAVA9651 小时前
JAVA面试-JVM篇 03-JVM运行时数据区哪些是线程私有的哪些是共享的
java·jvm·面试
xingpanvip1 小时前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
于先生吖1 小时前
教育类Java实战项目:在线错题整理平台分层架构设计与接口源码解析
java·开发语言
慧一居士1 小时前
Feign的GET请求如何传递对象参数?
java·spring cloud
桥田智能1 小时前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
开发小能手-roy2 小时前
StringBuilder vs StringBuffer:2024年还需要线程安全字符串吗?
开发语言·python·安全