Friday, February 10, 2012

Servlet 3.0 - лучше позже чем никогда

Наконец-то после 6 лет с момента реализации технологиии Comet в Jetty и 2х лет со дня выхода финальной версии спецификации Servlet 3.0 вышел релиз Jetty 8, который эту спецификацию, собственно, и реализует. Кроме аннотаций и прочих рюшечек самое интересно новшество - это, конечно, возможность асинхронной обработки запроса, что сильно упрощает процесс Server Push'a. Посмотрим на примере как реализована эта возможность.
Создаем проект. Для этого нам понадобится средство сборки Maven. Создаем мавеновский проект и прописываем зависимости. Вот полный код моего pom.xml:
Реализуем такой же примерчик, как тот, что я делал во время демонстрации node.js
Вот таким будет наш сервлет:

В аннотации сервлета есть важное свойство asyncSupported. Это значит, что наш сервлет может переводить запрос в асинхронное состояние. Перевод делается методом startAsync()
Мой класс AsyncExecutor, над реализацией и чистотой кода которого я особенно не думал:
Теперь запустим наше приложеньице. Удобно делать это с помощью jetty-maven-plugin. Я делаю это из IntelliJ IDEA:

Теперь посмотрим как это работает и заодно глянем на header'ы. Запускаем curl -i http://localhost:8080/hello. Сразу выводится Hello и World 0, затем World N - каждые 2 секунды

Ура! Работает!

No comments:

Post a Comment