gpt4 book ai didi

jsf - "Response already committed"究竟是什么意思?那么如何处理异常呢?

转载 作者:行者123 更新时间:2023-12-01 07:07:19 25 4
gpt4 key购买 nike

I know writing business logic in getters and setters is a very bad programming practice ,但是如果响应已经提交,有没有办法处理异常?

“响应已经提交”和“标题已经发送给客户端”究竟是什么意思?

最佳答案

如果响应已经提交,则没有处理异常的好方法。 HTTP 响应基本上存在 header 和正文。 header 基本上指示客户端(网络浏览器)它应该如何处理响应,例如内容类型、内容长度、字符编码、正文编码、缓存指令等。

您可以在 webbrowser 开发人员工具集的 HTTP 流量监视器中看到 header 。在 Chrome/IE9+/Firefox23+ 中按 F12 并检查“网络”选项卡。以下屏幕显示是我的 Chrome 在您当前问题中显示的内容:

enter image description here

(注意:“响应”选项卡显示响应正文)

响应正文是实际内容,通常是一堆 HTML 代码的味道。服务器通常有一个固定大小的缓冲区来写入响应。缓冲区大小取决于服务器品牌/版本和配置,通常为 2KB~10KB。如果这个缓冲区溢出,那么它将被刷新到连接的另一端,客户端。这是响应的提交。客户端已经获得了响应的第一部分,通常已经代表了整组 header ,也可能是正文的一部分。

响应的提交是一个不归路。服务器无法取回已发送的字节。更改响应 header (例如,重定向基本上由带有新 URL 的 Location header 指示)为时已晚,更不用说响应正文了。您能做的最好的事情是将错误信息附加到已经写入的响应正文中。但这可能会以一些奇怪的 HTML 结束,因为不知道此时需要关闭哪些 HTML 标签。浏览器可能无法以正确的方式呈现它。

除了避免 getter 中的业务逻辑以便在呈现响应时不会抛出异常之外,另一种避免已经提交的响应的方法是将响应缓冲区大小配置为与您的 web 应用程序可以提供的最大页面一样大。如何做到这一点取决于服务器的品牌/版本。以Tomcat为例,您可以将其配置为 bufferSize attribute of the <Connector> element .请注意,如果您自己的代码(隐式)调用 flush(),这不会阻止刷新。在响应输出流上。

关于jsf - "Response already committed"究竟是什么意思?那么如何处理异常呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com