首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.IllegalArgumentException:注册名为“dispatcher”的servlet失败。

java.lang.IllegalArgumentException:注册名为“dispatcher”的servlet失败。
EN

Stack Overflow用户
提问于 2016-12-13 14:51:29
回答 2查看 7.4K关注 0票数 0

我的初始化器类

代码语言:javascript
复制
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"};
}

}

配置类

代码语言:javascript
复制
@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;
}

}

控制器

代码语言:javascript
复制
@Controller
public class HomeController {


@RequestMapping(value="/home",method=RequestMethod.GET)
public String home(){
    return "home";
}

}

这是一个非常简单的程序,我编写来测试Spring的JavaConfig,我完全遵循了"Spring“一书中的所有步骤。

当我运行这段代码时,我会得到这个错误

09:41:37,854错误jboss.undertow.deployment.default-server.default-host./spittr: MSC000001:未能在服务jboss.undertow.deployment.default-server.default-host./spittr: java.lang.RuntimeException中启动服务org.jboss.msc.service.fail org.jboss.msc.service.StartException : java.lang.IllegalArgumentException:未能注册名为“dispatcher”的servlet。在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.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)在org.jboss.threads.JBossThread.run(JBossThread.java:320),由: java.lang.RuntimeException: java.lang.IllegalArgumentException:未能注册名为“dispatcher”的servlet。检查是否有另一个servlet以相同的名称注册。在io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:236) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) .6更多的原因是: java.lang.IllegalArgumentException:未能注册名为“dispatcher”的servlet。在org.springframework.util.Assert.notNull(Assert.java:115) at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.registerDispatcherServlet(AbstractDispatcherServletInitializer.java:98) at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.onStartup(AbstractDispatcherServletInitializer.java:71) at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169) at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:186) at io.undertow.servlet.core.DeploymentManagerImpl$1io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) 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) .call(DeploymentManagerImpl.java:171)在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)

错误的最大亮点是,org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85)“未能注册名为‘dispatcher’的servlet。检查是否有另一个servlet以相同的名称注册。”

请帮我解决这个问题。我在月食上使用了WildFly-10。

EN

回答 2

Stack Overflow用户

发布于 2016-12-13 15:12:27

  1. 按照以下方式使用配置类: @ComponentScan(basePackages={"spittr.controllers"}) @Configuration @EnableWebMvc公共类SpringContextConfig1扩展了WebMvcConfigurerAdapter{ @覆盖公共无效configureViewResolvers(ViewResolverRegistry注册表){ InternalResourceViewResolver ivr=new InternalResourceViewResolver();ivr.setPrefix(“/WEB/jsp/”);ivr.setSuffix(".jsp");ivr.setExposeContextBeansAsAttributes(真);registry.viewResolver(ivr);}} 基本上,您是在不继承任何方法的情况下扩展WebMvcConfigurerAdapter的(至少在我的4.3.3Spring版本中)。
  2. 由于这里有一个DispatcherServlet,所以可以将SpringContextConfig1类添加到根上下文中,并将servlet上下文保持为空:将方法getServletConfigClasses()的主体切换到getRootConfigClasses()下面,反之亦然--参见等级制度

此外,DispatcherServlet映射更可能是/而不是/home

代码语言:javascript
复制
protected String[] getServletMappings() {
    return new String[] {"/"};
}
票数 0
EN

Stack Overflow用户

发布于 2018-05-19 02:21:31

我的朋友也遇到了同样的问题。问题是没有为类设置正确的包名。AAAAnd包装前清洁项目!

以下是GitHub上的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41124012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档