找不到WebApplicationContext:不在DispatcherServlet请求中

时间:2014-10-28 00:08:07

标签: java spring spring-mvc servlets

我有一个Spring应用程序。由于某些原因,我有一个标准的servlet,我需要servlet才能访问一些spring bean(我知道这不太理想,我将来会寻找更好的东西)。

在Web.xml中

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet>
    <description>Tunnel servlet.</description>
    <servlet-name>Tunnel</servlet-name>
    <servlet-class>
        com.something.GuacamoleController
    </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Tunnel</servlet-name>
    <url-pattern>/path</url-pattern>
</servlet-mapping>

和GuacamoleController

public class GuacamoleController extends GuacamoleHTTPTunnelServlet {

    @Override
    protected GuacamoleTunnel doConnect(HttpServletRequest request)
            throws GuacamoleException {

        WebApplicationContext webApplicationContext = RequestContextUtils.getWebApplicationContext(request);

        [...]
    }
}

但它抛出了这个错误:

java.lang.IllegalStateException: No WebApplicationContext found: not in a DispatcherServlet request?

如何将此案例设为DispatcherServlet请求?

我需要Web应用程序上下文,因此我可以使用getBean方法

手动访问服务实例

1 个答案:

答案 0 :(得分:6)

您不在DispatcherServlet的上下文中,而是在您自己的Servlet实施中。

可能位于ContextLoaderListener的上下文中。使用

WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());

获取WebApplicationContext加载的ContextLoaderListener。如果它不存在,该方法将抛出异常。