Как работает 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
для загрузки веб-контекста.
ваш вопрос немного запутан относительно того, что вы на самом деле хотели бы сделать - вы хотите, чтобы все "версии" были доступны в одном экземпляре приложения?
если да, то метод, который вы описываете, звучит неортодоксально для представления нескольких языков / глобализация приложения. Традиционно у вас будет только один экземпляр приложения и все контроллеры/экземпляры, а затем обрабатывать перевод пользовательских сообщений на уровне отображения. Весна имеет превосходную поддержку для этого.
если ваша цель-иметь один экземпляр приложения обрабатывать запросы все эти языки и диалекты, то это звучит, как вы могли бы покончить с этой избыточности.