Уровень контекста в архитектуре веб-приложений Spring

Я борюсь с уровнем архитектуры веб-приложения Spring. Ниже я делаю свои указатели. Пожалуйста, помогите в следующем:

Программирование на уровне контекста: контекст сервлета и корневое приложение, контекст веб-приложения и контекст веб-приложения.

  1. Я не знаю, какой боб нужно упомянуть на каком уровне.

  2. Что такое уровень иерархии контекста в веб-приложении Spring. что идет выше или ниже.

  3. Какой контекст находится под каким контекстом.

Насколько я понимаю, контекст сервлета является объектом контейнера сервлетов (контейнер tomcat), а контейнер сервлетов отвечает за управление всеми сервлетами, в которых живут все сервлеты.

Все зависимости Bean находятся в контейнере приложения, а контекст корневого веб-приложения является объектом контейнера приложения.

Каждый сервлет имеет свой собственный контекст веб-приложения, я не знаю, что это такое, это то же самое, что и контекст сервлета.

<сильный>4. И отношения между ними?

Пожалуйста, опишите это с помощью диаграммы, подобной этой (это будет действительно заметно)

Это просто пример, чтобы понять, что загружается первым и что находится внутри чего. Пожалуйста, проверьте эту справочную схему


person Yawar    schedule 15.10.2018    source источник


Ответы (1)


Подумайте о контексте как о среде выполнения компонента.

Контейнер сервлетов (веб-сервер) размещает веб-приложения и при запуске создает один ServletContext для каждого из этих приложений. Таким образом, каждое веб-приложение живет в контексте сервлета, который предоставляет ему информацию о своей среде (контейнере). Это API сервлетов Java. Tomcat — это реализация этого API.

Теперь Spring — это одна из платформ, которую мы можем использовать для создания веб-приложений. Когда мы развернем наше веб-приложение в контейнере, он (контейнер) создаст ServletContext, и именно здесь будет жить наше приложение.

Каждое приложение Spring имеет корневой контекст (ApplicationContext), и в нем может существовать один или несколько дочерних контекстов. WebApplicationContext расширяет ApplicationContext. Может быть много WebApplicationContexts, дочерних элементов корневого контекста приложения. WebApplicationContext (который добавляет метод getServletContext() ) может работать с ServletContext, в котором он находится.

Итак, в веб-приложении на основе Spring, развернутом в контейнере:

контейнер --содержит 1..n--> ServletContext --содержит 1--> ApplicationContext --содержит 1..n--> WebApplicationContext

person martidis    schedule 16.10.2018
comment
Пожалуйста, посмотрите на этот вопрос, потому что он касается загрузки XML для создания контекста приложения. [stackoverflow.com/questions/52816113/ - person Yawar; 16.10.2018
comment
@Yawar Я должен признать, что не понимаю вопроса. Не могли бы вы попробовать перефразировать? - person martidis; 16.10.2018
comment
Я пытаюсь спросить вас, что в приложении, отличном от веб-приложения, мы делаем эти вещи для загрузки файла xml и создания контекста приложения. Контекст ApplicationContext = новый FileSystemXmlApplicationContext (C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml); - person Yawar; 16.10.2018
comment
2. Использование ClassPathXmlApplicationContext. Но когда мы загружаем XML с помощью ContextLoaderListener и создаем контекст приложения, какая реализация ContextLoaderListener или wt реализация ContextLoaderListener выполняется внутри - person Yawar; 16.10.2018
comment
Все еще не понимаю вашего вопроса, но я попытаюсь ответить, основываясь на том, что, как я думаю, вы могли бы иметь в виду. Когда веб-приложение загружено, web.xml будет проанализирован для обнаружения сервлетов, фильтров, прослушивателей и т. д. Или вы имеете в виду, как в вопросе, на который вы мне указали, как переопределить onStartup с использованием конфигурации xml вместо аннотации/класс? - person martidis; 16.10.2018
comment
Мне очень жаль, что я не могу заставить тебя понять. Вниз по линии, Большое спасибо за вашу помощь и ваши усилия. Я очень ценю это. - person Yawar; 16.10.2018