Подробное объяснение DispatcherServlet

Spring

Зачем нам нужен DispatcherServlet

Мы хотим отправлять внешние запросы на обработку.

Что такое DispatcherServlet

DispatcherServlet является реализацией шаблона проектирования фронт-контроллера, обеспечивает централизованную точку доступа для Spring Web MVC, отвечает за распределение обязанностей и легко интегрируется с контейнером Spring Ioc, чтобы получить все преимущества Spring.

Роль диспетчеров

DispatcherServlet в основном используется для планирования ответственности и сам в основном используется для управления процессом.Основные обязанности заключаются в следующем:

  1. Парсинг выгрузки файлов, если тип запроса составной, парсинг выгрузки файлов будет выполняться через MultipartResolver;
  2. С помощью HandlerMapping запрос сопоставляется с процессором (возвращает HandlerExecutionChain, который включает в себя процессор и несколько перехватчиков HandlerInterceptor);
  3. Поддержка нескольких типов обработчиков (обработчиков в HandlerExecutionChain) через HandlerAdapter;
  4. Разобрать имя логического представления на конкретное представление с помощью ViewResolver;
  5. анализ локализации;
  6. Отрисовка конкретных видов и т.д.;
  7. Если во время выполнения возникает исключение, оно будет передано HandlerExceptionResolver для разрешения.

Рабочий процесс DispatcherServlet

Подробная реализация DispatcherServlet

DospatcherServlet на самом деле является сервлетом (он наследует HttpServlet). Запросы, обрабатываемые DispatcherServlet, должны быть сопоставлены с использованием сопоставления URL-адресов, определенного в том же файле web.xml. Это стандартная конфигурация сервлета J2EE. В следующем примере показано, как настроить DispatcherServlet. DispatcherServlet настраивается в файле web.xml. Файл конфигурации выглядит следующим образом.

<web-app>

    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

</web-app>

В приведенном выше примере все запросы, оканчивающиеся на .form, будут обрабатываться именованным примером DispatcherServlet. Это только первый шаг в настройке Spring Web MVC. Далее вам нужно настроить сам DispatcherServlet и различные bean-компоненты, необходимые для среды Spring Web MVC.

существует3.13 Additional Capabilities of the ApplicationContextВ определении ApplicationContext в Spring можно ограничить разными областями. В среде Web MVC каждый DispatcherServlet имеет свой собственный WebApplicationContext, который наследует все определения bean-компонентов WebApplicationContext. Эти унаследованные bean-компоненты могут быть переопределены в собственном домене каждого сервлета, а переопределенный bean-компонент может быть настроен на свойства, которые может использовать только сам экземпляр сервлета.

Spring Web MVC中的上下文层次结构

В процессе инициализации DispatcherServlet фреймворк сначала находит файл с именем [servlet-name]-servlet.xml в каталоге WEB-INF и создает определенные в нем bean-компоненты, которые переопределяют bean-компоненты с тем же именем, которые определены в глобальном масштабе.

Мы можем взглянуть на следующий пример DispatcherServlet

