<servlet>
<description>xxx</description>
<servlet-name>xxx</servlet-name>
<servlet-class>com.xxx.yyy</servlet-class>
<async-supported>true</async-supported>
</servlet>
servlet的web.xml配置文件中async-supported
的目的是什么?我可以在什么情况下使用它?
答案 0 :(得分:47)
具有讽刺意味的是,我正在寻找如何在tomcat的web.xml中编写此属性的语法,这是我从谷歌打开的第一个搜索项 - 它也是正确编写的(它可以正常工作),所以谢谢。
为了回答你的问题,这允许servlet存储传入的请求以便以后响应。它释放了用于处理请求的线程,因此可以在其他地方使用它,直到服务器准备好发送响应为止。
出于实际目的,使用此配置,您可以设置一个servlet,它将(实际上)push数据发送到客户端(在客户端将初始请求发送到服务器之后)。
这种技术取代了客户端不必要的定时请求,以获取可能以不确定的间隔发生变化的数据。它通过不挂在线程上以可扩展的方式完成它。
一些示例用例包括:
聊天应用程序,当一个客户端键入一条消息时,您希望它立即显示给另一个客户端。
通过电子邮件发送应用,允许客户在电子邮件服务器收到电子邮件后立即查看电子邮件。
我还使用它从编程逻辑控制器向浏览器发送输入更改更新,以实现自动化任务。
答案 1 :(得分:3)
主要目的是启用XHR流作为Websockets的回退机制。如果未明确配置为true,则应用程序无法回退到XHR流,这将导致java.lang.IllegalArgumentException:必须在servlet上启用异步支持....
有关详细信息,请查看此处(Servlet 3异步请求):
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
为了验证您的配置是否正确应用,请将浏览器中的wesocket连接数限制为1,并在多个选项卡中打开您的应用程序。如果应用了配置,您将在选项卡1中建立websocket连接,在选项卡2中建立hxr流。
答案 2 :(得分:1)
如果您正在使用GlassFish 4.1,请在src / main / webapp / web.xml中尝试:
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>