Что означает listener-class в web.xml и какую роль играет contextConfigLocation?

Доброго времени суток всем! Меня интересует вопрос, связанный с пониманием смысла настройки параметров Spring MVC, в файле дескриптора развертывания (web.xml). Обычно я могу развернуть spring веб-приложение, работающее на Tomcat, настроив в web.xml только DispatcherServlet:
<servlet>
		<servlet-name>mvc-dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>WEB-INF/mvc-dispatcher-servlet.xml</param-value>
		</init-param>
        <load-on-startup>1</load-on-startup>
	</servlet>

Кстати, сразу хотелось бы прояснить один момент : Если мой mvc-dispatcher находить в WEB-INF/ , то можно же явно не указывать ему contextConfigLocation, если еще и соответствует имени файла, без суффикса -servlet?

Вернусь к основному вопросу: Я видел, что многие указывают в web.xml, еще дополнительные параметры, при которых у меня приложение работает абсолютно также:
<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>


К сожалению, не смог загуглить нормального объяснения, что же такое listener и для чего он служит, буду очень благодарен если откроете его смысл. Так же хочется понять к чему именно относится инициализация параметра contextConfigLocation.
Из моих предположений только то, что это некое логическое разделение, удобное для разработчика, т.е в одной части прописать одни бины(Только вот какие), а в другой, для веба, где должен быть, допустим InternalResourceViewResolver описан.
  • Вопрос задан
  • 4668 просмотров
Решения вопроса 1
angry_cellophane
@angry_cellophane
И лисенер, и диспетчер поднимают ApplicationContext. Сначала поднимает лисенер, далее диспатчер поднимает дочерний контекст. Таким образом в бинах, подгружаемых диспатчером, можно делать референсы на бины, загружаемые лисенером.
Главный вопрос - зачем?
Для секьюрити. В лисенере прописывается спринг секьюрити конфигурация, а в диспатчере бины из spring mvc. Т.о. бины из приложения могут использовать бины для секьюрити, но не наоборот.
Подробнее можно почитать в какой-нибудь книге по спринг секьюрити, например Spring Security 3.1.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
Само название listener, как бы намекает, что это некий слушатель. Т.е. он предназначен, чтобы слушать некие события. У Spring есть своя реализация событийной модели, на сколько я помню. По поводу конфига, да Вы можете его не указывать, но чтоб не насиловать classpath при старте приложения можно напрямую указать файл конфигурации. Т.е. это просто набор таких правил, при следовании которым, Вам гарантируется корректный старт и работа приложения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы