ContexLoaderListener в web.xml

0
04 янв 2017 07:43
Здравствуйте!

Для чего нужно указывать в файле web.xml
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

при создании Spring MVC приложения?

Везде пишется что для загрузки WebApplicationContext (правильно ли я понимаю, что WebApplicationContext определяется файлом [servlet-name]-servlet.xml, т.е. dispatcher-servlet.xml в моем случае?)

Почему тогда когда я убираю тег <listener> из web.xml все по-прежнему прекрасно работает (следовательно загружается WebApplicationContext без ContextLoaderListener)?

Где я ошибаюсь?

Для полноты приведу полный текст web.xml и структуру проекта
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/application-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>





Ответов: 1

0
04 янв 2017 08:46
Есть два способа указывать контексты: можно через ContextLoaderListener, а можно как contextConfigLocation в DispatcherServlet'e. Однако Spring MVC позволяет создавать сколько угодно DispatcherServlet'ов - это, можно сказать, N отдельных Spring MVC приложений. Если эти контексты должны быть не совсем независимыми, а шарить между собой какие-то контексты, то для этого как раз нужен ContextLoaderListener.
DispatcherServlet Javadoc:
A web application can define any number of DispatcherServlets. Each servlet will operate in its own namespace, loading its own application context with mappings, handlers, etc. Only the root application context as loaded by org.springframework.web.context.ContextLoaderListener, if any, will be shared.
Модераторы: Нет
Сейчас эту тему просматривают: Нет