gpt4 book ai didi

java - 过滤器是否应该在过滤期间或之后写入响应?

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:19 25 4
gpt4 key购买 nike

我有一个过滤器,可以处理生成的 HTML 并重写某些元素。例如,它为某些 anchor 添加类属性。最后,它将处理后的 HTML 写入响应(HttpServletResponseWrapper 的子类)。当然,这意味着经过过滤器处理后的 HTML 的长度是不同的。

我可以看到两种方法来解决这个问题。

一种是迭代 HTML,使用 StringBuilder 构建处理后的 HTML,并在所有过滤完成后将处理后的 HTML 写入响应。另一种是迭代 HTML,但在处理完每个元素后立即将其写入响应。

对于此操作,哪种方法更好,或者是否有其他更好的选择?我主要希望最大限度地减少临时内存的使用。

最佳答案

流式传输响应(即“即时”写入)的复杂性在于代码结构:您的处理必须确保按适当的顺序获取响应字节。但是,如果您在 StringBuilder 中组装响应,那么您的代码已经适合流式传输。只需将 StringBuilder 替换为 ServletResponse.getWriter() 方法返回的 PrintWriter 即可。

请注意,在 HTTP 1.0 中,HTTP 服务器必须在响应 header 中提供内容长度,或者在响应结束时关闭连接。 HTTP 1.1 包括“分块传输编码”,它允许在事先不知道内容长度的情况下进行数据流传输,并且不会阻止连接被后续 HTTP 请求重用。这应该自动处理,因此您不必担心它,除非您尝试支持非常旧的 HTTP 客户端。

关于java - 过滤器是否应该在过滤期间或之后写入响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684246/

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