为什么在调用 getWriter() 后无法更新 HttpServletResponse 标头?

2023-11-25

今天下午修复了一个问题后,我一直在网上进行挖掘,其中添加到 HttpServletResponse 的 Cookie 没有正确反映在响应标头中,因为我们的 Servlet 之前已经检索了响应的 PrintWriter(即 response.getWriter())我们添加了cookie。我现在知道,最佳实践规定必须在调用 getWriter() 之前完成响应标头修改(即设置内容类型、添加/编辑 Cookie 等),但是,我要查找的是:为什么?

我们一直在猜测为什么检索 PrintWriter 实际上会冻结响应标头,但为什么 Servlet 规范明确强制执行这一点?


Section SRV.5.2 标头 of the Java™ Servlet 规范版本 2.4

为了成功传回客户端,必须在之前设置标头 响应已提交。提交响应后设置的标头将是 被 servlet 容器忽略。

所以规范中没有明确提到getWriter()对设置标题有影响。

然而,您的 servlet 容器实现可能选择将响应视为已提交一次getWriter()叫做。这是有微妙的不同的。

在我使用过的一些容器中,当您在提交响应后尝试设置标头时,会收到一条警告记录。

永远值得打电话getWriter()尽可能晚,因为您可能希望有机会设置字符编码等,这些必须在之前设置getWriter()叫做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在调用 getWriter() 后无法更新 HttpServletResponse 标头? 的相关文章

  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 如何添加 Java 正则表达式实现中缺少的功能?

    我是 Java 新手 作为一名 Net 开发人员 我非常习惯Regex Net 中的类 Java 实现Regex 正则表达式 还不错 但它缺少一些关键功能 我想为 Java 创建自己的帮助器类 但我想也许已经有一个可用的了 那么 是否有任何
  • AWS SDK 2 承担角色

    Bean public DynamoDbClient amazonDynamoDB final AssumeRoleRequest assumeRoleRequest AssumeRoleRequest builder roleSessio
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • Java:不使用 Arrays.sort() 对整数数组进行排序

    这是我们 Java 课程的练习之一中的说明 首先 我想说我 做了我的功课 我不仅仅是懒惰地请 Stack Overflow 上的人帮我回答这个问题 在所有其他练习中 这个特定项目一直是我的问题 因为我一直在努力寻找 完美的算法 编写JAVA
  • 如何构建和使用 TimeSeriesCollections

    我想在图表的 X 轴上显示一些日期 并且here https stackoverflow com questions 5118684 jfreechart histogram with dates据说我必须使用 TimeSeriesColl
  • 默认情况下,JSF 生成不可用的 ID,这些 ID 与 Web 标准的 CSS 部分不兼容

    活跃的 JSF 或 Primefaces 用户能否解释一下为什么默认情况下会发生这种情况 为什么没有人对此采取任何措施
  • Java 常量枚举[重复]

    这个问题在这里已经有答案了 可能的重复 理解 Java 中的枚举 https stackoverflow com questions 1419835 understanding enums in java 为什么我们应该使用枚举而不是 Ja
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • 线程上下文类加载器和普通类加载器的区别

    线程的上下文类加载器和普通类加载器有什么区别 也就是说 如果Thread currentThread getContextClassLoader and getClass getClassLoader 返回不同的类加载器对象 将使用哪一个
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即

