Java Servlet API 中 HttpServletResponse 接口的源码,这是 Java Web 开发中非常核心的一个接口,用于向客户端(通常是浏览器)发送 HTTP 响应


public interface HttpServletResponse extends ServletResponse {int SC_CONTINUE = 100;int SC_SWITCHING_PROTOCOLS = 101;int SC_OK = 200;int SC_CREATED = 201;int SC_ACCEPTED = 202;int SC_NON_AUTHORITATIVE_INFORMATION = 203;int SC_NO_CONTENT = 204;int SC_RESET_CONTENT = 205;int SC_PARTIAL_CONTENT = 206;int SC_MULTIPLE_CHOICES = 300;int SC_MOVED_PERMANENTLY = 301;int SC_MOVED_TEMPORARILY = 302;int SC_FOUND = 302;int SC_SEE_OTHER = 303;int SC_NOT_MODIFIED = 304;int SC_USE_PROXY = 305;int SC_TEMPORARY_REDIRECT = 307;int SC_BAD_REQUEST = 400;int SC_UNAUTHORIZED = 401;int SC_PAYMENT_REQUIRED = 402;int SC_FORBIDDEN = 403;int SC_NOT_FOUND = 404;int SC_METHOD_NOT_ALLOWED = 405;int SC_NOT_ACCEPTABLE = 406;int SC_PROXY_AUTHENTICATION_REQUIRED = 407;int SC_REQUEST_TIMEOUT = 408;int SC_CONFLICT = 409;int SC_GONE = 410;int SC_LENGTH_REQUIRED = 411;int SC_PRECONDITION_FAILED = 412;int SC_REQUEST_ENTITY_TOO_LARGE = 413;int SC_REQUEST_URI_TOO_LONG = 414;int SC_UNSUPPORTED_MEDIA_TYPE = 415;int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;int SC_EXPECTATION_FAILED = 417;int SC_INTERNAL_SERVER_ERROR = 500;int SC_NOT_IMPLEMENTED = 501;int SC_BAD_GATEWAY = 502;int SC_SERVICE_UNAVAILABLE = 503;int SC_GATEWAY_TIMEOUT = 504;int SC_HTTP_VERSION_NOT_SUPPORTED = 505;void addCookie(Cookie var1);boolean containsHeader(String var1);String encodeURL(String var1);String encodeRedirectURL(String var1);/** @deprecated */@DeprecatedString encodeUrl(String var1);/** @deprecated */@DeprecatedString encodeRedirectUrl(String var1);void sendError(int var1, String var2) throws IOException;void sendError(int var1) throws IOException;void sendRedirect(String var1) throws IOException;void setDateHeader(String var1, long var2);void addDateHeader(String var1, long var2);void setHeader(String var1, String var2);void addHeader(String var1, String var2);void setIntHeader(String var1, int var2);void addIntHeader(String var1, int var2);void setStatus(int var1);/** @deprecated */@Deprecatedvoid setStatus(int var1, String var2);int getStatus();String getHeader(String var1);Collection<String> getHeaders(String var1);Collection<String> getHeaderNames();default void setTrailerFields(Supplier<Map<String, String>> supplier) {}default Supplier<Map<String, String>> getTrailerFields() {return null;}
}

🧩 一、作用概述

HttpServletResponseServletResponse 的子接口,专门用于处理 HTTP 协议的响应内容。在 Servlet 中,当服务器收到请求后,会创建一个 HttpServletRequest 对象封装请求信息,同时也会创建一个 HttpServletResponse 对象来构建响应内容。

开发者可以通过这个对象:

  • 设置响应状态码
  • 添加响应头(Headers)
  • 写入响应体(Body)
  • 发送重定向
  • 添加 Cookie 等

📌 二、主要常量:HTTP 状态码

该接口定义了大量常用的 HTTP 状态码常量,方便开发者直接使用,例如:

