没有web.xml,无法启动spring mvc 4应用程序

时间:2014-12-14 10:58:18

标签: spring spring-mvc web.xml servlet-3.0

我正在尝试使用spring mvc 4仅使用web.xml注释来部署@Configuration网络应用程序而不使用public class WebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { WebApplicationContext context = getContext(); servletContext.addListener(new ContextLoaderListener(context)); ServletRegistration.Dynamic dispatcher = servletContext.addServlet( "DispatcherServlet", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("*.html"); } private AnnotationConfigWebApplicationContext getContext() { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("ge.dm.icmc.config.WebConfig"); return context; } 文件。 我有

WebConfig.java

}

和我的@Configuration @EnableWebMvc @ComponentScan(basePackages="ge.dm.icmc") public class WebConfig{ } 类看起来像:

{{1}}

但是当我尝试启动应用程序时,我会在日志中看到:

  

14:49:12.275 [localhost-startStop-1] DEBUG o.s.w.c.s.AnnotationConfigWebApplicationContext - 无法为config location []加载类 - 尝试打包扫描。 java.lang.ClassNotFoundException:

如果我尝试添加web.xml文件,则会正常启动。

1 个答案:

答案 0 :(得分:7)

您使用的方法setConfigLocation在这种情况下是错误的。您应该使用register方法。

private AnnotationConfigWebApplicationContext getContext() {
    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
    context.register(ge.dm.icmc.config.WebConfig.class);
    return context;
}

然而,我没有实现WebApplicationInitializer,而是强烈建议使用Spring的一个便捷类。在你的情况下,AbstractAnnotationConfigDispatcherServletInitializer会派上用场。

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    protected Class<?>[] getRootConfigClasses() { return null;}

    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[] {"*.html"}; 
    }
}