2014-12-17 5 views
1

У меня есть два DispatcherServlets. Один из них настроен в web.xml, другой настроен с моей реализацией org.springframework.web.WebApplicationInitializer. Как я понимаю, делая это, я создаю два ApplicationContexts. Проблема в том, что они должны использовать один и тот же ApplicationContext. Инициализация выглядит так, если это помогает понять мой вопрос. Web.xml:Два DispatcherServlets имеют один и тот же ApplicationContext

<servlet> 
     <servlet-name>web-xml-dispatcher</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>WEB-INF/dispatcher-config.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>web-xml-dispatcher</servlet-name> 
     <url-pattern>/web-test/*</url-pattern> 
    </servlet-mapping> 

WebApplicationInitializer:

public class WebAppInit implements WebApplicationInitializer { 
    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.scan("com.test"); 
     DispatcherServlet servlet = new DispatcherServlet(context); 
     ServletRegistration.Dynamic dynamic = servletContext.addServlet("initializer-dispatcher", servlet); 
     dynamic.addMapping("/init-test/*"); 
    } 
} 

Итак, есть ли способ, чтобы разделить одну ApplicationContext между диспетчерами, сконфигурированных как это?

+0

Да. Вы можете определить контекст веб-приложения корень: http://stackoverflow.com/questions/3521942/spring-root-webapplicationcontext-for-servlet –

+0

@andresoviedo, но как я могу определить, что мой DispatcherServlet настроен WebApplicationInitializer следует использовать корневой контекст? –

+0

Я отправляю вам ответ ... –

ответ

0

Вы должны определить контекст веб-приложения корневой:

<!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/root-context.xml</param-value> 
</context-param> 

<!-- Creates the Spring Container shared by all Servlets and Filters --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

Разводка контекста сервлета в корневой контекст делается по умолчанию к весне.

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