HttpServletResponse 对象用来做什么? - 详解

news/2025/10/6 14:25:27/文章来源:https://www.cnblogs.com/yxysuanfa/p/19127598

HttpServletResponse 对象是由 Servlet 容器创建并传递给 Servlet 的 service() 方法(以及间接传递给 doGet(), doPost() 等方法)的。它的核心作用是让 Servlet 能够向客户端(通常是浏览器)发送 HTTP 响应

通过 HttpServletResponse 对象,我们可以:

  1. 设置响应状态码 (Status Code)
  2. 设置响应头 (Headers)
  3. 设置 Cookie
  4. 写入响应体 (Response Body),即发送内容回浏览器

下面我们详细看看如何进行这些操作:


1. 设置响应状态码 (Status Code)

状态码告诉浏览器请求的处理结果(例如,成功、未找到、服务器错误等)。


2. 设置响应头 (Headers)

响应头包含关于响应的元数据,例如内容类型、缓存控制、自定义信息等。


3. 设置 Cookie

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它们会在浏览器下次向同一服务器发起请求时被携带并发送到服务器上。


4. 将内容发送回浏览器 (写入响应体)

一旦状态码和头信息设置完毕,你就可以开始向响应体写入实际内容了。你有两种方式获取输出流:

重要: 你在一个响应中只能调用 getWriter()getOutputStream() 一次。调用其中一个后,就不能再调用另一个了,否则会抛出 IllegalStateException


完整示例 (一个简单的 Servlet):

package com.example
;
import java.io.IOException
;
import java.io.PrintWriter
;
import java.util.Date
;
import javax.servlet.ServletException
;
import javax.servlet.annotation.WebServlet
;
import javax.servlet.http.Cookie
;
import javax.servlet.http.HttpServlet
;
import javax.servlet.http.HttpServletRequest
;
import javax.servlet.http.HttpServletResponse
;
@WebServlet("/hello"
)
public
class HelloServlet
extends HttpServlet {
@Override
protected
void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException
, IOException {
// 1. 设置状态码 (默认是 200 OK,如果一切正常,可以不显式设置)
response.setStatus(HttpServletResponse.SC_OK
)
;
// 2. 设置响应头
response.setContentType("text/html; charset=UTF-8"
)
;
response.setHeader("X-Server-Time"
,
new Date(
).toString(
)
)
;
// 3. 设置 Cookie
Cookie visitCookie =
new Cookie("lastVisit"
, String.valueOf(System.currentTimeMillis(
)
)
)
;
visitCookie.setMaxAge(60 * 60 * 24 * 7
)
;
// 7 days
visitCookie.setPath(request.getContextPath(
) + "/"
)
;
visitCookie.setHttpOnly(true
)
;
response.addCookie(visitCookie)
;
// 4. 获取 PrintWriter 并写入响应体
// (注意:一旦调用 getWriter() 或 getOutputStream(),响应头就被认为是“已提交”,不能再修改状态码或头信息)
PrintWriter out = response.getWriter(
)
;
out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head>");out.println("<meta charset=\"UTF-8\">");out.println("<title>Servlet Response</title>");out.println("</head>");out.println("<body>");out.println("<h1>Hello, World from Servlet!</h1>");out.println("<p>Welcome! Your request was processed successfully.</p>");out.println("<p>Check your browser's developer tools for the 'X-Server-Time' header and the 'lastVisit' cookie.</p>");out.println("</body>");
out.println("</html>"
)
;
// 通常不需要显式调用 out.close(),因为 Servlet 容器会在请求处理完成后自动关闭它。
// 但如果是在 Filter 中或有特殊资源管理需求,可能需要。
}
}

关键点总结:

  • 顺序很重要: 设置状态码、响应头和 Cookie 必须在第一次调用 response.getWriter()response.getOutputStream() 之前完成,或者在响应被提交(flushed)之前完成。一旦响应体开始写入,头信息就不能再更改了。
  • getWriter() vs getOutputStream(): 只能选择一个,不能同时使用。
  • 字符编码: 对于文本内容,务必设置正确的字符编码(通常是 UTF-8)以避免乱码问题。
  • 容器管理: Servlet 容器负责在请求处理结束后刷新和关闭输出流。

通过这些方法,HttpServletResponse 提供了全面的控制,使 Servlet 能够构建并发送各种类型的 HTTP 响应给客户端。

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

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

相关文章

谁有国外hs网站手表购物网站排名

核心提示&#xff1a;相信很多机友都会使用UC浏览器&#xff0c;但是其多个功能你们能了解多少? 下面小编就为大家介绍UC浏览器云标签使用方法吧! 1、打开【UC浏览器】&#xff0c;点击【多窗口】按钮&#xff0c;然后点击【云标签】;(如下图所示) 2、登陆微博、QQ等&#…

牛客 周赛109 20250924

牛客 周赛109 20250924 https://ac.nowcoder.com/acm/contest/116945 A: 题目大意: 给定两个坐标,判断和原点一起能否构成一个直角三角形 void solve(){double x, y, u, v;cin >> x >> y >> u &g…

