找不到带URI的HTTP请求的映射(spring 4.1 annotation配置)

首先,请不要锁定这个post。 我已经阅读了所有问题,但仍然无法解决我的问题。
我正在研究如何在spring上使用注释而不配置xml文件。
我正在坚持这个错误:

在DispatcherServlet中找不到具有URI [/WEB-INF/index.jsp]的HTTP请求的映射,其名称为“dispatcherServlet”

这是项目结构
在此处输入图像描述

这是我的pom.xml

  4.0.0 com.mycompany spring-sample 1.0 war spring-sample  ${project.build.directory}/endorsed UTF-8   org.springframework.boot spring-boot-starter-parent 1.2.0.M2    javax javaee-web-api 7.0 provided   org.springframework spring-context   org.springframework.boot spring-boot-starter-web     spring-milestones Spring Milestones http://repo.spring.io/milestone  false      spring-snapshots http://repo.spring.io/snapshot   spring-milestones http://repo.spring.io/milestone      org.apache.maven.plugins maven-compiler-plugin 3.1  1.7 1.7  ${endorsed.dir}     org.apache.maven.plugins maven-war-plugin 2.3  false    org.apache.maven.plugins maven-dependency-plugin 2.6   validate  copy   ${endorsed.dir} true   javax javaee-endorsed-api 7.0 jar        org.springframework.boot spring-boot-maven-plugin    repackage        

这是配置类:

 @ComponentScan(basePackages = "com.sample.spring") @EnableAutoConfiguration @EnableWebMvc @org.springframework.context.annotation.Configuration public class MainApp extends WebMvcConfigurerAdapter implements WebApplicationInitializer { @Override public void onStartup(ServletContext sc) throws ServletException { // Create the 'root' Spring application context AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(MainApp.class); // Manage the lifecycle of the root application context sc.addListener(new ContextLoaderListener(rootContext)); ServletRegistration.Dynamic registration = sc.addServlet("dispatcher", new DispatcherServlet()); registration.setLoadOnStartup(1); registration.addMapping("/"); } @Bean public ViewResolver configureViewResolver() { InternalResourceViewResolver viewResolve = new InternalResourceViewResolver(); viewResolve.setPrefix("/WEB-INF/"); viewResolve.setSuffix(".jsp"); return viewResolve; } @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping() { return new RequestMappingHandlerMapping(); } @Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter() { return new RequestMappingHandlerAdapter(); } public static void main(String[] args) { SpringApplication.run(MainApp.class, args); } } 

这是控制器:

 @org.springframework.stereotype.Controller public class Controller { @RequestMapping(value="/", method = RequestMethod.GET) public String index(){ return "index"; } } 

index.jsp在WEB-INF文件夹中,web.xml文件中没有任何内容。
我认为到目前为止配置是正确的,因为它可以重定向到/WEB-INF/index.jsp。 但是,我认为我缺少一些配置来使应用程序理解路径。 (/WEB-INF/index.jsp)

鉴于您使用的是Spring Boot,您的配置远比它需要的复杂得多。 Boot将自动为您配置DispatcherServletViewResolverRequestMappingHandlerMappingRequestMappingHandlerAdapter

查看Spring Boot的JSP示例 ,了解您需要的配置。

除了删除几乎所有的手动配置之外,一个关键的区别是你的主应用程序类应该扩展SpringBootServletInitializer而不是直接实现Spring的WebApplicationInitializer 。 这是上述示例中的等价类:

 package sample.jsp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @EnableAutoConfiguration @ComponentScan public class SampleWebJspApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SampleWebJspApplication.class); } public static void main(String[] args) throws Exception { SpringApplication.run(SampleWebJspApplication.class, args); } } 

使用java -jar启动war文件时使用main方法,并且在将war部署到单独的Servlet容器时使用configure方法。

另请注意该示例使用application.properties来配置视图前缀和后缀。