在Spring MVC中如何使用Servlet 3.1?

gst*_*low 14 java nio spring-mvc servlet-3.1 spring-boot

有2种不同的功能可用:

  1. Servlet 3.0允许在不同于容器线程的线程中处理请求。

  2. Servlet 3.1允许在不阻塞读取/写入线程的情况下读取/写入套接字

互联网上有很多关于Servlet 3.0功能的示例。我们可以很轻松地在Spring中使用它。我们只需要返回DefferedResultCompletableFuture

但是我在春季找不到使用servlet 3.1的示例。据我所知,我们必须注册WriteListenerReadListener在内部进行肮脏的工作。但是我找不到那个监听器的例子。我相信这不是很容易。

您能否在春季提供Servlet 3.1功能的示例以及Listener实现的说明?

Mik*_*kov 0

如果您正在寻找 Spring/Servlet 3.1 非阻塞 HTTP API 声明的示例,请尝试以下操作:

@GetMapping(value = "/asyncNonBlockingRequestProcessing")
public CompletableFuture<String> asyncNonBlockingRequestProcessing(){
        ListenableFuture<String> listenableFuture = getRequest.execute(new AsyncCompletionHandler<String>() {
            @Override
            public String onCompleted(Response response) throws Exception {
                logger.debug("Async Non Blocking Request processing completed");
                return "Async Non blocking...";
             }
        });
        return listenableFuture.toCompletableFuture();
}
Run Code Online (Sandbox Code Playgroud)

需要 Servlet 容器级别的 Spring Web 5.0+ 和 Servlet 3.1 支持(Tomcat 8.5+、Jetty 9.4+、WildFly 10+)

  • 您能评论一下该代码吗?对于我来说,为什么该代码是非阻塞的并不透明。我也不明白该代码的作用 (3认同)