捕获并替换Filter中的JSP响应

时间:2012-07-03 07:00:24

标签: jsp servlet-filters

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

我正在使用Tomcat。我首先提供了HttpServletResponse和ServletOutputStream的包装器,然后再将它们传递回过滤器链。但是,我收到了一个“IllegalStateException:getOutputStream()已被调用此响应。”似乎每当我们的一个taglib尝试使用“this.pageContext.getOut()”返回的编写器进行编写时,我想Tomcat使用的响应/编写器/输出流不使用我通过的包装类过滤器。

有什么建议吗?或者有更好的方法来完成我想要做的事情吗?

1 个答案:

答案 0 :(得分:0)

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

要了解提交回复的原因,Look here

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

  • 在页面指令

    中增加JSP缓冲区大小

    <%@ page buffer =“5kb”autoFlush =“false”%>

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

    <强> ServletRespnse.setBufferSize()