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 не генерується.