Как работает DispatcherServlet, если у нас есть несколько файлов конфигурации XML?

вопросы

как работает DispatcherServlet, если у нас есть несколько файлов конфигурации XML, так как контекст приложения Spring загружает их и действует на них ?

сценарий:

в моем случае у нас есть приложение, которое должно быть глобальным, то есть приложение должно иметь AP{Asia-Pacific}, EM{Europ-Middleeast}, CA{Canada} and LA{Latin America} версий.

в настоящее время у нас есть приложение для одного региона, который EMи ее XML Configuration File i.e, em-servelt.xml и тогда есть generic Теперь AP region у нас есть еще один ap-servlet.xml файл и, кстати, оба em-servlet.xml и ap-servlet.xml file будут иметь одинаковые имена бобов, но они будут указывать на контроллеры в разных пакетах, поэтому, например, em будет указывать на что-то вроде com.em.DomainController и ap будет указывать на com.ap.DomainController.

у меня вопрос

как запрос сопоставляется с различными контроллерами и как запрос распознается так что он должен читать из ap-сервлета.xml или EM-сервлет.в XML ?

Я надеюсь, что могу четко сформулировать свой вопрос.

2 ответов


на web.xml файл может настроить несколько DispatcherServlet экземпляров, каждый из которых имеет свою собственную конфигурацию. Каждый DispatcherServlet экземпляр настраивает WebApplicationContext отдельно от других DispatcherServlet экземпляры, поэтому вы можете использовать те же имена компонентов, не влияя на другой контекст приложения.

<!-- configured by WEB-INF/ap-servlet.xml -->
<servlet>
    <servlet-name>ap</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- configured by WEB-INF/em-servlet.xml -->
<servlet>
    <servlet-name>em</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

вы также должны настроить web.xml сопоставить запросы с соответствующими DispatcherServlet. Например, каждый регион может иметь другой URL-адрес.

<servlet-mapping>
    <servlet-name>ap</servlet-name>
    <url-pattern>/ap/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>em</servlet-name>
    <url-pattern>/em/*</url-pattern>
</servlet-mapping>

на web.xml file контролирует, какой контекстный файл DispatcherServlet использует. Если вы настраиваете web.xml иметь DispatcherServlet С именем em, то по умолчанию он использует em-servlet.xml для загрузки веб-контекста.

ваш вопрос немного запутан относительно того, что вы на самом деле хотели бы сделать - вы хотите, чтобы все "версии" были доступны в одном экземпляре приложения?

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

если ваша цель-иметь один экземпляр приложения обрабатывать запросы все эти языки и диалекты, то это звучит, как вы могли бы покончить с этой избыточности.