Spring Mvc未能啟動元件 Failed to register servlet with name 'dispatcher'.
阿新 • • 發佈:2018-12-20
剛接觸Spring MVC,Demo專案中,起先用的是xml的配置,基本是預設配置,這個時候啟專案沒問題,WEB-INF下的index.jsp也可以訪問,但是用了AbstractAnnotationConfigDispatcherServletInitializer的java配置後就報錯了,
程式碼全是按照書上來的,沒有問題,但是報錯Caused by: java.lang.IllegalArgumentException: Failed to register servlet with name 'dispatcher'.Check if there is another servlet registered under the same name.
程式碼如示
@Configuration @EnableWebMvc @ComponentScan("spittr.web") public class WebConfig extends WebMvcConfigurerAdapter { @Bean public ViewResolver viewResolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeansAsAttributes(true); return resolver; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){ configurer.enable(); } }
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; } @Override protected String[] getServletMappings() { return new String[]{ "/" }; } }
@Configuration
@ComponentScan(basePackages = {"spittr"}, excludeFilters={
@Filter(type= FilterType.ANNOTATION, value = EnableWebMvc.class)
})
public class RootConfig {
}
報錯資訊是有兩個同名的dispatcher Servlet,這是因為什麼原因呢,最後發現是在新增java配置之前,Spring會從web.xml檔案中得到dispatcher,但是我現在沒有修改web.xml檔案,又加上了java的配置,所以會有兩個dispacher,Spring這個時候不知道去載入哪個,所以報錯
解決方案:可以修改web.xml檔案,刪除其中的配置,問題就解決了