web.xml中支持异步的目的是什么?

时间:2012-03-29 05:59:01

标签: java servlets asynchronous web.xml

<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的目的是什么?我可以在什么情况下使用它?

3 个答案:

答案 0 :(得分:47)

具有讽刺意味的是,我正在寻找如何在tomcat的web.xml中编写此属性的语法,这是我从谷歌打开的第一个搜索项 - 它也是正确编写的(它可以正常工作),所以谢谢。

为了回答你的问题,这允许servlet存储传入的请求以便以后响应。它释放了用于处理请求的线程,因此可以在其他地方使用它,直到服务器准备好发送响应为止。

出于实际目的,使用此配置,您可以设置一个servlet,它将(实际上)push数据发送到客户端(在客户端将初始请求发送到服务器之后)。

这种技术取代了客户端不必要的定时请求,以获取可能以不确定的间隔发生变化的数据。它通过不挂在线程上以可扩展的方式完成它。


一些示例用例包括:

聊天应用程序,当一个客户端键入一条消息时,您希望它立即显示给另一个客户端。

通过电子邮件发送应用,允许客户在电子邮件服务器收到电子邮件后立即查看电子邮件。

我还使用它从编程逻辑控制器向浏览器发送输入更改更新,以实现自动化任务。

Here's一个很好的教程。 This还涵盖了java中的一些细节和螺栓。

答案 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>