状态码常量含义
SC_OK (200)请求成功
SC_FOUND (302)临时重定向
SC_NOT_FOUND (404)资源未找到
SC_INTERNAL_SERVER_ERROR (500)服务器内部错误
SC_FORBIDDEN (403)拒绝访问
SC_UNAUTHORIZED (401)未授权

这些状态码可以直接通过 response.setStatus(HttpServletResponse.SC_OK); 来设置。


🛠️ 三、常用方法详解

1. 设置响应状态码

void setStatus(int sc);

设置响应的状态码,比如 200、404 等。

⚠️ 注意:setStatus(int, String) 方法已被废弃。


2. 发送错误响应

void sendError(int sc) throws IOException;
void sendError(int sc, String msg) throws IOException;

发送错误状态码给客户端,并可选地附带错误消息。

示例:

response.sendError(HttpServletResponse.SC_NOT_FOUND, "资源不存在");

3. 重定向

void sendRedirect(String location) throws IOException;

让浏览器跳转到新的 URL(会发起一个新的请求)。

示例:

response.sendRedirect("http://example.com");

4. 添加/设置响应头

void setHeader(String name, String value);
void addHeader(String name, String value);
void setDateHeader(String name, long date);
void setIntHeader(String name, int value);
  • setHeader():覆盖已有的 header。
  • addHeader():追加 header(可以有多个相同名称的 header)。

示例:

response.setHeader("Content-Type", "text/html;charset=utf-8");
response.setIntHeader("Refresh", 5); // 每5秒刷新一次页面

5. 添加 Cookie

void addCookie(Cookie cookie);

示例:

Cookie cookie = new Cookie("user", "Tom");
cookie.setMaxAge(60 * 60 * 24); // 一天有效期
response.addCookie(cookie);

6. URL 编码(用于会话跟踪)

String encodeURL(String url);
String encodeRedirectURL(String url);

用于对 URL 进行编码,以支持 Session ID 的追踪(如 Cookie 被禁用时)。

示例:

String encodedUrl = response.encodeURL("index.jsp");

⚠️ 已废弃的方法:

@Deprecated
String encodeUrl(String url);
String encodeRedirectUrl(String url);

7. 获取和设置 Trailer Fields(HTTP 1.1 分块传输尾部字段)

default void setTrailerFields(Supplier<Map<String, String>> supplier) {}
default Supplier<Map<String, String>> getTrailerFields() { return null; }

用于在分块传输(chunked transfer)结束后发送一些额外的头部信息(trailer headers),但实际使用较少。


8. 检查是否已经包含某个 Header

boolean containsHeader(String name);

返回当前响应是否已经设置了指定名称的 header。


📁 四、常见使用场景举例

✅ 场景 1:返回 JSON 数据

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("application/json;charset=UTF-8");PrintWriter out = response.getWriter();out.print("{\"message\": \"Hello World\"}");
}

✅ 场景 2:重定向到另一个页面

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.sendRedirect("/success.html");
}

✅ 场景 3:下载文件

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=\"test.txt\"");// 写入文件内容到输出流OutputStream out = response.getOutputStream();out.write("This is the file content".getBytes());out.flush();
}

📚 五、与 Spring MVC 的关系

在 Spring MVC 中,虽然我们很少直接操作 HttpServletResponse,但底层依然是基于它实现的。Spring 提供了更高层的抽象,如:

  • @ResponseBody
  • ResponseEntity<T>
  • HttpServletResponse 作为控制器方法参数传入

例如:

@GetMapping("/data")
public ResponseEntity<String> getData() {return ResponseEntity.ok("Hello");
}

或者:

@GetMapping("/download")
public void downloadFile(HttpServletResponse response) throws IOException {response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment; filename=file.pdf");// 写入 PDF 文件内容到 response.getOutputStream()
}

🔐 六、注意事项

项目建议
不要多次调用 getWriter()getOutputStream()两者不能共用,否则抛出 IllegalStateException
设置 ContentType 应该尽早防止乱码问题
避免在异步或过滤器链中提前提交响应否则后续逻辑将无法执行
sendRedirect 之后应 return避免继续执行代码造成异常

