我有一个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方法
手动访问服务实例答案 0 :(得分:6)
您不在DispatcherServlet
的上下文中,而是在您自己的Servlet
实施中。
您可能位于ContextLoaderListener
的上下文中。使用
WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
获取WebApplicationContext
加载的ContextLoaderListener
。如果它不存在,该方法将抛出异常。