Используйте Spring IoC с сервлетами, определенными в web.xml - PullRequest
2 голосов
/ 06 июля 2010

Это может быть относительно простой вопрос, который я просто неправильно искал, но я пытаюсь использовать контейнер Spring IoC для настройки моих сервлетов. У меня есть некоторые дополнительные обработчики (которые являются частными членами данных) и такие, которые я хотел бы настроить во время выполнения. Возможно ли это сделать?

Прямо сейчас у меня есть файл web.xml, который правильно загружает сервлеты, однако проблема в том, что я не уверен, как связать эти экземпляры с контейнером Spring IoC или, наоборот, связать экземпляры, сгенерированные из контейнера IoC, Контейнер сервлетов.

В моем файле web.xml я настраиваю ContextLoaderListener

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

А также настройка правильного местоположения для контекста bean-компонентов

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/beans.xml
  </param-value>
</context-param>

Я также знаю, что файл beans.xml анализируется, потому что я получил несколько исключений, когда неправильно набрал текст.

Мысли? Есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 06 июля 2010

Я думаю, что большинство людей, которые хотят делать то, что вы просто используете Spring MVC Framework.В этом случае это класс Spring, и вы просто реализуете «Контроллеры» (вместо реальных сервлетов).

Тем не менее, вполне возможно сделать именно то, что вы ищете.Посмотрите FrameworkServlet (вы можете расширить это) или DelegatingFilterPorxy (вы можете написать 'DelegatingSevletProxy', используя этот класс в качестве примера).

0 голосов
/ 06 июля 2010

Вы должны переместить свою логику из сервлетов, чтобы они были просто тонкими оболочками, которые получают ссылку на контекст приложения Spring, создают экземпляр bean-компонента из контекста, передают ему HTTP-запрос, сессию, что-либо еще необходимое и сообщают боб, чтобы сделать работу.

Учтите, что вы не можете создать экземпляр сервлета вне контейнера сервлета, поэтому он не может быть проверен модулем. Контейнер IoC не может создать его экземпляр. Это не принесет пользы от IoC или DI.

Если можете, используйте Spring MVC; вы, вероятно, захотите переместить логику в ваших сервлетах в классы контроллеров.

В противном случае взгляните на org.springframework.web.context.ContextLoaderListener; оттуда вы можете увидеть, как Spring самозагружается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...