Сервер против ServletContextHandler против ServletHolder против Servlet - PullRequest
0 голосов
/ 27 апреля 2018

Я смотрю на приложение, которое использует Jetty, и у него много разных связанных объектов:

service = new Server(Integer.valueOf(System.getenv("PORT")));
final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
MyAppServlet myAppServlet = new MyAppServlet();
ServletHolder myAppServletServletHolder = new ServletHolder(myAppServlet);
final String serviceName = 'abc';
servletContextHandler.addServlet(myAppServletServletHolder, ("/"+ serviceName));
service.setHandler(servletContextHandler);

Итак, похоже, что иерархия:

Server
  ServletContextHandler
    ServletHolder
      Servlet

Значение сервера очевидно, и кажется, что сервлет - это скрипт, который реализует реальное приложение.

Но смысл ServletContextHandler менее ясен. Можете ли вы дать простое объяснение, которое не предполагает большого опыта в экосистеме Java, а только общего опыта программирования? Это с целью совместного использования переменных конфигурации между различными приложениями (сервлетами)? Что может быть полезным для этого?

Наконец, я понятия не имею, зачем нам нужен ServletHolder вместо того, чтобы просто отдавать сервлет ServletContextHandler.

Следующее немного связано, но я не думаю, что очень близко. Этот вопрос перекрывает только один класс: В чем разница между ServletHandler и ServletContextHandler в Jetty?

1 Ответ

0 голосов
/ 27 апреля 2018

Сервер - сам сервер. (да, должно быть очевидно)

ServletContextHandler - контекст, предоставляющий область действия, определенную в javax.servlet.ServletContext

Вы можете иметь [0..n] ServletContextHandler экземпляров.
Они не должны быть сопоставлены с одним и тем же контекстным путем.

Ответственный за:

  • Путь к контексту (На что этот контекст отображается?) -

Примеры:

/ для root

Запрос к http://machine.com/foo ударит по этому ServletContext и обработает все, что отображается в нем для ресурса /foo

/app для конкретного приложения

Запрос к http://machine.com/app/bar ударит по ServletContext в /app и обработает все, что отображается в нем для ресурса /bar

  • Атрибуты, принадлежащие этому ServletContext
  • Местоположение базового ресурса - где находится весь ваш контент (см .: https://stackoverflow.com/a/39019797/775715)
  • Список сервлетов
  • Список фильтров
  • Список прослушивателей спецификаций сервлета
  • Содержит конфигурацию сеанса вашей спецификации сервлета
  • Содержит конфигурацию аутентификации вашего сервлета.
  • Конфигурация файла приветствия
  • Контекстно-зависимая поддержка диспетчера запросов
  • Конфигурация обработки ошибок
  • Поддержка сжатия Gzip Response
  • и т.д ...

ServletHolder - конфигурация для конкретного сервлета

Каждый сервлет может быть настроен для:

  • Url-pattern, которым он интересуется
  • Карта параметров инициализации
  • Это инициализируется при запуске? если да, то в каком порядке?

Примечание: для фильтров существует также эквивалент FilterHolder

Servlet - ресурс конечной точки низкого уровня для обработки вашего запроса и генерации ответа

Это обрабатывает необработанный запрос с использованием стандартного поведения сервлета.

Фильтр - компонент перед сервлетом, который может участвовать в обработке запроса / ответа.

...