Взаимодействие между контейнером Spring и сервлетами

Я пытаюсь понять связь между контейнером среды Spring и сервлетом. Я только начинаю и считаю, что приложение Spring MVC может работать с сервлетами, портлетами и т. д.,

Когда запускается приложение Spring, использующее сервлеты, я считаю, что мир приложения начинается с создания контейнера Spring, основная функция которого (не совсем основная, но что-то похожее) создает bean-компоненты, сшивает их и т. д., а затем создает сервлет, DispatcherServlet, который начинает принимать соединения и направляет запросы к другим контроллерам в приложении spring. Поскольку контейнер Spring не управляет сервлетом активно, DispatchServlet нельзя считать частью контейнера Spring. Правильно ли мое понимание выше?

Было бы здорово, если бы кто-нибудь мог пролить больше света на связь между инфраструктурой Spring и (скажем) и встроенным контейнером сервлетов, таким как Tomcat/getty. Спасибо !


person Venkat    schedule 01.08.2014    source источник
comment
Проверьте stackoverflow.com/questions/21714290/ . Запуск встроенного контейнера сервлетов ничего не меняет.   -  person Pavel Horal    schedule 01.08.2014
comment
Вот еще одно полезное описание: stackoverflow.com/questions/19826228/   -  person Sotirios Delimanolis    schedule 02.08.2014


Ответы (1)


Spring сам по себе не контейнер, это фреймворк. Однако у него есть контейнер IoC, и этот контейнер построен на компонентах и ​​контекстах. Например, в веб-приложении есть два контекста:

  • контекст DispatcherServlet
  • контекст корневого приложения

Итак, чтобы ответить на ваш вопрос, сервлет диспетчера - это просто стандартный сервлет, но он имеет свой собственный контекст Spring IoC, в котором объявляются и подключаются контроллеры, шаблоны представлений и т. д. если вы посмотрите на web.xml весеннего веб-приложения, вы увидите что-то вроде этого...

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

Это просто стандартное объявление сервлета, и вы предоставляете ему файл xml, который он должен использовать для создания своего собственного контекста IoC.

Это проясняет ситуацию?

person dectarin    schedule 01.08.2014