如何在web.xml中将HttpServlet与Spring Application Context连接?

时间:2009-12-08 13:24:30

标签: spring

我正在尝试连接我的FooServlet,它扩展了HttpServlet和ApplicationContext,它位于同一个Project中。 应用程序上下文已被Wicket Servlet使用

适用于

servletContext = this.getServletContext();
wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
(IMyBean)wac().getBean("myServiceBean")

现在我尝试在我的代码中使用显式的Spring类(WebApplicationContextUtils),因为它不是IoC方式。

Wicket Servlet与web.xml中的Application上下文相关联

<servlet>
  <servlet-name>ExampleApplication</servlet-name>
  <servlet-class>org.apache.wicket.protocol.http.WicketServlet</servlet-class>
    <init-param>
      <param-name>applicationFactoryClassName</param-name>
      <param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
    </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

我找到了Spring HttpServletBean类,但我不知道它是否适用于我的Case

2 个答案:

答案 0 :(得分:15)

我找到了一种在我的HttpServlet中注入Beans的方法(注意:我不需要Presentation View,否则有更高级的Spring类)

将ContextLoaderListener添加到web.xml,以便加载Spring的根WebApplicationContext

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

使用弹簧HttpRequestHandlerServlet

配置Servlet
<servlet>
 <servlet-name>FooServlet</servlet-name>
 <display-name>Foo Servlet</display-name>
 <servlet-class>
      org.springframework.web.context.support.HttpRequestHandlerServlet
    </servlet-class>
</servlet>

让您的Servlet实现org.springframework.web.HttpRequestHandler接口

在ApplicationContext中将Servlet定义为Bean(beanID必须与“servlet-name”相同)。 现在可以在Spring DependencyInjection方式中注入所有necassary Beans而无需依赖查找。

答案 1 :(得分:2)

我认为你应该使用类似的Spring实用程序  RequestContextUtils.getWebApplicationContext(request,application); 在Servlet中连接Spring Context。 同意这不是DI / IoC,但servlet也不是bean!