Java EE FrontController против диспетчера SpringServlet - PullRequest
7 голосов
/ 03 мая 2011

Если вы посмотрите на диаграмму последовательности Java EE FrontController , Контроллер делегирует запрос Dispatcher, и документ говорит, что:

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

В Spring MVC DispatcherServlet действует как FrontController (как упомянуто в книге Крейга Уоллса), и этот сервлет передает запрос другим контроллерам, которые, в свою очередь, вызывают соответствующий класс Service (для обработки запрос), а затем снова возвращает экземпляр ModelAndView в DispatcherServlet.

Итак, примерно так обычно поступает запрос:

Клиент -> ДиспетчерСервлет -> Контроллер -> Сервис -> DAO

Если вы сравните этот поток с диаграммой последовательности шаблонов Java EE FrontController , то окажется, что DispatcherServlet не является истинным FrontController.

Что вы скажете по этому поводу?

1 Ответ

11 голосов
/ 03 мая 2011

Я бы сказал, что DispatcherServlet заполняет рулоны фронт-контроллера и диспетчера. Однако вместо делегирования непосредственно представлению DispatcherServlet делегирует другому контроллеру. Это позволяет вам лучше отделить презентацию от бизнес-логики. В «чистой» парадигме фронт-контроллера вам, возможно, придется добавить некоторую бизнес-логику в свои представления.

Короче говоря, DispatcherServlet выполняет те же цели, что и шаблон Front Controller. Но это немного отклоняется от этого, позволяя вам добавить еще один уровень контроллеров в диспетчер. Я думаю, что это хорошо.

...