随机推荐

  • Spring JDBC BeanPropertyRowMapper yes no ('Y','N') 到布尔 bean 属性

    我有一个带有一些字符串 整数和布尔字段的类 我为他们声明了 getter 和 setter public class SomeClass private int id private String description private b
  • 由于 ,无法将 .Union 与 Linq 一起使用

    我有点被这个问题困扰了 希望我能得到一些帮助 这就是重点 我必须用该 SQL 请求填充我的 DataGridView SELECT LOT NumLot EtatLot NomEmploye FROM LOT JOIN AFFECTATIO
  • 如何优雅地关闭因关闭执行该应用程序的命令行而终止​​的 Java 应用程序?

    有一个已回答的问题优雅地关闭 Java 命令行程序的最佳方法 当程序被 Ctrl C 终止时 关闭挂钩会执行此任务 我的问题是如果在Java程序执行过程中命令行本身关闭了如何优雅退出 我用关闭挂钩进行了测试 但在这种情况下它不起作用 我无法
  • 用 jQuery 制作一个逃跑按钮

    我想创建一个带有简单按钮的页面 当用户尝试单击它时 该按钮会远离用户 我们可以称之为 逃跑 按钮吗 有没有一个简单的 jQuery 片段可以让我做同样的事情 问候 卡兰 米斯拉 button hover function this css
  • ios mapkit 通过点击地图关闭注释标注

    我有一个地图套件应用程序 可以在地图上放置注释 当您按下它们时 它会显示带有标题属性的标注 这工作正常 但用户无法关闭它们 它们保持打开状态 直到点击另一个注释 我不能让用户可以点击地图上的其他位置 或再次点击注释 来关闭它吗 我有一种感觉
  • Windows Powershell 中的 Unix tail 等效命令

    我必须查看大文件的最后几行 典型大小为 500MB 2GB 我正在寻找相当于 Unix 命令的命令tail对于 Windows Powershell 一些可用的替代方案是 http tailforwin32 sourceforge net
  • VB.NET 窗口屏幕截图 (ALT+PRINTSCREEN)

    我在某处找到了该代码 我发现它非常有用 但我想找到一种方法使其工作 以便它仅捕获给定的窗口目标 可能带有进程 ID 或窗口名称 即使该窗口未处于活动状态 我不想使该窗口处于活动状态 但想要获得屏幕截图 就像我在其上执行 Alt PrintS
  • TypeScript:根据字符串文字属性一般推断联合类型成员

    TypeScript v3 2 2 允许我定义接口的联合 每个接口都有一个唯一的字符串文字属性 可以用作类型保护 例如 type Device Laptop Desktop Phone interface Laptop type Lapto
  • 如果给定表达式*不*格式良好,“anti-SFINAE”将启用重载

    如果特定表达式的格式不正确 则可以轻松使用 SFINAE 隐藏特定函数重载 但我想做相反的事情 隐藏重载当且仅当给定表达式is格式良好 并且以非常通用的方式这样做 我有一个适用于 clang 3 5 0 和 gcc 5 2 0 的解决方案
  • 在 C++ 程序中以编程方式检测字节顺序

    是否有一种编程方法来检测您是否处于大端或小端架构上 我需要能够编写在 Intel 或PPC系统并使用完全相同的代码 即没有条件编译 我不喜欢基于类型双关的方法 它经常会被编译器警告 这正是工会的目的 bool is big endian v
  • 如何映射联合数组类型?

    我有以下结构 interface Test1 number number interface Test2 extends Test1 text string let test Test1 Test2 test map obj gt does
  • JavaScript 中的空白字符串是真还是假?

    这个表情 true回报false 意思是 是虚假的 然而if console log true else console log false 得到结果为真 现在我很困惑 空白字符串是真还是假 字符串 是一个 真实 值 以下是 假 值的列表
  • before_filter :require_owner

    我有许多资源 行程 时间表等 其操作应仅限于资源所有者 如何使用 ApplicationController 中定义的 require owner 方法来实现代码来实现此目的 理想情况下 代码将查找所有者的继承链 以便 before fil
  • 显示通知 DIV 时如何“调暗”网页的其余部分?

    在我的网络应用程序中 我显示了一个 通知 DIV 我想 调暗 页面的其余部分 以便通知 DIV 在显示时更加突出 有没有一种相当简单的方法可以做到这一点 这个问题只涉及视觉效果 而不涉及页面其余部分的功能 下面是我在网络其他地方找到的功能示
  • 更新 select2 数据而不重建控件

    我正在转换一个
  • 在 Python 中编写固定宽度、空格分隔的 CSV 输出

    我想使用 Python 的 csv writer 编写一个固定宽度 空格分隔和最少引用的 CSV 文件 输出示例 item1 item2 next item1 next item2 anotheritem1 anotheritem2 If
  • 查找字符串中所有重复的子字符串以及它们出现的频率

    Problem 我需要满足以下条件的所有字符序列 字符序列必须出现多次 LE 1 因此无效 字符序列必须长于 1 个字符 因此 M 2 无效 字符序列不得是出现相同次数的较长现有序列的一部分 因此 如果 LIO 2 存在 则 LI 2 无效
  • 我对 getline+strings 不明白什么?

    这是我第一次使用 stackoverflow 我一直无法找到有关 getline 的所需信息 我正在参加一个简单的工程转移编程课程 因此我们编写的代码非常简单 我在这里想做的就是将用户定义数量的问题和答案放入两个不同的数组中 我的 whil
  • 我想每秒调用 20 次 installTapOnBus:bufferSize:format:block:

    我想实时显示麦克风输入的波形 我已经使用installTapOnBus bufferSize format block 实现了 这个函数一秒钟调用3次 我想设置这个函数每秒被调用20次 我可以在哪里设置 AVAudioSession aud
  • 为什么在调用 getWriter() 后无法更新 HttpServletResponse 标头?

    今天下午修复了一个问题后 我一直在网上进行挖掘 其中添加到 HttpServletResponse 的 Cookie 没有正确反映在响应标头中 因为我们的 Servlet 之前已经检索了响应的 PrintWriter 即 response