Если вы работали с 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, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
< web-app > < servlet > < servlet-name >SpringMVC</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > < load-on-startup >1</ load-on-startup > </ servlet > < servlet-mapping > < servlet-name >SpringMVC</ servlet-name > < url-pattern >*</ url-pattern > </ servlet-mapping > </ web-app > |
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, которые вы можете изучить
- Разница между @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, которые здесь не упомянуты, но о которых стоит знать, оставьте комментарий, и я включу его в основную статью.
Смотрите оригинальную статью здесь: DispatcherServlet из Spring MVC — 10 вещей, которые должен знать Java Developer
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |