1

我正在编写一个 Servlet-Filter,它包装响应并分析对包装响应的 addHeader() 的调用。在将响应提交给客户端之前,它会在适当的情况下使用一些有用的标头(缓存、压缩等)来装饰它。

当在包装的响应上调用 ServletResponse.flushBuffer() 或达到缓冲区大小时,此装饰就完成了。但是,如果包装的 Servlet(或 JSP-Page)此时正在处理包含,则不能将标头添加到响应中,因为禁止包含这样做。

因此,我需要检测包含,以便我能够在包含资源之前装饰响应。

我能想到的唯一方法是包装请求,捕获对 ServletRequest.getRequestDispatcher() 的调用并返回一个包装好的 RequestDispatcher 实例,它会在调用 include 方法时通知我。但是从 Servlet 3.0 开始,还有 ServletContext.getRequestDispatcher() 和 ServletContext.getNamedDispatcher() 方法。我无法捕捉到这些方法,因为我的过滤器无法包装 ServletContext。

还有其他方法可以检测对 RequestDispatcher.include() 的调用吗?

4

1 回答 1

1

添加

<dispatcher>INCLUDE</dispatcher>

过滤映射似乎工作参考

于 2012-11-13T23:43:38.117 回答