DispatcherServlet обрабатывает запросы следующим образом:

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

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

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

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

  • Происходит поиск подходящего обработчика. Если обработчик найден, цепочка выполнения, связанная с обработчиком (препроцессоры, постпроцессоры и контроллеры), запускается для подготовки модели к визуализации. Кроме того, для аннотированных контроллеров может быть визуализирован (внутри HandlerAdapter) ответ вместо возвращения представления.

  • Если возвращается модель, то происходит визуализация представления. Если модель не возвращается (возможно, из-за того, что препроцессор или постпроцессор перехватил запрос, вероятно, по соображениям безопасности), представление не создается, поскольку запрос уже мог быть выполнен.

Бины HandlerExceptionResolver, объявленные в WebApplicationContext, используются для распознавания исключений, возникающих при обработке запроса. Эти распознаватели исключений позволяют настраивать логику обработки исключений.

Для обеспечения HTTP-кэширования обработчики могут использовать методы CheckNotModified из WebRequest, а также дополнительные опции для аннотированных контроллеров.

Можно настроить отдельные экземпляры DispatcherServlet, добавив параметры инициализации сервлетов (элементы init-param) к объявлению сервлета в файле web.xml. В следующей таблице перечислены поддерживаемые параметры:

Таблица 1. Параметры инициализации DispatcherServlet
Параметр Пояснение

contextClass

Класс, реализующий ConfigurableWebApplicationContext, экземпляр которого будет создан и локально сконфигурирован этим сервлетом. По умолчанию используется XmlWebApplicationContext.

contextConfigLocation

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

namespace

Пространство имен WebApplicationContext. По умолчанию [servlet-name]-servlet.

throwExceptionIfNoHandlerFound

Отвечает за то, следует ли генерировать NoHandlerFoundException, если по запросу не был найден обработчик. Затем исключение можно перехватить с помощью HandlerExceptionResolver (например, при использовании метода контроллера с аннотацией @ExceptionHandler) и обработать как и любое другое.

По умолчанию этот параметр установлен в false, и в этом случае DispatcherServlet устанавливает статус сообщения в 404 (NOT_FOUND), не генерируя исключения.

Обратите внимание, что если также сконфигурирована обработка сервлетов по умолчанию, то неразрешенные запросы всегда перенаправляются в сервлет по умолчанию, а сообщение 404 не генерируется.