Контекст веб-приложения расширенный контекст приложения, который предназначен для работы со стандартным javax.servlet.ServletContext, чтобы он мог взаимодействовать с контейнером.
public interface WebApplicationContext extends ApplicationContext {
ServletContext getServletContext();
}
Бины, созданные в WebApplicationContext, также смогут использовать ServletContext, если они реализуют интерфейс ServletContextAware.
package org.springframework.web.context;
public interface ServletContextAware extends Aware {
void setServletContext(ServletContext servletContext);
}
С экземпляром ServletContext можно сделать много вещей, например, получить доступ к ресурсам WEB-INF (конфигам xml и т. Д.), Вызвав метод getResourceAsStream (). Обычно все контексты приложения, определенные в web.xml в приложении Spring сервлета, являются контекстами веб-приложения, это относится как к контексту корневого веб-приложения, так и к контексту приложения сервлета.
Кроме того, в зависимости от возможностей контекста веб-приложения тестирование вашего приложения может быть немного сложнее, и вам может понадобиться использовать класс MockServletContext для тестирования.
Различие между сервлетом и корневым контекстом
Spring позволяет создавать многоуровневые иерархии контекста приложения, поэтому требуемый компонент будет выбран из родительского контекста, если он отсутствует в текущем контексте приложения. В веб - приложениях по умолчанию есть два уровня иерархии, корневые и сервлетов контексты: .
Это позволяет вам запускать некоторые сервисы как синглтоны для всего приложения (здесь обычно находятся bean-компоненты Spring Security и базовые сервисы доступа к базам данных), а другие как отдельные сервисы в соответствующих сервлетах, чтобы избежать конфликта имен между bean-компонентами. Например, один контекст сервлета будет обслуживать веб-страницы, а другой будет реализовывать веб-службу без сохранения состояния.
Это двухуровневое разделение возникает сразу после использования классов сервлетов Spring: для настройки контекста корневого приложения вы должны использовать тег context-param в вашем файле web.xml.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
(контекст корневого приложения создается ContextLoaderListener, который объявлен в web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
) И сервлет тег для контекста приложения сервлета
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>app-servlet.xml</param-value>
</init-param>
</servlet>
Обратите внимание, что если init-param будет опущен, то Spring будет использовать myservlet-servlet.xml в этом примере.
Смотрите также: Разница между applicationContext.xml и spring-servlet.xml в Spring Framework
web.xml
файла; этот вопрос задает о некоторых классах Spring.