Преимущества и недостатки использования нескольких диспетчерских сервлетов в весеннем mvc - PullRequest
1 голос
/ 28 сентября 2019

Я только что узнал, что вы можете иметь кратное dispatcher-servlets в весеннем приложении.Я хотел бы знать, есть ли какие-либо преимущества использования этого подхода по сравнению с традиционным весенним подходом, в котором single dispatcher-servlet для всех входящих запросов.

1 Ответ

0 голосов
/ 30 сентября 2019

Из документа

Веб-приложение может определять любое количество DispatcherServlets.Каждый сервлет будет работать в своем собственном пространстве имен, загружая свой собственный контекст приложения с отображениями, обработчиками и т. Д. Только общий контекст приложения, загруженный ContextLoaderListener, если таковой имеется, будет общим.

Преимущества несколькихдиспетчерские сервлеты ИЛИ Зачем нам нужно несколько диспетчерских сервлетов?

Простой ответ - иметь функциональность DispatcherServlet в нескольких формах

Функциональность сервлет-диспетчера


  • Сервлет-диспетчер использует реализацию HandlerMapping для управления маршрутизацией запросов к объектам-обработчикам.По умолчанию BeanNameUrlHandlerMapping и RequestMappingHandlerMapping .
  • Это стратегия разрешения представления может быть задана с помощью реализации ViewResolver , разрешающей символические имена представлений в объекты View.По умолчанию InternalResourceViewResolver .
  • Эта стратегия разрешения исключений может быть указана с помощью HandlerExceptionResolver , например, для сопоставления определенных исключений со страницами ошибок.
  • Его стратегия для разрешения составных запросов определяется MultipartResolver реализация.
  • Стратегия разрешения локали определяется LocaleResolver .
  • Стратегия разрешения темы определяется ThemeResolver .


Я попытаюсь объяснить некоторые из функций, предоставляемых DispatcherServlet

Объявление нескольких сервлетов диспетчера
Рассмотриму нас есть два сервлета диспетчера (DS), где DS1, DS2 настроены с разными шаблонами URL (**.simple, **.beanName), и они используют разные конфигурации сервлета диспетчера, представленные ниже.

DispatcherServlet     - simpleUrlHandlerDispatcherServlet
contextConfigLocation - /WEB-INF/simpleUrlHandlerMapping.xml
<url-pattern>*.simple</url-pattern>

DispatcherServlet     - beanNameUrlHandlerDispatcherServlet
contextConfigLocation - /WEB-INF/beanNameUrlHandlerMapping.xml
<url-pattern>*.beanName</url-pattern>

Преимущество 1: У нас может быть разное HandlerMapping для разного набора URL

DS1 имя бина uКонфигурация сопоставления обработчика rl

<bean name="/hello.beanName" class="com.pvn.mvc.HelloController" />
<bean name="/hi.beanName" class="com.pvn.mvc.HiController" />

Конфигурация сопоставления простого обработчика URL-адреса

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/hello.simple">simpleHello</prop>
            <prop key="/hi.simple">simpleHi</prop>
        </props>
    </property>
</bean>

Преимущество 2: У нас может быть другой распознаватель для разных наборов URL.

InternalResourceViewResolver для DS1
, где он работаеттолько с prefix + returned String + suffix.
TilesViewResolver для DS2
его реализация обеспечивается Apache тайлами, которые являются функциональными возможностями плагина на основе компоновки / скелета, как указано ниже.
enter image description here Или, если мы используем TilesViewResolver с другим макетом для другого набора URL
анонимный пользователь - другой макет
зарегистрированный пользователь - другой макет

Преимущество 3: У нас может быть другой распознаватель тем для разных наборов URL.
Эти средства распознавания непрерывно отслеживают cookie / сеанс для разрешения темы и служат таблицей стилей / темойквалифицированный (как указано нижеизображение).Ниже приведен только пример для результата CookieThemeResolver .
Примечание. Речь идет не о конфигурации темы, а о конфигурации средства разрешения тем.

enter image description here

Преимущество 4: У нас может быть другой распознаватель локали для различного набора URL.
Этот распознаватель постоянно отслеживает cookie / session / accept-Заголовок для разрешения локали и загрузки квалифицированного сообщения приложения (как показано на рисунке ниже).Ниже приведен только пример для результата CookieLocaleResolver .
Примечание. Речь идет не о конфигурации локали, а о конфигурации распознавателя локали.
enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...