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