<web-app>

    <servlet>
        <servlet-name>golfing</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>golfing</servlet-name>
        <url-pattern>/golfing/*</url-pattern>
    </servlet-mapping>

</web-app>

Если мы хотим, чтобы вышеуказанная конфигурация вступила в силу, нам нужно настроить файл /WEB-INF/golfing-servlet.xml. Этот файл объявляет специальные компоненты (bean-компоненты), которые вам нужны в среде Spring Web MVC. Путь к этому файлу также можно изменить с помощью параметра инициализации сервлета в файле web.xml.

WebApplicationContext является расширением обычного ApplicationContext, но обладает необходимой функциональностью для веб-приложения. Он отличается от стандартного ApplicationContext тем, что может разрешать темы (см.Using themes), и он знает, с каким сервлетом он связан (через ServletContext). WebApplicationContext привязан к ServletContext. Когда вам это нужно, вы можете использовать статические методы, предоставляемые RequestContextUtils, чтобы найти WebApplicationContext.

Spring DispatcherServlet использует специальные bean-компоненты для обработки запросов и отображения представлений. Эти bean-компоненты являются частью среды Spring, и вы можете настроить их в WebApplicationContext точно так же, как вы настраиваете другие bean-компоненты. Spring предоставляет разумные значения по умолчанию для большинства bean-компонентов, поэтому вам не нужно беспокоиться о том, как их настроить в начале.

Специальные бобы в webapplationContext

Тип зерна объяснять
Контроллер c часть в MVC
Отображение обработчика Обрабатывает выполнение списка препроцессоров, постпроцессоров и контроллеров (при соблюдении определенных условий, таких как: совпадение с указанным URL-адресом контроллера)
Посмотреть распознаватели разрешить имя представления для просмотра
Преобразователь локали Анализатор локализации — это компонент, способный анализировать локальную конфигурацию, используемую клиентом, для предоставления интернационализированного представления.
Преобразователь темы Анализатор темы может анализировать тему, используемую вашим веб-приложением, для предоставления персонализированного макета.
Преобразователь загружаемых файлов (преобразователь файлов из нескольких частей) Парсер загружаемых файлов предоставляет функцию загрузки файла HTML-формы
Преобразователи исключений обработчика Анализатор обработки исключений может отображать исключения в представления или реализовывать более сложный код обработки исключений.

Технологический поток

Когда вы настраиваете DispatcherServlet, обработка начинается, когда DispatcherServlet получает соответствующий запрос. Процесс обработки выглядит следующим образом:

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

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

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

  4. Если вы укажете синтаксический анализатор загружаемых файлов, Spring проверит каждый полученный запрос, чтобы увидеть, есть ли загружаемый файл, и если да, то запрос будет инкапсулирован как MultipartHttpServletRequest для использования другими процессорами в цепочке. (Spring's multipart (fileupload) supportсмотрите подробнее)

  5. Найдите соответствующий обработчик и выполните цепочку выполнения, связанную с этим обработчиком (препроцессор, постпроцессор, контроллер), чтобы подготовить данные модели для представления.

  6. Если возвращаются данные модели, представление отображается с помощью преобразователя представлений, настроенного в WebApplicationContext, в противном случае представление отображаться не будет. Существуют различные причины, по которым возвращаемая модель данных может быть пустой, например, препроцессор или постпроцессор может перехватить запрос, что может быть связано с безопасностью, или запрос может быть уже обработан и нет необходимости обрабатывать его снова.

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

DispatcherServlet Spring также поддерживает возврат даты последней модификации, как определено API сервлета. Определить дату последнего изменения запроса просто: DispatcherServlet сначала будет искать подходящий маппинг обработчика, проверять, реализует ли указанный обработчик из него интерфейс LastModified, если да, то вызывает длинный метод getLastModified(request) и возвращает результат клиенту.

Вы можете настроить DispatcherServlet Spring двумя способами: добавив параметры контекста в файл web.xml или параметры инициализации сервлета. Ниже приведены поддерживаемые в настоящее время параметры.

Параметры инициализации DispatcherServlet

параметр описывать
contextClass Класс, реализующий интерфейс WebApplicationContext, который текущий сервлет использует для создания контекстов. Если этот параметр не указан, по умолчанию используется XmlWebApplicationContext.
contextConfigLocation Строка, передаваемая экземпляру контекста (указанному contextClass), указывающая расположение контекста. Эта строка может быть разделена на несколько строк (с использованием запятых в качестве разделителей) для поддержки нескольких контекстов (в случае нескольких контекстов, если один и тот же bean-компонент определен дважды, последний имеет приоритет).
namespace Пространство имен WebApplicationContext. По умолчанию используется [имя-сервера] -Servlet.

Ссылаться на