【问题标题】:How to initialize SpringWebAplication without dispatcher servlet?如何在没有调度程序 servlet 的情况下初始化 SpringWebAplication?
【发布时间】:2014-12-22 17:11:22
【问题描述】:

我在使用 Spring,但不是在 Web 应用程序中使用 SpringMVC,并且必须通过 web.xml 初始化 Spring 应用程序

我有标准的网络项目结构:

WEB-INF/applicationContext.xml
WEB-INF/web.xml

web.xml 当前包含:

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

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

但我的问题是任何侦听器都应该绑定到 servlet。就我而言,我不使用dispatcherServlet。在这种情况下如何加载弹簧WebApplicationContext、所有弹簧豆等?我在 web.xml 中写了什么?

【问题讨论】:

    标签: spring servlets


    【解决方案1】:

    ContextLoaderListener 初始化WebApplicationContext 并将其存储在ServletContext 属性中WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 引用的名称下。

    你可以这样找回它。

    servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    

    ContextLoaderListener 完成执行后,您可以访问ServletContext 的任何地方。

    As suggested by M.Deinum in the comments,这是一个非常流行的用例,Spring 有自己的实用程序可以做到这一点:WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext)

    您无需更改 web.xml 中的任何内容。

    【讨论】:

    • 但是我们需要将上下文侦听器绑定到一个 servlet,不是吗?上下文绑定到哪个 servlet?
    • @St.Antario 不,你没有。 ServletContextListener 是一个独立的部分。它可以通过ServletContext属性与其他组件交互。
    • 我明白了。非常感谢。
    • 我建议不要使用servletContext.getAttribute,而是使用WebApplicationContextUtils.getWebApplicationContext
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2020-02-12
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多