java - 检测对 RequestDispatcher.include() 的调用

标签 java servlets servlet-filters jspinclude

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

当对包装的响应调用 ServletResponse.flushBuffer() 或达到缓冲区大小时,此装饰完成。但是,如果包装的 Servlet(或 JSP 页面)此时正在处理包含,则无法将 header 添加到响应中,因为包含是禁止这样做的。

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

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

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

最佳答案

添加

<dispatcher>INCLUDE</dispatcher>

过滤器映射似乎有效 refer

关于java - 检测对 RequestDispatcher.include() 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370607/

相关文章:

java - Spring WebFilter 映射

jakarta-ee - cxf jaxrs 相当于 Jersey @NameBinding

java - 将 ScrollPane 设置到所需位置

java - CodeCompiler - 从另一个 Java 程序编译和运行 Java 程序

tomcat - 将大内容写入 servlet 响应失败

jsf 过滤器似乎不起作用

java - 如何从scala调用通配符java函数

java - java 如何从实例字段获取对象?

java - 如何在 Servlet 处理程序中使用 utf-8 作为请求参数?

css - 调用转发到 JSP 的 Servlet 时,浏览器无法访问/查找相关资源,如 CSS、图像和链接