检测对RequestDispatcher.include()的调用

时间:2012-11-13 23:21:09

标签: java servlets servlet-filters jspinclude

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

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

因此,我需要检测包含,以便我能够在包含ressource之前修饰repsonse。

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

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

1 个答案:

答案 0 :(得分:1)

添加

<dispatcher>INCLUDE</dispatcher>

过滤映射似乎有效refer