DispatcherServlet из Spring MVC – 10 вещей, которые должен знать Java-разработчик
Если вы работали с Spring MVC, вы должны знать, что такое DispatcherServlet? Это на самом деле сердце Spring MVC, именно C шаблон проектирования MVC или контроллер. Каждый веб-запрос, который должен обрабатываться Spring MVC, проходит через DispatcherServlet. В общем, это реализация Front Controller Pattern, которая обеспечивает единую точку входа в ваше приложение. Он обрабатывает все входящие запросы. Это также мост между Java и Spring, и DispatcherServlet, как и любой другой сервлет, объявляется в web.xml с шаблоном URL, достаточным для сопоставления каждого отдельного веб-запроса с DispathcherServlert.
Он отвечает за обработку запросов путем делегирования запросов дополнительным компонентам Spring MVC, например фактическим классам контроллеров, то есть тем, которые аннотируются с помощью @Controller или @RestController (в случае RESTful Web Services), Views, View Resolvers, преобразователей обработчиков и т. Д.
Хотя работа по фактическому отображению запроса выполняется аннотацией @RequestMapping, фактически это DispatcherServlet, который делегирует запрос соответствующему контроллеру.
В случае веб-служб RESTful он также отвечает за поиск правильного конвертера сообщений для преобразования ответа в ожидаемый клиентом формат, например, JSON, XML или TEXT. Например, если клиент ожидает JSON, он будет использовать MappingJacksonHttpMessageConverter или MappingJackson2HttpMessageConverter (в зависимости от того, доступен ли в Classpath Джексон 1 или Джексон 2) для преобразования ответа, возвращаемого функцией convert, в строку JSON. См. REST with Spring от Baeldung, чтобы узнать больше о разработке веб-сервисов RESTful с использованием Spring 3 и Spring 4.
Как DispatcherServlet обрабатывает запрос в Spring MVC
Как я уже говорил, Dispatcher Servlet используется для обработки всех входящих запросов и маршрутизации их через различные Spring Controller для дальнейшей обработки. Для этого он определяет, какие контроллеры должны обрабатывать входящий запрос.
DispatcherServlet использует реализации HandlerMapping — предварительно созданные или предоставляемые как часть приложения для маршрутизации входящих запросов к объектам-обработчикам. По умолчанию он использует
BeanNameUrlHandlerMapping и DefaultAnnotationHandlerMapping, которые управляются с помощью аннотации @RequestMapping.
Чтобы найти правильные методы для обработки запроса, он просматривает все классы, объявленные с использованием
Аннотация @Controller и она также использует
@RequestMapping аннотация для поиска типов и методов, отвечающих за обработку запросов.
Аннотация @RequestMapping может отображать запрос по пути, например
@RequestMapping («путь»), методом HTTP, например
@RequestMapping («путь», метод = RequestMethod.GET), по параметрам запроса, например
@RequestMapping («путь», метод = RequestMethod.POST, params = »param1») и наличием заголовка HTTP-запроса, например
@RequestMapping («путь», заголовок = «тип содержимого = текст / *»). Вы также можете применить аннотацию @RequestMapping на уровне класса для фильтрации входящих запросов.
После обработки запроса контроллер возвращает логическое представление имени и модели в DispatcherServlet. Затем он консультируется для просмотра распознавателей, чтобы найти фактическое представление для визуализации вывода. Стратегия разрешения вида может быть указана с помощью реализации ViewResolver, по умолчанию DispatcherServlet использует
InternalResourceViewResolver для преобразования имени логического представления в фактический объект View, например, JSP.
После этого DispatcherServlet связывается с выбранным представлением, например, файлом JSP с данными модели, и выводит результат в зависимости от данных модели. Этот обработанный вывод возвращается клиенту в качестве ответа. Иногда вам даже не нужно представление, например, в случае веб-сервисов RESTful.
Их метод-обработчик напрямую записывает в ответ, используя аннотацию @ResponseBody, а DispatcherServlet напрямую возвращает ответ клиенту. См. Курс REST with Spring, чтобы узнать больше о разработке и тестировании веб-службы RESTful с использованием Spring MVC.
10 баллов о ДиспетчерСервлет
В этой статье я расскажу о некоторых полезных и важных вещах о DispatcherServlet, которые должен знать Java Web Developer. Эти пункты не только помогут вам лучше понять работу DispatcherServlet в Spring MVC, но и побудят вас больше узнать о них, изучая и изучая каждую из них.
1) DispatcherServlet является основным контроллером Spring MVC Application. Все входящие веб-запросы проходят через DispatcherServlet перед обработкой отдельными контроллерами Spring, то есть классами, аннотированными с помощью аннотации @Controller.
2) DispatcherServlet Spring MVC является реализацией шаблона Front Controller (см. Введение в Spring MVC 4 ). Фронт-контроллер — это всего лишь контроллер, который обрабатывает все запросы на веб-сайт. Они часто используются в веб-приложениях для реализации рабочих процессов.
3) Как и любой другой сервлет, DispatcherServlet среды Spring MVC также объявляется и настраивается в файле web.xml, как показано ниже:
< servlet-class >org.springframework.web.servlet.DispatcherServlet servlet-class >
4) DispatcherServlet — это настоящий сервлет, он наследуется от базового класса HttpServlet. Механизм сервлетов, такой как Tomcat, создает экземпляр этого класса и называет его различными методами жизненного цикла, например, init (), service () и destroy ().
5) DispatcherServlet предоставляет единую точку входа для вашего веб-приложения Spring MVC. Как я уже говорил, он обрабатывает все входящие запросы. Посмотрите, как Spring MVC работает внутри, чтобы узнать больше о внутренней работе Spring.
6) Spring DispatcherServlet также полностью интегрирован с контейнером Spring IoC и, таким образом, позволяет использовать все функции среды Spring, например внедрение зависимостей.
7) Сервлет диспетчера настроен как load-on-startup = 1, что означает, что этот сервлет должен создаваться контейнером сервлета при развертывании приложения, а не при получении запроса на этот запрос. Это сделано для того, чтобы уменьшить время ответа на первый запрос, потому что DispatcherServlet выполняет много работы при запуске, чтобы сканировать и находить все контроллеры и сопоставления запросов. Посмотрите веб-основы Java от Кевина Джонса, чтобы узнать больше о загрузке при запуске и других основах сервлета.
8) Во время инициализации DispatcherServlet среда Spring MVC будет искать файл с именем [servlet-name] -servlet.xml в каталоге WEB-INF вашего веб-приложения и создавать определенные bean-компоненты, например, если имя сервлета — «SpringMVC» как показано в приведенной выше конфигурации web.xml, он будет искать файл с именем SpringMVC-Servlet.xml. Он также переопределяет определения любых bean-компонентов, определенных с тем же именем в глобальной области видимости. Вы можете изменить точное местоположение этого файла конфигурации, используя параметр инициализации сервлета contextConfigLocation.
9) В среде Spring MVC каждый DispatcherServlet имеет свой собственный WebApplicationContext (см. Spring in Action ), который наследует все bean-компоненты, уже определенные в корневом WebApplicationContext. Эти унаследованные bean-компоненты могут быть переопределены в конкретной области сервлета, и новые конкретные bean-объекты могут быть определены локально для данного экземпляра сервлета.
10) DispatcherServlet из среды Spring MVC также может возвращать дату последней модификации, как указано в Servlet API. Он определяет дату последней модификации путем поиска соответствующего сопоставления обработчика и проверки, реализует ли найденный обработчик интерфейс LastModified. Если да, то он вызывает метод getLastModified (request) интерфейса LastModified, и значение возвращается клиенту.
Это все о DispatcherServlet из среды Spring MVC . Как я уже сказал, DispatcherServlet является основой Spring MVC и служит главным контроллером, который направляет различные HTTP-запросы к соответствующим Spring Controllers. Это реализация шаблона проектирования Front Controller, обеспечивающая единую точку входа в веб-приложение Spring. Вы настраиваете DispatcherServlet в файле web.xml, но задаете для него значение загрузки при запуске 1, чтобы предложить контейнеру загрузить этот сервлет во время запуска, а не при получении запроса. Это сокращает время ответа на первый запрос.
Дальнейшее обучение
- Введение в Spring MVC 4
- ОТДЫХ с Весной Baeldung
- Основы весны Брайана Хассена
Другие статьи о Spring, которые вы можете изучить
- Разница между @RestControler и @Controller в Spring MVC? ( ответ )
- 23 Spring MVC Интервью вопросы от 2 до 3 лет опыта ( список )
- Какая польза от DispatcherServlet в Spring MVC? ( ответ )
- Как включить безопасность Spring в приложении Java? ( ответ )
- Поможет ли сертификация Spring в работе и карьере? ( статья )
- Топ 5 весенних сертификационных экзаменов ( список )
- Основы весны от Pluralsight ( см. )
- Разница между аннотациями @Autowired и @Injection в Spring? ( ответ )
- 5 онлайн-курсов Spring и Hibernate для разработчиков Java ( список )
Спасибо за чтение этой статьи до сих пор. Если вам понравилась эта статья, пожалуйста, поделитесь с друзьями и коллегами. Если у вас есть какие-либо вопросы, предложения или отзывы, или у вас есть какие-либо замечания о DispatcherServlert, которые здесь не упомянуты, но о которых стоит знать, оставьте комментарий, и я включу его в основную статью.
Мнения, высказанные участниками Java Code Geeks, являются их собственными.
Что такое диспетчер сервлетов
Spring’s web MVC framework is, like many other web MVC frameworks, request-driven, designed around a central servlet that dispatches requests to controllers and offers other functionality that facilitates the development of web applications. Spring’s DispatcherServlet however, does more than just that. It is completely integrated with the Spring IoC container and as such allows you to use every other feature that Spring has.
The request processing workflow of the Spring Web MVC DispatcherServlet is illustrated in the following diagram. The pattern-savvy reader will recognize that the DispatcherServlet is an expression of the “ Front Controller ” design pattern (this is a pattern that Spring Web MVC shares with many other leading web frameworks).
The requesting processing workflow in Spring Web MVC (high level)
The DispatcherServlet is an actual Servlet (it inherits from the HttpServlet base class), and as such is declared in the web.xml of your web application. You need to map requests that you want the DispatcherServlet to handle, by using a URL mapping in the same web.xml file. This is standard J2EE servlet configuration; the following example shows such a DispatcherServlet declaration and mapping:
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>
In the preceding example, all requests ending with .form will be handled by the example DispatcherServlet . This is only the first step in setting up Spring Web MVC. You now need to configure the various beans used by the Spring Web MVC framework (over and above the DispatcherServlet itself).
As detailed in Section 3.13, “Additional Capabilities of the ApplicationContext”, ApplicationContext instances in Spring can be scoped. In the Web MVC framework, each DispatcherServlet has its own WebApplicationContext , which inherits all the beans already defined in the root WebApplicationContext . These inherited beans defined can be overridden in the servlet-specific scope, and you can define new scope-specific beans local to a given servlet instance.
Context hierarchy in Spring Web MVC
Upon initialization of a DispatcherServlet , the framework looks for a file named [servlet-name]-servlet.xml in the WEB-INF directory of your web application and create the beans defined there, overriding the definitions of any beans defined with the same name in the global scope.
Consider the following DispatcherServlet servlet configuration (in the web.xml file):
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>
With the above servlet configuration in place, you will need to have a file called /WEB-INF/ golfing -servlet.xml in your application; this file will contain all of your Spring Web MVC-specific components (beans). You can change the exact location of this configuration file through a servlet initialization parameter (see below for details).
The WebApplicationContext is an extension of the plain ApplicationContext that has some extra features necessary for web applications. It differs from a normal ApplicationContext in that it is capable of resolving themes (see Section 15.7, “Using themes”), and that it knows which servlet it is associated with (by having a link to the ServletContext ). The WebApplicationContext is bound in the ServletContext , and by using static methods on the RequestContextUtils class you can always look up the WebApplicationContext if you need access to it.
The Spring DispatcherServlet uses special beans to process requests and render the appropriate views. These beans are part of Spring Framework. You can configure them in the WebApplicationContext , just as you configure any other bean. However, for most beans, sensible defaults are provided so you initially do not need to configure them. These beans are described in the following table.
Table 15.1. Special beans in the WebApplicationContext
Bean type | Explanation |
---|---|
controllers | Form the C part of the MVC. |
handler mappings | Handle the execution of a list of pre-processors and post-processors and controllers that will be executed if they match certain criteria (for example, a matching URL specified with the controller). |
view resolvers | Resolves view names to views. |
locale resolver | A locale resolver is a component capable of resolving the locale a client is using, in order to be able to offer internationalized views |
Theme resolver | A theme resolver is capable of resolving themes your web application can use, for example, to offer personalized layouts |
multipart file resolver | Contains functionality to process file uploads from HTML forms. |
handler exception resolvers | Contains functionality to map exceptions to views or implement other more complex exception handling code. |
After you set up a DispatcherServlet , and a request comes in for that specific DispatcherServlet , the DispatcherServlet starts processing the request as follows:
- The WebApplicationContext is searched for and bound in the request as an attribute that the controller and other elements in the process can use. It is bound by default under the key DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE .
- The locale resolver is bound to the request to enable elements in the process to resolve the locale to use when processing the request (rendering the view, preparing data, and so on). If you do not need locale resolving, you do not need it.
- The theme resolver is bound to the request to let elements such as views determine which theme to use. If you do not use themes, you can ignore it.
- If you specify a multipart file resolver, the request is inspected for multiparts; if multiparts are found, the request is wrapped in a MultipartHttpServletRequest for further processing by other elements in the process. (See Section 15.8.2, “Using the MultipartResolver” for further information about multipart handling).
- An appropriate handler is searched for. If a handler is found, the execution chain associated with the handler (preprocessors, postprocessors, and controllers) is executed in order to prepare a model or rendering.
- If a model is returned, the view is rendered. If no model is returned, (may be due to a preprocessor or postprocessor intercepting the request, perhaps for security reasons), no view is rendered, because the request could already have been fulfilled.
Handler exception resolvers that are declared in the WebApplicationContext pick up exceptions that are thrown during processing of the request. Using these exception resolvers allows you to define custom behaviors to address exceptions.
The Spring DispatcherServlet also supports the return of the last-modification-date , as specified by the Servlet API. The process of determining the last modification date for a specific request is straightforward: the DispatcherServlet looks up an appropriate handler mapping and tests whether the handler that is found implements the LastModified interface. If so, the value of the long getLastModified(request) method of the LastModified interface is returned to the client.
You can customize Spring’s DispatcherServlet by adding context parameters in the web.xml file or servlet initialization parameters. See the following table.
Table 15.2. DispatcherServlet initialization parameters
Parameter | Explanation |
---|---|
contextClass | Class that implements WebApplicationContext , which instantiates the context used by this servlet. By default, the XmlWebApplicationContext is used. |
contextConfigLocation | String that is passed to the context instance (specified by contextClass ) to indicate where context(s) can be found. The string consists potentially of multiple strings (using a comma as a delimiter) to support multiple contexts. In case of multiple context locations with beans that are defined twice, the latest location takes precedence. |
namespace | Namespace of the WebApplicationContext . Defaults to [servlet-name]-servlet . |
Prev | Up | Next |
15. Web MVC framework | Home | 15.3 Implementing Controllers |
Spring MVC — основные понятия и архитектура
В статье рассмотрим основные принципы взаимодействия популярного Java-фреймворка Spring и базового паттерна разработки MVC. Это отличное введение для новичка в практику использования Spring в современном программировании.
Експертний курс від laba: Стратегічний маркетинг.
Розвивайте бізнес з глибоким пониманням ринку.
1. Что такое Spring MVC?
Spring MVC — структура для создания слабо связанных веб-приложений, разделяющая основные аспекты их разработки: объекты, бизнес-логику и внешний вид программы. Основное преимущество архитектуры MVC — возможность менять один из компонентов приложения, существенно не влияя на остальные.
Кратко пройдемся по каждому из них:
Захоплюючий курс від laba: HR-менеджер.
Розвивайте персонал і підтримуйте бізнес.
- Модель. Модель содержит данные приложения. Обычно включает в себя POJO -классы (Plain Old Java Objects ) — простые старые Java-объекты или по-другому — бины.
- Представление или вид. Используется для визуализации и отображения данных приложения при помощи пользовательского интерфейса например JSP . Отвечает за то, как будут выглядеть данные модели в браузере пользователя.
- Контроллер. Контроллер нужен для обработки пользовательских запросов и вызова серверных служб. Он структурирует запрос, создает соответствующую модель для дальнейшего отображения ее в браузере.
2. DispatcherServlet
Dispatcher Servlet — сердце Spring Web MVC, полностью настраиваемый фронт-контроллер, координирующий все действия по обработке запросов аналог Struts ActionServlet / JSF FacesServlet :
Это типичный шаблон дизайна при разработке веб-приложений, распределяющий запросы пользователя и управляющий работой других компонентов приложения, отсылая команды каждому конкретному контроллеру Spring MVC. Он отвечает за инициализацию интерфейса WebApplicationContext , загружая конфигурацию относящуюся к веб-компонентам.
3. Жизненный цикл запроса
Как мы уже с вами разобрались, Spring MVC Framework логически построен на основе фронт-контроллера DispatcherServlet , обрабатывающего все HTTP-запросы и ответы. Чтобы лучше понять как он работает, посмотрим, как все устроено изнутри:
Принцип его работы показан на изображении выше, каждый шаг промаркирован, давайте разберем все поэтапно:
-
Фронт-контроллер DispatcherServlet получает запрос.
Професійний курс від mate.academy: Java.
Погрузьтеся у світ програмування.
4. Конфигурирование
Шаги по реализации веб-приложения MVC Spring с использованием Java-конфигурирования:
Творчий курс від skvot: 3D-художник персонажів.
Створюйте світ персонажів.
Шаг 1. Первоначально нам нужно создать файл POM.XML , содержащий в себе зависимости maven из фреймворка Spring. Он нам пригодится по ходу проекта:
4.0.0 today.highload SpringMVCjava war 0.0.1-SNAPSHOT SpringMVCjava Maven Webapp http://maven.apache.org junit junit 3.8.1 test org.springframework spring-webmvc 4.3.12.RELEASE SpringMVCjava
Шаг 2: Проект должен содержать файл web.xml , получающий все запросы от клиента. В нашем случае вместо web.xml мы будем использовать WebInitializer.java . Функция getServletMappings() принимает все запросы, соответствующие сопоставлению URL-адресов ‘/’ .
Функция getServletConfigClasses() настраивает файл MVCconfig.java , который мы будем использовать вместо сервлета-диспетчера для java-конфигурирования. Этот класс расширяет класс AbstractAnotationConfigDispatcherServletInitializer и служит целям, ранее прописанным нами в файле web.xml . Этот файл определяется так:
package today.highload.web; import org.springframework.web .servlet.support .AbstractAnotationConfigDispatcherServletInitializer; public class WebInitializer extends AbstractAnotationConfigDispatcherServletInitializer < @Override protected Class[] getRootConfigClasses() < // TODO Auto-generated method stub return null; >@Override protected Class[] getServletConfigClasses() < // TODO Auto-generated method stub return new Class[] < MVCconfig.class >; > @Override protected String[] getServletMappings() < // TODO Auto-generated method stub return new String[] < "/" >; > >
Комментарий // TODO Auto-generated method stub автоматически вставляется системой, напоминая разработчику о том, что далее нужно реализовать в этих методах какую-нибудь логику иначе почему они должны существовать? .
Шаг 3. Теперь нам нужно создать файл MVCconfig.java . Как уже упоминалось выше, мы будем использовать его вместо DispatcherServlet . Аннотирование класса с помощью @Configuration указывает, что класс может использоваться контейнером Spring IoC в качестве источника определений bean -компонентов.
Чтобы включить автоопределение аннотированных контроллеров, необходимо добавить в конфигурацию сканирование компонентов. Он также дает путь к базовому пакету (например, today.highload.web ) в котором нужно искать файлы контроллера. Этот класс расширяет класс WebMvcConfigurerAdapter для обслуживания сервлета диспетчера.
package today.highload.web; import org.springframework.context .annotation.ComponentScan; import org.springframework.context .annotation.Configuration; import org.springframework.web.servlet .config.annotation .WebMvcConfigurerAdapter; @Configuration @ComponentScan () public class MVCconfig extends WebMvcConfigurerAdapter
Шаг 4: Теперь нам нужно определить контроллер. Контроллеры интерпретируют вводимые пользователем данные и преобразуют их в модель.
Аннотации в стиле @RequestMapping используются для отображения URL-адреса (например /GREET для целого класса) или конкретного метода обработчика. Создадим объект класса ModelAndView , где setViewName () указывает вызываемое отображение информации, а addObject () указывает динамическое содержимое, добавляемое к этому объекту:
package today.highload.web; import org.springframework .stereotype.Controller; import org.springframework.web .bind.annotation.RequestMapping; import org.springframework.web .servlet.ModelAndView; @Controller public class GreetController < @RequestMapping("/greet") public ModelAndView showview() < ModelAndView mv = new ModelAndView(); mv.setViewName("result.jsp"); mv.addObject("result", "Highload Welcomes " + "you to Spring!"); return mv; >>
Шаг 5: Теперь нам нужно создать индексную страницу index.jsp для приложения, отображаемую при переходе по заданному URL-адресу:
Welcome
Шаг 6: При нажатии кнопки приветствия из указанного выше index.jsp открывается страница Result.jsp , которую нам надо предварительно определить вот так:
Insert title here $
5. Определение Контроллера
Разберем пример с применением нескольких распространенных аннотаций Spring MVC при отправлении запроса контроллерам от сервлета-диспетчера.
@Controller @RequestMapping("/welcome") public class WelcomeController < @RequestMapping(method = RequestMethod.GET) public String printWelcome(ModelMap model) < model.addAttribute("message", "Welcome to SpringMVC"); return "Welcome"; >>
Аннотация @Controller говорит о том, что класс является контроллером Spring MVC. Аннотация @RequestMapping нужна для маппинга (связывания) с URL класса или конкретного метода обработчика.
Причем, в первом случае она информирует нас о принадлежности всех методов в рассматриваемом контроллере, конкретно — к URL-адресу “ /Welcome “. Во втором случае с помощью @RequestMapping мы объявляем метод printWelcome() , определяя его как метод по умолчанию для обработки HTTP-запросов.
6. Создание вида (JSP)
Используя фреймворк Spring MVC, отобразить страницу можно в десятках разных форматов, в числе которых — JSP, HTML, PDF, Excel, XML, Velocity templates, XSLT, JSON, каналы Atom и RSS, JasperReports и другие. Однако чаще всего применяются шаблоны JSP, написанные при помощи JSTL:
Welcome to MVC $
Преимущества Spring MVC
Собирая все вместе, подведем итоги:
- Легковесность: поскольку Spring — это легкий фреймворк, в веб-приложении на основе Spring не будет проблем с производительностью.
- Высокая продуктивность: Spring MVC может ускорить любой процесс разработки.
- Безопасность: большинство веб-приложений для онлайн-банкинга разрабатывается с использованием Spring MVC, что дает выгоду за счет встроенного Spring Security — отличного API для реализации безопасности корпоративного уровня.
- Поддерживается паттерн MVC: поэтому это отличный способ разработки модульных веб-приложений.
- Spring MVC также реализует все основные функции ядра Spring Framework, среди которых популярные Inversion of Control (инверсия управления) и Dependency Injection (внедрение зависимостей).
7. Пример реализации фреймворка Spring MVC
Чтобы досконально разобраться с рассматриваемой концепцией, предлагаю ознакомиться с примерами реализации фреймворка из общедоступных источников:
- Базовый пример реализации программы Hello World на Spring 4 (XML-конфигурация).
- Примеры MVC приложений на Spring, выложенные на GitHub.
- Еще один простой пример приложения на Spring MVC.
Ну а если вам лучше один раз посмотреть и послушать, чем десять раз прочитать — несколько ссылок на обучающие видеоролики по теме:
DispatcherServlet
Spring MVC, как и многие другие веб-фреймворки, разработан по проектному шаблону «единой точки входа (front controller)», где центральный Servlet , DispatcherServlet , обеспечивает общий алгоритм обработки запросов, а фактическая работа выполняется настраиваемыми компонентами-делегатами. Эта модель является гибкой и поддерживает различные рабочие процессы.
DispatcherServlet , как и любой другой Servlet , необходимо объявлять и отображать в соответствии со спецификацией сервлетов с помощью конфигурации Java или в web.xml . В свою очередь, DispatcherServlet использует конфигурацию Spring для обнаружения компонентов-делегатов, необходимых ему для отображения запросов, распознавание представлений, обработки исключений и т. д.
В следующем примере конфигурации Java регистрируется и инициализируется DispatcherServlet , который автоматически обнаруживается контейнером сервлетов:
public class MyWebApplicationInitializer implements WebApplicationInitializer < @Override public void onStartup(ServletContext servletContext) < // Загружаем конфигурацию веб-приложения Spring AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(AppConfig.class); // Создаем и регистрируем DispatcherServlet DispatcherServlet servlet = new DispatcherServlet(context); ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet); registration.setLoadOnStartup(1); registration.addMapping("/app/*"); >>
class MyWebApplicationInitializer : WebApplicationInitializer < override fun onStartup(servletContext: ServletContext) < // Загружаем конфигурацию веб-приложения Spring val context = AnnotationConfigWebApplicationContext() context.register(AppConfig::class.java) // Создаем и регистрируем DispatcherServlet val servlet = DispatcherServlet(context) val registration = servletContext.addServlet("app", servlet) registration.setLoadOnStartup(1) registration.addMapping("/app/*") >>
Помимо использования ServletContext API напрямую, также можно расширить AbstractAnnotationConfigDispatcherServletInitializer и переопределить заданные методы.
Для программных случаев использования в качестве альтернативы AnnotationConfigWebApplicationContext может использоваться GenericWebApplicationContext .
Следующий пример конфигурации web.xml регистрирует и инициализирует DispatcherServlet :
org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/app-context.xml app org.springframework.web.servlet.DispatcherServlet contextConfigLocation 1 app /app/*
Spring Boot придерживается иной последовательности инициализации. Вместо того чтобы выполнять привязку к жизненному циклу контейнера сервлетов, Spring Boot использует конфигурацию Spring для начальной самозагрузки и начальной загрузки встроенного контейнера сервлетов. Объявления Filter и Servlet обнаруживаются в конфигурации Spring и регистрируются в контейнере сервлетов.