Можем ли мы изменить имя файла конфигурации контекста 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) Божо уже ответил.