Подтвердить что ты не робот

Какова цель поддержки async в web.xml?

<servlet>
        <description>xxx</description>
        <servlet-name>xxx</servlet-name>
        <servlet-class>com.xxx.yyy</servlet-class>
        <async-supported>true</async-supported>
</servlet>

Какова цель async-supported в файле конфигурации сервлета web.xml? В каком случае я могу использовать его?

4b9b3361

Ответ 1

По иронии судьбы, я искал синтаксис написания этого свойства в tomcat web.xml, и это первый элемент поиска, который я открыл из Google - он тоже правильно написан (он работает), поэтому спасибо.

Чтобы ответить на ваш вопрос, это позволяет сервлету сохранять входящие запросы для последующего ответа. Он освобождает поток, используемый для обработки запроса, поэтому его можно использовать в другом месте, пока сервер не будет готов отправить ответ.

Для практических целей с этой конфигурацией вы можете настроить сервлет, который будет (по сути) push данные клиенту (после того, как клиент отправит исходный запрос на сервер).

Этот метод заменяет необходимость в ненужных запросах времени от клиента получать данные, которые могут меняться с неопределенными интервалами. И он делает это масштабируемо, не вися на потоке.


В некоторых примерах использования:

Приложения чата, когда один клиент набирает сообщение, которое вы хотите, чтобы оно мгновенно отображалось на другом клиенте.

Приложения электронной почты, позволяющие клиентам просматривать электронные письма, как только они будут получены сервером электронной почты.

Я также использовал его для отправки обновлений изменений ввода в браузер из программирования Logic Controller для задач автоматизации.

Вот хороший учебник по этому вопросу. Это также охватывает некоторые гайки и болты в java.

Ответ 2

Основная цель - включить потоки XHR в качестве резервного механизма для Websockets. Если явно не настроено на true, ваше приложение не может отказать в потоковой передаче XHR, что приведет к java.lang.IllegalArgumentException: поддержка Async должна быть включена на сервлет....

Для более подробной информации проверьте здесь (Запросы Async Servlet 3):
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

Чтобы проверить правильность применения вашей конфигурации, ограничьте количество подключений wesocket в браузере до 1 и откройте приложение более чем на одной вкладке. Если конфигурация будет применена, у вас будет соединение с websocket, установленное на вкладке 1 и потоковой передачи hxr на вкладке 2.

Ответ 3

Если вы используете 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>