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

Jetty: сервлеты против обработчиков

Я пытаюсь понять причал.

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

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

  2. Могу ли я использовать соединители с сервлетами для "модели потока на запрос"?

4b9b3361

Ответ 1

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

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

Ответ 2

Одно интересное наблюдение я обнаружил, когда поиграл с ним. У меня было приложение на базе 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 в существующую коллекцию сервлетов, и все будет работать.