Причал: сервлеты против хендлеров - PullRequest
22 голосов
/ 12 ноября 2010

Я пытаюсь понять причину;

Скажите пожалуйста:

1) Когда лучше использовать сервлеты, а когда обработчики?

2) Могу ли я использоватьКоннекторы с сервлетами для «модели потока по запросу»?

Спасибо !!!

Ответы [ 2 ]

28 голосов
/ 22 июня 2011

В Jetty Handlers обрабатывают запросы, поступающие через соединители.Один из обработчиков, в частности ServletHandler, позволяет Jetty (в основном) поддерживать сервлеты.Servlet - это концепция переносимого Java EE, поэтому вы можете создавать свое приложение более переносимым образом, если вы используете сервлеты в Jetty.С другой стороны, они могут привести к некоторым накладным расходам, поэтому вы можете захотеть внедрить обработчик напрямую, который будет обрабатывать запросы, поступающие через соединители.

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

1 голос
/ 05 февраля 2018

Одно интересное наблюдение я обнаружил, когда поиграл с ним. У меня было приложение на базе Jetty (dropwizard.io), и здесь я планировал добавить обработчик после фактического (для него был специальный вариант использования)

server.start()

с использованием org.eclipse.jetty.servlet.ServletContextHandler.insertHandler(HandlerWrapper handler) просто выдает illegalStateException: STARTED, если сервер уже запущен. Из-за:

public void setHandler(Handler handler) {
        if (isStarted())
            throw new IllegalStateException(STARTED);
        //..

Но в случае org.eclipse.jetty.servlet.ServletContextHandler.addServlet(ServletHolder servlet,String pathSpec) он добавит servlet к существующей коллекции сервлетов, и все будет работать.

...