我有一个过滤器,它处理生成的HTML并重写某些元素。例如,它将类属性添加到某些锚点。最后,它将处理后的HTML写入响应(HttpServletResponseWrapper的子类)。当然,这意味着经过处理的HTML在通过过滤器后的长度不同。
我可以看到两种方法来解决这个问题。
一种是迭代HTML,使用StringBuilder构建处理过的HTML,并在完成所有过滤后将处理过的HTML写入响应。 另一种是迭代HTML,但只要处理完每个元素就将其写入响应。
哪种方法更适合此操作,还是有其他选择更可取?我期待主要减少临时内存使用量。
答案 0 :(得分:1)
StringBuilder
中汇总回复,那么您的代码已经适合流媒体。只需将StringBuilder
替换为PrintWriter
方法返回的ServletResponse.getWriter()
。
请注意,在HTTP 1.0中,HTTP服务器必须在响应头中提供内容长度,或者在响应结束时关闭连接。 HTTP 1.1包括“分块传输编码”,它允许数据流传输而不事先知道内容长度,并且不会阻止连接被重用于后续HTTP请求。这应该自动处理,因此除非您尝试支持非常旧的 HTTP客户端,否则您不必担心它。
答案 1 :(得分:0)
显然,第二种方法需要更少的内存并且会提高响应速度,但实施起来往往更加困难。