我正在编程一个 Servlet-Filter,它包装响应并分析对包装响应的 addHeader() 的调用。在将响应提交给客户端之前,如果合适的话,它会用一些有用的 header (缓存、压缩等)来装饰它。
当对包装的响应调用 ServletResponse.flushBuffer() 或达到缓冲区大小时,此装饰完成。但是,如果包装的 Servlet(或 JSP 页面)此时正在处理包含,则无法将 header 添加到响应中,因为包含是禁止这样做的。
因此,我需要检测包含,以便我能够在包含资源之前装饰响应。
我能想到的实现这一点的唯一方法是包装请求,捕获对 ServletRequest.getRequestDispatcher() 的调用并返回 RequestDispatcher 的包装实例,当调用包含方法时通知我。但从 Servlet 3.0 开始,还有 ServletContext.getRequestDispatcher() 和 ServletContext.getNamedDispatcher() 方法。我无法捕获该方法,因为我的过滤器无法包装 ServletContext。
还有其他方法可以检测对 RequestDispatcher.include() 的调用吗?
最佳答案
关于java - 检测对 RequestDispatcher.include() 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370607/