🧠 总结

HttpServletResponse 是 Java Web 开发中控制 HTTP 响应的核心接口,掌握它可以让我们更灵活地处理以下内容:

  • 返回数据(JSON、HTML、文件等)
  • 控制浏览器行为(重定向、缓存、刷新)
  • 安全控制(设置 Headers、Cookie)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84598.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84598.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84598.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI基础概念

目录 1、ASR和STT区别 2、流式输出 定义 原理 应用场景 优点 缺点 3、Ollama 4、mindspore和deepseek r1 v3 5、DeepSeek R1/V3 用的哪个底层AI框架 6、HAI-LLM比tensorflow、pytorch还强么 1. 核心优势对比 2. 性能表现 3. 适用场景 总结 7、openai用的什么底层…

ubuntu20.04速腾聚创airy驱动调试

1.下载相关资料 下载包括&#xff1a;速腾airy产品手册.pdf、RSView&#xff08;用于显示激光雷达数据&#xff09;、3d数模文件、 RS-LiDAR-16用户手册 以下链接进行下载 https://www.robosense.cn/resources 2.连接线路后通过Wireshark抓包后进行本地IP配置 2.1按照线路连…

Redis的大key和热key如何解决

文章目录 Redis大Key一、什么是Redis大Key二、大Key的产生原因三、大Key的影响四、大Key的解决方案1. 检测大Key2. 解决方案(1) 数据拆分(2) 使用压缩算法(3) 使用合适的数据结构(4) 设置合理的过期时间(5) 合理清理(6) 配置优化 五、预防措施总结 Redis热key一、热Key问题的本…

恒温晶振与温补晶振的区别

在电子设备领域&#xff0c;晶振如同精准的“心脏起搏器”&#xff0c;为电路提供稳定的时钟信号。恒温晶振&#xff08;OCXO&#xff09;和温补晶振&#xff08;TCXO&#xff09;作为两类重要的晶体振荡器&#xff0c;在不同的应用场景中发挥着关键作用&#xff0c;它们的区别…

基于SpringBoot的在线考试智能监控系统设计与实现

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅Java开发语言3. ✅Vue.js框架4. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 教师模块2.1 考试管理2.2 浏览试题列表2.3 添加试题2.4 成…

0基础学Python系列【16】自动化邮件发送的终极教程:Python库smtplib与email详解

大家好,欢迎来到Python学习的第二站!🎉 Python自带了一些超好用的模块,可以让你不必从头写代码就能实现很多功能。比如数学计算、文件操作、网络通信等。花姐会挑选常用的一些模块来讲解,确保你能在实际项目中用到。🎉 本章要学什么? 接下来花姐会深入浅出的讲解下面…

环卫车辆定位与监管:安心联车辆监控管理平台--科技赋能城市环境卫生管理

一、 引言 城市环境卫生是城市文明的重要标志&#xff0c;也是城市管理的重要内容。随着城市化进程的加快&#xff0c;环卫作业范围不断扩大&#xff0c;环卫车辆数量不断增加&#xff0c;传统的管理模式已难以满足现代化城市管理的需求。为提高环卫作业效率&#xff0c;加强环…

GIS 数据质检:验证 Geometry 有效性

前言 在GIS开发中&#xff0c;数据的几何有效性直接影响分析结果的准确性。无效的几何&#xff08;如自相交、空洞或坐标错误&#xff09;可能导致空间计算失败或输出偏差。无论是Shapefile、GeoJSON还是数据库中的空间数据&#xff0c;几何质检都是数据处理中不可忽视的关键步…

AI大模型学习之基础数学:高斯分布-AI大模型概率统计的基石

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

HarmonyOS性能优化——耗时操作减少

耗时操作减少 在应用开发中&#xff0c;避免主线程执行冗余和耗时操作至关重要。这可以降低主线程负载&#xff0c;提升UI响应速度。 避免主线程冗余操作 冗余操作是不必要的、重复执行且对程序功能无实质性贡献的操作。这些操作浪费计算资源&#xff0c;降低程序运行效率&a…

