2014-10-28 3 views
1

У меня есть приложение Spring. По некоторым причинам у меня есть стандартный сервлет, и мне нужен этот сервлет, чтобы иметь доступ к некоторым весенним бобам (я знаю, что это не идеально, и я буду искать что-то лучшее в будущем).Нет WebApplicationContext найден: не в запросе диспетчераServlet

в 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?

мне нужен контекст веб-приложения, так что я могу вручную получить доступ к экземпляру службы с getBean методом

+0

Если вы работаете с Spring MVC, почему вы создаете свои собственные сервлеты? –

+0

Ситуация требует этого. Лучше всего было бы преобразовать этот сервлет (http://guac-dev.org/doc/gug/writing-you-own-guacamole-app.html#idm139993934478752) в контроллер Spring. Это тоже решило бы проблему. – Tk421

+0

* Ситуация требует так *. Ну, это ваша точная проблема, и это то, что вы должны спросить. –

ответ

4

Вы не в контексте DispatcherServlet, вы качению в своей собственной Servlet реализации.

Вы, , может быть быть в контексте ContextLoaderListener. Используйте

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

получить WebApplicationContext, нагруженного ContextLoaderListener. Если он не существует, метод выдаст исключение.

Смежные вопросы