Контекст веб-додатків розширений контекст програми, який призначений для роботи зі стандартним 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 у весняній програмі сервлетів, є контекстами веб-додатків; це стосується як контексту кореневого веб-сайту, так і контексту програми сервлета.
Крім того, залежно від можливостей контексту веб-додатків може зробити ваш додаток дещо складнішим для тестування, і вам може знадобитися використовувати клас MockServletContext для тестування.
Різниця між сервлетом та кореневим контекстом
Spring дозволяє створювати багаторівневі ієрархії контексту додатків, тому необхідний квадратик буде вилучений з батьківського контексту, якщо його немає в поточному контексті програми. У веб - додатках за замовчуванням є два рівня ієрархії, кореневі і сервлетів контексти: .
Це дозволяє запускати деякі сервіси як одиночні кнопки для всієї програми (Spring Security боби та основні служби доступу до бази даних, як правило, проживають тут), а інші як окремі сервіси у відповідних сервлетах, щоб уникнути сутичок імен між квасолями. Наприклад, один контекст сервлету буде обслуговувати веб-сторінки, а інший реалізовуватиме веб-службу без громадянства.
Це два рівні розділення виходять з поля, коли ви використовуєте весняні класи сервлетів: для налаштування контексту кореневої програми слід використовувати тег контекст-парам у своєму веб.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 буде опущено, то в цьому прикладі весна використовуватиме myservlet-servlet.xml.
Дивіться також: Різниця між applicationContext.xml та spring-servlet.xml у Spring Framework
web.xml
файлу; це питання задає питання про деякі весняні заняття.