emscripten 编译 wasm 版本的 openssl

搭建emscripten环境【参考&#xff1a;https://emscripten.org/docs/getting_started/downloads.html】 下载openssl解压复制到emsdk目录 依次执行下列命令&#xff1a; cd emsdk #激活emsdk source ./emsdk_env.shcd opensslemconfigure ./Configure linux-x32 -no-asm -sta…

uniapp 实战新闻页面(一)

新闻系统 一、 创建项目 创建个人中心 page.json 配置 tabar "tabBar": {"color":"#666","selectedColor": "#31C27C","list": [{"text": "首页","pagePath": "pages/inde…

JAVA锁机制:对象锁与类锁

JAVA锁机制&#xff1a;对象锁与类锁 在多线程编程中&#xff0c;合理使用锁机制是保证数据一致性和线程安全的关键。本文将通过示例详细讲解 Java 中的对象锁和类锁的原理、用法及区别。 一、未加锁的并发问题 先看一段未加锁的代码&#xff1a; public class Synchronize…

maxcomputer 和 hologres中的EXTERNAL TABLE 和 FOREIGN TABLE

在阿里云的大数据和实时数仓产品中&#xff0c;MaxCompute 和 Hologres 都支持类似于 EXTERNAL TABLE 和 FOREIGN TABLE 的机制&#xff0c;但它们的实现和语义有所不同。 下面分别说明&#xff1a; ☁️ 一、MaxCompute 中的 EXTERNAL TABLE 和 FOREIGN TABLE 1. EXTERNAL T…

稳定币:从支付工具到金融基础设施的技术演进与全球竞争新格局

引言&#xff1a;稳定币的崛起与金融体系重构 2025年6月&#xff0c;全球稳定币市值突破2500亿美元历史大关&#xff0c;单年链上交易额高达35万亿美元——这一数字已超越Visa和万事达卡交易总和。这一里程碑事件标志着稳定币已从加密货币市场的边缘实验&#xff0c;蜕变为重构…

用 HTML、CSS 和 jQuery 打造多页输入框验证功能

多页输入框验证功能总结:使用 HTML、CSS 和 jQuery 实现 一、多页表单验证的核心概念与应用场景 多页输入框验证是指将复杂表单拆分为多个页面或步骤,逐步引导用户完成输入,并在每一步对用户输入进行验证的功能。这种设计具有以下优势: 提升用户体验:避免长表单带来的心…

DeepSpeed 深度学习学习笔记:高效训练大型模型

主要参考官网文档&#xff0c;对于具体内容还需参考官方文档 1. 引言&#xff1a;为什么需要 DeepSpeed&#xff1f; 大型模型训练的挑战 随着深度学习模型规模的爆炸式增长&#xff08;从 BERT 的几亿参数到 GPT-3 的千亿参数&#xff0c;再到现在的万亿参数模型&#xff09…

编程基础:耦合

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 耦合&#xff1a;功能的单一性&#xff0c;功能越拆分则单一功能越好维护 耦合&#xff1a;功能的单一性&#xff0c;功能越拆分则单一功能越好维护

基于Qt的UDP主从服务器设计与实现

概述 一个基于Qt框架实现的UDP主从服务器系统&#xff0c;该系统具备自动主机选举、故障转移和状态同步等关键功能&#xff0c;适用于分布式能源管理系统中的设备通信与协调。 系统核心功能 1. 自动主机选举与故障转移 系统通过优先级机制实现自动主机选举&#xff0c;当主机…

【51单片机2位数码管100毫秒的9.9秒表】2022-5-16

缘由 这一题刚设计好要去回复就看到结帖了&#xff0c;好似看到我设计完成就盗窃去了&#xff0c;如此下面类似题目很容易也懒得回复了。 #include "reg52.h" sbit k0P3^0; sbit k1P3^1; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,111};//0-9 uns…