我有一个servlet,用于从许多第三方REST数据点获取数据,集成所有数据并以HTML格式报告数据。我还有一个过滤器,它有以下流程-
现在,如果我使用使用AsyncContext context = request.getAsyncContext();的异步servlet,它将与相同的REST数据点对话,但当数据准备就绪时,它将写入响应流,而不是等待所有REST数据点响应,我将如何编写筛选器?它是否会附加到负责从REST数据点刷新数据的线程,以便一旦所有数据被处理和刷新,它将记录事件记录?有什么共同的模式可以供我学习,以了解如何使用Servlet3.0的异步Servlet来处理这些用例?我正在使用JDK6.0,Tomcat7.0。
发布于 2012-07-04 12:02:54
只需在web中为过滤器添加@WebFilter(urlPatterns = {"/*" }, asyncSupported = true)即可。
或者添加<async-supported>true</async-supported>
发布于 2016-07-07 16:30:42
由于我不确定如何正确地支持仪器或诊断过滤器(例如,Codahales度量过滤器).,),所以我已经投入了大量资金。
虽然将<async-supported>true</async-supported>添加到筛选器中肯定会使它们看起来工作正常,但它可能无法获得您期望的结果(在度量的情况下,您的所有请求看起来都非常快)。
让AsyncContext立即在过滤器中绑定度量数据但是很多容器显然都有问题似乎是个好主意,我相信像Spring这样的框架也有问题(这可能只是我以前版本的Spring)。这是大多数框架期望请求处理的前半部分是同步的(我在这方面可能大错特错)。
因此,似乎唯一愚蠢的证明方法是在框架级别集成过滤器。例如,Spring提供了org.springframework.web.context.request.async.DeferredResultProcessingInterceptor,这有点类似于AsyncContext事件。
这有点不幸,因为并非所有的请求都可能由web框架处理,但是在处理请求的第一部分和实际实现(即,这是您可能想要监视的两个指标)之间还是有区别的。
发布于 2016-07-14 08:10:43
@WebFilter注释已经在Java 6中引入,它定义了不同的元素,如filterName、asyncSupported和servletNames等。@WebFilter不能在没有web.xml的情况下使用,因为@WebFilter不定义顺序。@WebFilter减少了web.xml中的其他配置。
@WebFilter(filterName="filterOne")
public class FilterOne implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Inside filter one.");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
} https://stackoverflow.com/questions/10790770
复制相似问题