域名网站如何做市场推广长沙网页网站制作

在赋予一个string值的时候&#xff0c;可以用单引号或者双引号。 1.单引号和双引号的区别&#xff1a; 单引号&#xff1a;不会翻译变量。 双引号&#xff1a;会翻译变量&#xff0c;会将变量替换为之前赋予变量的值。 例子&#xff1a; &#xff08;1&#xff09;单引号&a…

建歌网站多少钱温州网站建设价格

💡💡💡本文独家改进:卷积和注意力融合模块(CAFMAttention),增强对全局和局部特征的提取能力,2024年最新的改进思路 💡💡💡创新点:卷积和注意力巧妙设计 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect前面,增…

罗技G102螺丝型号

共有三种,都是PH00螺丝(反正就就是很小的十字螺丝) 外壳固定用  M1.4*4mm  直径3mm厚0.5的平头螺丝  共三个 侧键固定用  M2*4mm   直径5mm厚0.5的平头螺丝  共俩个 主板固定用  M1.4*3mm  直径4…

详细介绍:深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制

详细介绍:深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

公司网站建设进度vitality wordpress

TCP与UDP TCP 是面向连接的、可靠的流协议&#xff0c;通过三次握手建立连接&#xff0c;通讯完成时要拆除连接。 UDP是面向无连接的通讯协议&#xff0c;UDP通讯时不需要接收方确认&#xff0c;属于不可靠的传输&#xff0c;可能会出现丢包现象 端口号&#xff1a; 端口号用…

上海网站建设 销售营销型网站开发推荐

一、产品介绍 此次发布一款7寸高清全新外壳产品&#xff0c;让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动&#xff1a; 1 表面玻璃盖板使用2.5D立体结构&#xff1b; 2 液晶盖板采用一体黑设计&#xff0c;且液晶屏与触摸板是全贴合结构&#xff1b; …

广州网站建设培训学校seo优化外包

了解动态内存函数 前言&#xff1a;一、malloc函数二、calloc函数三、realloc函数四、free函数 前言&#xff1a; 在C语言中&#xff0c;动态内存函数是块重要的知识点。以往&#xff0c;我们开辟空间都是固定得&#xff0c;数组编译结束后就不能继续给它开辟空间了&#xff0…

[LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录

[LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录2024.02.18 本教程目标 在无公网环境低成本的实现较为稳定的 Minecraft Java版联机(服务器) 目前常见的联机(服务器)方法及其问题(针对好友联机和小…

系统管理员的日常困境与幽默自嘲

这篇文章通过Reddit论坛上系统管理员们的真实讨论,展现了IT专业人员面对"请联系系统管理员"这类提示时的无奈与幽默,揭示了技术支持工作中的常见困境和职业共鸣。这篇文章通过Reddit论坛上系统管理员们的真…

46设计网站官网网站开发项目团队人员

前言 如果你被hutool坑过、被fastjson坑过&#xff0c;nicetool帮你解脱&#xff01; 如果你想用稳定、Spring原生的工具类&#xff0c;nicetool已帮你封装&#xff01; nicetool不生产工具&#xff0c;只是JDK和Spring的封装侠&#xff01; 介绍 nicetool&#xff1a;超好…

实用指南:Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化

实用指南:Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

电子商务网站类型培训学校 网站费用

处理域名连接nacos读取配置异常 1 项目启动报错2 问题处理3 刷新依赖重启问题解决 1 项目启动报错 使用ip可以正在启动&#xff0c;但是使用域名报下面的错误 2024-06-15 17:37:22.981 ERROR 29268 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : parse …

视频素材网站建设有没有专门做印刷图的网站

前言 对于使用jmeter工具完成接口测试的测试工程师而言。在工作中&#xff0c;或者在面试中&#xff0c;都会遇到一个问题。 CSV文档做了一大笔测试数据后&#xff0c;怎么去校验这个结果呢&#xff1f; 现在大部分测试工程师可能都是通过人工的方法去查看结果&#xff0c;十几…

AI数据标注平台获融资挑战行业巨头

一家AI数据平台公司获得1300万美元融资,专注于为开发者提供数据标注、管理和模型评估工具,帮助构建高质量AI训练数据集,客户包括多家知名科技企业。AI数据平台获得1300万美元融资挑战行业竞争对手 人工智能数据平台…

详细介绍:如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)

详细介绍:如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

广州网站ui设计贵港免费的网站建设

我是个前端菜鸡&#xff0c;最近准备学习一点前端知识&#xff0c;先从Bootstrap5开始&#xff0c;毕竟早期Bootstrap还是比较火的。推出的Bootstrap5不再和jQery强制绑定&#xff0c;这里直接按照官方文档上来操作&#xff0c;打包工具我们选择Webpack。 一 前期准备 前期准备…

网站开发工具最好用做网站的工作量

https://blog.csdn.net/layman1024/article/details/72628379