Я запутался между двумя ApplicationContext и ServletContext, когда дело доходит до Spring MVC Application. Я знаю, что существует только один ApplicationContext на каждое веб-приложение Spring, а также только один ServletContext на каждое веб-приложение. Чтобы инициировать значение для ApplicationContext и ServletContext, в web.xml мы добавим что-нибудь в тег context-param .
Это то, что меня смущает. Каковы различия между этими двумя (я знаю, ApplicationContext имеет несколько методов для работы с бобами)? и Когда мы будем использовать ApplicationContext и Когда мы будем использовать ServletContext ?
Весной, чтобы прочитать конкретный файл конфигурации инициализации, мы используем контекстный параметр с предопределенным именем, называемым contextConfigLocation .
<context-param>
<description>WebFlow context configuration</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/test-context.xml</param-value>
</context-param>
Но в случае простого веб-приложения J2EE без включения каких-либо каркасов контекстный параметр может считывать данные из любого места приложения, т. Е. Любой сервлет, фильтровать.
Разница между ApplicationContext и ServletContext , объяснил Санджай
ServletContext
отличается от «вложения» ApplicationContext
. Документ Java говорит следующее для ServletContext
Существует один контекст [сервлет] для «веб-приложения» на виртуальную машину Java. («Веб-приложение» - это набор сервлетов и контента, установленных в определенном подмножестве пространства имен URL-адреса сервера, например / catalog, и, возможно, установленном через файл .war.)
Поскольку более одного «веб-приложения» под одним и тем же AppBase
, каждое из которых имеет свои собственные DocBase
, WEB-INF/web.xml
и т. д., определенно существует общая среда / контекст, который является общим для всех «веб-приложений», о котором идет речь как ApplicationContext
. В случае JSF PortletContext
является противоположностью ServletContext
, а ApplicationContext
называется ExternalContext
.
Он инициализируется при развертывании приложения сервлета. Контекст сервлета содержит все конфигурации (init-param, context-params и т. Д.) Всего приложения сервлета.
Это особенность Spring. Инициализируется весной. Он содержит все определения bean-компонентов и жизненный цикл bean-компонентов, определенных в файлах конфигурации Spring. Servlet-Context не имеет ни малейшего представления об этом.
Существует два типа контекстов в Spring: parent и child.
<listener>
<listener-lass>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/service-context.xml,
/WEB-INF/dao-context.xml,
/WEB-INF/was-context.xml,
/WEB-INF/jndi-context.xml,
/WEB-INF/json-context.xml
</param-value>
</context-param>
role-target-of-contextloaderlistener-in-spring
Spring- ContextLoaderListener-And-DispatcherServlet-Concepts
Когда запускается контейнер Spring, он считывает все определения bean-компонентов из файлов конфигурации и создает объекты bean-объектов и управляет жизненным циклом объектов bean-компонентов. Эта конфигурация не является обязательной.
DispatcherServlet vs ContextLoaderListener
/ декларирование-spring-bean-in-parent-context-vs-child-context
<servlet>
<servlet-name>myWebApplication</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myWebApplication</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
При запуске весеннего веб-приложения он ищет файл конфигурации Spring Bean myWebApplication-servlet.xml. Он будет читать все определения компонентов, создавать и управлять жизненным циклом объектов объектов. Если доступен родительский весенний контекст, он объединит дочерний весенний контекст с родительским весенним контекстом. Если родительский контекст Spring недоступен, приложение будет иметь только дочерний контекст весны.
ApplicationContext - это контейнер Spring.
Он используется для соединения конфигураций из бинов Spring и использования их для приложения.
Используйте ApplicationContext, если вы хотите получить информацию о бобах Spring.
Используйте ServletContext, если вы хотите получить / установить атрибуты, общие для всех сервлетов.