В этом изображении (которое я получил от здесь), HTTP-запрос отправляет что-то в диспетчерский сервлет.

Мой вопрос - что делает диспетчер сервлета?
Это что-то вроде получения информации, выброшенной с веб-страницы и отправки ее на контроллер?
В этом изображении (которое я получил от здесь), HTTP-запрос отправляет что-то в диспетчерский сервлет.

Мой вопрос - что делает диспетчер сервлета?
Это что-то вроде получения информации, выброшенной с веб-страницы и отправки ее на контроллер?
Задача DispatcherServlet заключается в том, чтобы принять входящий URI и найти правильную комбинацию обработчиков (как правило, методы на классах Controller) и представления (как правило, JSP), которые объединяются для формирования страницы или ресурса, который должен быть найден в этом месте.
У меня может быть
/WEB-INF/jsp/pages/Home.jspи метод в классе
@RequestMapping(value="/pages/Home.html")
private ModelMap buildHome() {
return somestuff;
}
Сервлет Dispatcher - это бит, который "знает", чтобы вызвать этот метод, когда браузер запрашивает эту страницу, и объединить его результаты с соответствующим JSP файлом, чтобы сделать html-документ.
Как это достигается, это варьируется в широких пределах с конфигурацией и версией Spring.
Также нет причин, по которым конечный результат должен быть веб-страницами. Он может сделать то же самое, чтобы найти конечные точки RMI, обрабатывать запросы SOAP, все, что может попасть в сервлет.
DispatcherServlet - это Spring реализация MVC шаблона переднего контроллера .
См. описание в Spring docs здесь.
По сути, это сервлет, который принимает входящий запрос и делегирует обработку этого запроса одному из нескольких обработчиков, сопоставление которых специфично в конфигурации DispatcherServlet.
В Spring MVC все входящие запросы проходят через один сервлет. Этот сервлет - DispatcherServlet - это передний контроллер. Передний контроллер является типичным шаблоном проектирования в разработке веб-приложений. В этом случае один сервлет получает все запросы и передает их всем остальным компонентам приложения.
Задача DispatcherServlet - отправить запрос конкретному контроллеру MVC Spring.
Обычно у нас много контроллеров, а DispatcherServlet относится к одному из следующих картографов, чтобы определить целевой контроллер:
BeanNameUrlHandlerMapping;ControllerBeanNameHandlerMapping;ControllerClassNameHandlerMapping;DefaultAnnotationHandlerMapping;SimpleUrlHandlerMapping.Если конфигурация не выполняется, DispatcherServlet использует BeanNameUrlHandlerMapping и DefaultAnnotationHandlerMapping по умолчанию.
Когда целевой контроллер идентифицирован, DispatcherServlet отправляет ему запрос. Контроллер выполняет некоторую работу в соответствии с запросом
(или делегировать его другим объектам) и возвращается к DispatcherServlet с помощью Модели и имени представления.
Имя представления - это только логическое имя. Это логическое имя затем используется для поиска фактического представления (чтобы избежать связи с контроллером и конкретным представлением). Затем DispatcherServlet ссылается на ViewResolver и сопоставляет логическое имя представления с конкретной реализацией представления.
Некоторые возможные реализации ViewResolver:
BeanNameViewResolver;ContentNegotiatingViewResolver;FreeMarkerViewResolver;InternalResourceViewResolver;JasperReportsViewResolver;ResourceBundleViewResolver;TilesViewResolver;UrlBasedViewResolver;VelocityLayoutViewResolver;VelocityViewResolver;XmlViewResolver;XsltViewResolver.Когда DispatcherServlet определяет представление, которое будет отображать результаты, оно будет отображаться как ответ.
Наконец, DispatcherServlet возвращает объект Response обратно клиенту.
DispatcherServlet из Spring Структура веб-MVC - это реализация FrontController и является компонентом Java Servlet. то есть это фронт сервлета для приложения Spring Web Mvc.
DispatcherServlet t - это классы FrontController, которые получают все входящие запросы HTTP-клиента для приложения Spring Web mvc.
DispatcherServlet отвечает за инициализацию Spring web mvc framework для нашего приложения и представляет собой сервлет, реализованный как подтип HttpServlet, как и любой другой сервлет.
DispatcherServlet также необходимо настроить в нашем веб-приложении, как и любой другой сервлет, т.е. дескриптор развертывания веб-приложения (web.xml)
Мы можем настроить параметры инициализации, чтобы изменить поведение DispatcherServlet в отношении поиска файлов конфигурации XML Spring Beans и инициализации контекста приложения.
Я знаю, что этот вопрос отмечен как уже решенный, но я хочу добавить более новое изображение, подробно объясняющее этот шаблон (источник: spring в действии 4):
Объяснение
Когда запрос покидает браузер (1), он несет информацию о запросе пользователя. По крайней мере, запрос будет содержать запрошенный URL. Но он может также содержать дополнительные данные, такие как информация, представленная пользователем в форме.
Первая остановка в проходах запросов находится в Spring s DispatcherServlet. Как и большинство веб-фреймворков на основе Java, spring MVC запускает запросы с помощью одного сервлета переднего контроллера. Передний контроллер представляет собой общий шаблон веб-приложения, в котором один сервлет делегирует ответственность за запрос другим компонентам приложения для выполнения фактической обработки. В случае spring MVC DispatcherServlet является фронт-контроллером. Задача DispatcherServlets - отправить запрос на контроллер spring MVC. Контроллер представляет собой компонент spring, который обрабатывает запрос. Но типичное приложение может иметь несколько контроллеров, и DispatcherServlet нуждается в некоторой помощи, чтобы решить, какой контроллер отправить запрос. Поэтому DispatcherServlet обращается к одному или нескольким сопоставлениям обработчиков (2), чтобы выяснить, где будет следующая остановка запросов. При составлении своего решения при обращении с обработчиком особое внимание уделяется URL-адресу, переносимому запросом. После выбора соответствующего контроллера DispatcherServlet отправляет запрос по своему весовому пути выбранному контроллеру (3). На контроллере запрос сбрасывает свою полезную нагрузку (информацию, представленную пользователем) и терпеливо ждет, пока контроллер обрабатывает эту информацию. (На самом деле хорошо спроектированный контроллер практически не обрабатывает сам себя, а не делегирует ответственность за бизнес-логику одному или нескольким объектам службы.) Логика, выполняемая контроллером, часто приводит к некоторой информации, которая должна быть возвращена пользователю и отображена в браузере. Эта информация упоминается как модель. Но отправка исходной информации пользователю не является достаточной - ее нужно отформатировать в удобном для пользователя формате, обычно в формате HTML. Для этого информация должна быть предоставлена представлению, обычно странице JavaServer (JSP). Одна из последних вещей, которую выполняет контроллер, - это пакет данных модели и определить имя представления, которое должно отображать результат. Затем он отправляет запрос вместе с именем модели и представления обратно в DispatcherServlet (4). Чтобы контроллер не подключался к определенному виду, имя представления, переданное обратно в DispatcherServlet, напрямую не идентифицирует конкретный JSP. Он даже не предполагает, что представление является JSP. Вместо этого он содержит только логическое имя, которое будет использоваться для поиска фактического представления, которое приведет к результату. DispatcherServlet обращается к распознавателю вида (5), чтобы сопоставить имя логического представления с реализацией конкретного представления, которое может быть или не быть JSP. Теперь, когда DispatcherServlet знает, какое представление будет отображать результат, работа с запросами почти завершена. Его конечная остановка находится в представлении представления (6), обычно JSP, где он предоставляет данные модели. Работа с запросами завершена. Представление будет использовать данные модели для рендеринга вывода, который будет перенесен клиенту с помощью объекта (не-трудолюбивого) ответа (7).
Мы можем сказать, что DispatcherServlet заботится обо всем в Spring MVC.
При запуске веб-контейнера:
DispatcherServlet будет загружен и инициализирован вызовом
init() методinit() из DispatcherServlet попытается идентифицировать Spring Конфигурационный документ с соглашениями об именах, например "servlet_name-servlet.xml", тогда можно идентифицировать все beans.Пример:
public class DispatcherServlet extends HttpServlet {
ApplicationContext ctx = null;
public void init(ServletConfig cfg){
// 1. try to get the spring configuration document with default naming conventions
String xml = "servlet_name" + "-servlet.xml";
//if it was found then creates the ApplicationContext object
ctx = new XmlWebApplicationContext(xml);
}
...
}
Итак, в общем DispatcherServlet URI запроса на захват и передайте HandlerMapping. HandlerMapping сопоставление поиска bean с помощью метода контроллера, где контроллер возвращает логическое имя (представление). Затем это логическое имя отправляется на DispatcherServlet на HandlerMapping. Затем DispatcherServlet сообщите ViewResolver, чтобы дать полное местоположение просмотра, добавив префикс и суффикс, затем DispatcherServlet дать представление клиенту.