My initializer class
public class HomeServlet extends
AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{SpringContextConfig1.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/home"};
}
}
Configuration Class
@ComponentScan(basePackages={"spittr.controllers"})
@Configuration
@EnableWebMvc
public class SpringContextConfig1 extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver ivr=new InternalResourceViewResolver();
ivr.setPrefix("/WEB-INF/jsp/");
ivr.setSuffix(".jsp");
ivr.setExposeContextBeansAsAttributes(true);
return ivr;
}
}
Controller
@Controller
public class HomeController {
@RequestMapping(value="/home",method=RequestMethod.GET)
public String home(){
return "home";
}
}
这是一个非常简单的程序,我编写了测试Spring MVC的JavaConfig . 我完全按照“Spring in Action”一书中的所有步骤进行操作 .
当我运行此代码时,我收到此错误
09:41:37,854 ERROR [org.jboss.msc.service.fail](ServerService线程池 - 72)MSC000001:无法启动服务jboss.undertow.deployment.default-server.default-host./spittr:org服务中的.jboss.msc.service.StartException.jboss.undertow.deployment.default-server.default-host . / spittr:java.lang.RuntimeException:java.lang.IllegalArgumentException:无法注册名为'dispatcher'的servlet . 检查如果有另一个以相同名称注册的servlet . at org.wildfly.extension.undertow.deployment.UndertowDeploymentService $ 1.run(UndertowDeploymentService.java:85)at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask . java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.lang.Thread的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)上运行(FutureTask.java:266) .run(Thread.java:745)at org.jboss.threads.JBossThread.run(JBossThread.java:320)引起:java.lang.RuntimeException:java.lang.IllegalArgumentException:无法注册名为'dispatcher'的servlet . 检查是否有另一个以相同名称注册的servlet . 在org.wildfly.extension.undertow.deployment的org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)的io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:236)中.UndertowDeploymentService $ 1.run(UndertowDeploymentService.java:82)... 6更多引起:java.lang.IllegalArgumentException:无法注册名为'dispatcher'的servlet . 如果有另一个servlet注册在同一名称下,请检查 . org.springframework.util.Assert.notNull(Assert.java:115)org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.registerDispatcherServlet(AbstractDispatcherServletInitializer.java:98)org.springframework.web.servlet.support.AbstractDispatcherServletInitializer位于io.undertow的io.undertow.servlet.core.DeploymentManagerImpl $ 1.call(DeploymentManagerImpl.java:186)org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)的.onStartup(AbstractDispatcherServletInitializer.java:71) .servlet.core.DeploymentManagerImpl $ 1.call(DeploymentManagerImpl.java:171)at io.undertow.servlet.core.ServletRequestContextThreadSetupAction $ 1.call(ServletRequestContextThreadSetupAction.java:42)at io.undertow.servlet.core.ContextClassLoaderSetupAction $ 1.call( ContextClassLoaderSetupAction.java:43)在io.undertow.servlet.api.L上的io.undertow.servlet.api.LegacyThreadSetupActionWrapper $ 1.call(LegacyThreadSetupActionWrapper.java:44) egoThreadSetupActionWrapper $ 1.call(LegacyThreadSetupActionWrapper.java:44)at io.undertow.servlet.api.LegacyThreadSetupActionWrapper $ 1.call(LegacyThreadSetupActionWrapper.java:44)at io.undertow.servlet.api.LegacyThreadSetupActionWrapper $ 1.call(LegacyThreadSetupActionWrapper.java:44 )at io.undertow.servlet.api.LegacyThreadSetupActionWrapper $ 1.call(LegacyThreadSetupActionWrapper.java:44)at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:234)
The hightlight of the error is that “无法注册名称为'dispatcher'的servlet . 检查是否有另一个以相同名称注册的servlet . 在org.wildfly.extension.undertow.deployment.UndertowDeploymentService $ 1.run(UndertowDeploymentService.java:85)”
请帮我解决这个问题 . 我在日食上使用WildFly-10 .
2 回答
基本上你扩展
WebMvcConfigurerAdapter
而不继承任何方法(至少在我的4.3.3 Spring版本中) .DispatcherServlet
,你可以将SpringContextConfig1
类添加到根上下文并保持servlet上下文为空:在getRootConfigClasses()
下切换方法getServletConfigClasses()
的主体,反之亦然 - 参见A Bit on ApplicationContext Hierarchies .此外,
DispatcherServlet
映射更可能是/
而不是/home
:我的朋友遇到了同样的问题 . 问题在于没有为该类设置正确的包名称 . AAA包装前清洁项目!!!
这是GitHub上的代码