0

我正在尝试编写一个 servlet 过滤器,它在某些条件下将读取 JSP 文件返回的 HTML 响应并处理它(使用 XHTML 解析器)并在最终将其返回给浏览器之前对其进行一些修改(基本上我是尝试实现全局更改以避免不得不单独修改数百个 JSP)

我正在使用Tomcat。我首先为 HttpServletResponse 和 ServletOutputStream 提供了一个包装器,然后再将它们传递回过滤器链。但是,我收到“IllegalStateException:getOutputStream() 已被调用以获取此响应”。每当我们的一个标签库尝试使用“this.pageContext.getOut()”返回的编写器进行编写时,似乎就会发生这种情况,所以我猜 Tomcat 使用的响应/编写器/输出流没有使用我通过的包装器类过滤器。

有什么建议么?还是有更好的方法来完成我想做的事情?

4

1 回答 1

0

我认为响应是在您传回修改后的 XML 之前提交的。

要了解提交响应的原因,请看这里

如果您不想让响应提交,您应该做以下两件事:

  • 增加页面指令中的 JSP 缓冲区大小

    <%@ 页面缓冲区="5kb" autoFlush="false" %>

  • 增加服务器默认的最大缓冲区大小。

    ServletRespnse.setBufferSize()

于 2012-07-03T07:14:12.857 回答