问题标签 [servlet-3.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
59 浏览

java - Spring 使用 servlet3.1 的 Async-IO

如何使用Spring-5Async-IO的 (setWriteListener) ?Servlet3.1

另外,我发现Link-A提到需要将 Listener 添加到 outputStream。
另一方面, Link-B说它应该与spring 5and一起使用tomcat 8.5+

接下来我分析了一个 JVM ,发现它CoyoteOutputStream.checkNonBlockingWrite总是返回false和示例代码。deferredResultNON-DeferredResult

我无法尝试Link-A推荐,因为我不确定NioReadListener实施及其论点。


PS:
环境 Spring-boot-2.0.4.RELEASE + Windows

0 投票
1 回答
1412 浏览

java - 如何利用 Spring Web MVC 控制器中的非阻塞请求

我试图展示在 Spring MVC 中使用 Reactive Streams 的优势。为此,我有一个运行两个端点的小型 Jetty 服务器:

  • /normal返回一个 POJO
  • /flux返回包装在 a 中的相同对象Mono

然后我启动一个客户端并在其中一个端点同时启动几千个请求。我本来希望看到第二个端点的错误更少,因为处理是异步进行的。但是,我有时会在启用异步的端点上观察到更多错误;在这两种情况下,任何地方都有 60 - 90% 的错误Connection refused: no further information

要么我在这里做错了什么,要么我不太明白。Connection refused正是我希望避免的那种事情。

服务器

这是我来自服务器的代码。在这种normal情况下,我从字面上用 a 阻塞了线程.sleep()

服务器通过 Maven 在 Jetty 9.4.15 上运行,web.xml 定义为:

客户

我的客户使用 Spring WebClient:

与此处问题类似的前提:WebFlux async processing。主要区别在于我正在测试错误率,或同步连接数;我预计速度不会增加。

0 投票
1 回答
173 浏览

cdi - 如何在 Tomcat 8.5/Servlet 3.1 上初始化 Weld 3.0 cid setParameterName

我正在尝试将旧 Web 应用程序从 JSF 2.1.1-FCS 升级到在 Tomcat 8.5 Servlet 3.1 容器中运行的 2.2.14。

Mojarra JSF 最低要求(我猜对于最新版本,该页面似乎不清楚)除其他外说 CDI 1.2 需要 CDI 1.2 推荐 2.0。

我添加了 cd-api-2.0 和weld-servlet-shaded-3.0.0.Final 以及其他依赖项。在我测试一些我们已经使用了很长时间的 URL 之前,一切似乎都有效。我们的应用程序一直在使用cid参数。Weld 使用相同的参数来跟踪对话。结果我们得到了WELD-000321: No conversation found to restore for id错误。

我想org.jboss.weld.context.http.HttpConversationContext.setParameterName(String cid)尽早调用以修改此 Web 应用程序的值。

在 Tomcat 8.5 提供的 Servlet 3.1 容器上下文中更改此值的最佳方法是什么?

0 投票
3 回答
2891 浏览

java - 如何在spring mvc中使用servlet 3.1?

有 2 种不同的功能可用:

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

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

网上有很多关于 servlet 3.0 特性的例子。我们可以很容易地在 Spring 中使用它。我们只需要返回DefferedResultCompletableFuture

但是我在春天找不到使用servlet 3.1的例子。据我所知,我们必须注册WriteListenerReadListener在里面做圆顶脏活。但我找不到那个听众的例子。我相信这并不容易。

您能否提供 Spring 中 servlet 3.1 功能的示例以及 Listener 实现的解释?

0 投票
1 回答
127 浏览

open-liberty - Servlet 中的异步功能

我只是回到Servlet-3.x功能并探索它。如果我没记错的话,在 Servlet-3.x 之前,它是每个请求模型的线程,并且它会用完池中的线程,从而导致大量传入流量。

因此,对于 Servlet-3.x,它说它是异步的并且不会保持线程被阻塞,而是立即释放它们,而只是委派了任务。

这是我的解释,

考虑服务器线程池中有 2 个线程

对于新的 Async Servlet 请求R1,有一个线程T1,这T1会将任务委托给客户端T2T1立即响应客户端。

问题:T2从服务器线程池创建的吗?如果是这样,我不明白这一点。

  • 情况1:如果是旧的Synchronous Servlet 请求T1会一直忙于运行I/O 任务,

  • 情况2:如果是异步Servlet调用T2正忙于运行I/O任务。

  • 在这两种情况下,其中一个都很忙。

我尝试使用openliberty应用服务器中的示例异步 servlet 进行检查,下面是从我的示例演示 Servlet 中捕获的示例日志。

如上所示,Default Executor-thread-116立即释放并将长时间运行的任务委托给Default Executor-thread-54,但我不确定它们是否来自 App Server 线程池。如果是这样,为什么不能只做Default Executor-thread-116任务而不是委派?

有人可以对 JavaEE 中 Servlet 的这种异步行为有所了解吗

0 投票
0 回答
438 浏览

spring - 将 Spring Boot Webflux 应用 WAR 部署到 Tomcat 8

我有一个使用 WebFlux 的反应式 Spring Boot 应用程序。我需要将它作为 WAR 文件部署到 Tomcat 8 容器中。

根据Spring Webflux 文档,似乎可以通过扩展AbstractReactiveWebInitializer类来做到这一点:

Servlet 3.1+ 容器:

要作为 WAR 部署到任何 Servlet 3.1+ 容器,您可以在 WAR 中扩展并包含 AbstractReactiveWebInitializer。该类使用 ServletHttpHandlerAdapter 包装一个 HttpHandler 并将其注册为 Servlet。

另一方面,Spring boot 文档静态内容创建 war 文件 指出这是不可能的,因为 Webflux 应用程序不依赖于 Servlet API:

Spring WebFlux 应用程序并不严格依赖 Servlet API,因此它们不能部署为 war 文件,也不能使用 src/main/webapp 目录。

我尝试使用 spring-boot-gradle-plugin 将应用程序打包为 WAR 文件,但是在将其部署到 Tomcat 8 时它没有任何效果。

有什么建议么?

0 投票
0 回答
39 浏览

servlets - 如何构建原始的非阻塞 servlet

那里有很多关于如何使用 spring 或任何微配置文件实现(quarkus、kuuluzee)创建“反应式”服务的示例。

根据 Servlet 3.1,任何一个 servlet 都可以作为“非阻塞”处理。

我发现必须将此 servlet 执行到非阻塞 servlet 容器中,例如netty...

第一个问题:

  • 真的像我写的那样吗?我是否需要一个非阻塞 servlet 容器实现才能提供真正的“反应式”服务?

第二个问题:

  • 我不清楚如何创建一个基本的原始“非阻塞”servlet。我的意思是,“正常”扩展 servlet 之间的区别是HttpServlet什么?这个实现会是什么样子?

有参考吗?

0 投票
0 回答
17 浏览

java - 如何使用带有 Spring 延迟结果的 Servlet 3.1 Read&Write Listener 实现

我们目前有一个使用 Servlet 3.0 延迟结果运行的 Spring 应用程序。我们要实现 Servlet 3.1 Non-Blocking IO。为此,我们需要实现 ReadListener 和 WriteListener。但是我没有找到任何关于如何注册具有延迟结果的侦听器的示例。

我在链接中找到了一个示例。

但我想要延迟结果的 NIOReadListener 和 NIOWriteListener 的实现。