Можем ли мы изменить имя файла конфигурации контекста DispatcherServlet?
В Spring web mvc
1) Если мы определим DispatcherServlet
как ниже
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
он ищет файл с именем appServlet-servlet.xml
в папке WEB-INF
, как указано в ссылке Spring.
Мой вопрос в том, можем ли мы изменить это имя файла и местоположение, которое он ищет? (Я думаю, используя параметры контекста или init, мы можем это сделать, может ли любое тело сказать мне, что именно должно быть?)
2) В каждом Spring web mvc web.xml
мы будем иметь следующую строку:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Здесь мой вопрос - какие файлы контекста он ищет? (is this list loader listener, который ищет dispatcherservlet-servlet.xml?)
3) Разница между dispatcherservlet-servlet.xml
и applicationcontext.xml
? (Я видел несколько примеров, где люди импортируют applicationcontext.xml
в dispatcherservlet-servlet.xml
?)
4) Скажите, пожалуйста, сколько контекстов мы можем иметь для веб-сайта Spring и существуют ли соглашения об именах для этого (например, сервлет диспетчера)?/
Ответы
Ответ 1
-
"Пространство имен также может быть явно задано с помощью namespace
servlet init-param." Вы можете установить любой путь, который вы хотите там, относительно корня контекста
-
Нет, ContextLoaderListener
ищет applicationContext.xml
(или для файла, указанного в параметре context-param contextConfigLocation
). И снова путь относится к корневому контексту. Обычно я помещаю мой в /WEB-INF/classes/applicationContext.xml
, и установите это как значение параметра context-param).
-
dispatcherServlet-servlet.xml
представляет собой дочерний контекст для объекта, определенного applicationContext.xml
. Детский контекст может получить доступ к beans из родительского контекста, но противоположное неверно. Итак, представьте себе, что у вас есть "веб-контекст" со всеми контроллерами и материалами, связанными с сетью, и "основным" контекстом со всем остальным.
-
Желательно иметь как можно меньше контекстов (для простоты). Но вы можете определить несколько сервлетов диспетчера и, следовательно, иметь несколько "дочерних" контекстов.
Ответ 2
Мой вопрос в том, можем ли мы изменить имя и местоположение этого файла, которое он ищет?
Вы имели в виду, что хотите использовать файл, который НЕ назван как appServlet.xml
Копирование-вставка из mvc-shocase/web.xml
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Ответ 3
1A) Да, но нам нужно передать init-param в DispatcherServlet с именем и значением как "contextConfigLocation" и "location ur ur" соответственно в файле DD или web.xml.
2A) Божо уже ответил. Он [ContextLoaderListener] обращается к загрузке xml файла контекста, предоставленного в качестве значения параметра контекста, сопоставленного с параметром-параметром context для параметра context-param. Поиск "dispatcherservlet-servlet.xml" - это процесс по умолчанию в Spring MVC. ContextLoaderListener не ищет его.
3A) Божо уже ответил.
4A) Божо уже ответил.