2013-02-22 1 views
1

Я последовал this example настроить мой DispatcherServlet через Java с Спрингом WebApplicationInitializer ->javax.servlet.ServletContainerInitializer:ServletRegistration отображение URL конфликт с весной DispatcherServlet

@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext(); 
    mvcContext.register(MyConfiguration.class); 

    ServletRegistration.Dynamic appServlet = servletContext.addServlet("appServlet", new DispatcherServlet(mvcContext)); 
    appServlet.setLoadOnStartup(1); 

    Set<String> mappingConflicts = appServlet.addMapping("/"); 
    if (!mappingConflicts.isEmpty()) { 
     for (String s : mappingConflicts) { 
      LOGGER.error("Servlet URL mapping conflict: {}", s); 
     } 
     throw new IllegalStateException("'appServlet' cannot be mapped to '/'"); 
    } 
} 

Когда я запуском Tomcat, я получаю выше IllegalStateException, потому что apparently there is already a Servlet отображается в /, и я могу только предположить, что это Servlet по умолчанию Tomcat. Если я игнорирую mappingConflicts, мой DispatcherServlet не привязан к чему-либо.

Есть ли способ переопределить это сопоставление сервлетов по умолчанию с моим собственным или я застрял в сопоставлении с моим DispatcherServlet до /*?

This answer предлагает решение, изменяя место размещения приложения в папке webapps Catalina, но я надеялся на что-то менее навязчивое.

ответ

0

Итак, вы можете нанести DispatcherServlet или любой другой сервлет на / через Java (в отличие от xml, где вы всегда могли это сделать), но только на версиях Tomcat> 7.0.14, я был на 7.0.12.

См. this Bugzilla issue для обсуждения.

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