首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何升级过滤器以支持Servlet3.0异步Servlet

如何升级过滤器以支持Servlet3.0异步Servlet
EN

Stack Overflow用户
提问于 2012-05-28 21:50:45
回答 3查看 4.8K关注 0票数 9

我有一个servlet,用于从许多第三方REST数据点获取数据,集成所有数据并以HTML格式报告数据。我还有一个过滤器,它有以下流程-

  1. 当请求击中筛选器并将事件记录对象添加到请求时,创建事件记录
  2. 执行chain.doFilter --这允许servlet向事件记录添加更多细节。
  3. 在返回浏览器的过程中,filter获取事件记录对象并将其记录下来。

现在,如果我使用使用AsyncContext context = request.getAsyncContext();的异步servlet,它将与相同的REST数据点对话,但当数据准备就绪时,它将写入响应流,而不是等待所有REST数据点响应,我将如何编写筛选器?它是否会附加到负责从REST数据点刷新数据的线程,以便一旦所有数据被处理和刷新,它将记录事件记录?有什么共同的模式可以供我学习,以了解如何使用Servlet3.0的异步Servlet来处理这些用例?我正在使用JDK6.0,Tomcat7.0。

EN

回答 3

Stack Overflow用户

发布于 2012-07-04 12:02:54

只需在web中为过滤器添加@WebFilter(urlPatterns = {"/*" }, asyncSupported = true)即可。

或者添加<async-supported>true</async-supported>

票数 6
EN

Stack Overflow用户

发布于 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框架处理,但是在处理请求的第一部分和实际实现(即,这是您可能想要监视的两个指标)之间还是有区别的。

票数 1
EN

Stack Overflow用户

发布于 2016-07-14 08:10:43

@WebFilter注释已经在Java 6中引入,它定义了不同的元素,如filterName、asyncSupported和servletNames等。@WebFilter不能在没有web.xml的情况下使用,因为@WebFilter不定义顺序。@WebFilter减少了web.xml中的其他配置。

代码语言:javascript
复制
@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() {
    }
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10790770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档