EnableWebMvc抛出ServletException:无法解析具有名称的视图

时间:2017-01-09 08:10:48

标签: java spring-mvc spring-boot static-html

使用静态HTML页面玩Spring Boot + MVC,同时注意到这一点:

首先,我有:

索引控制器:

@Controller
public class IndexController {

    @RequestMapping("/")
    public String index() {
        return "index.html";
    }

    @RequestMapping("/{path:[^\\.]+}/**")
    public String forward() {
        return "forward:/";
    }
}

Html文件是:...\src\main\resources\static\index.html

所以当我的主要应用程序类是:

@SpringBootApplication
public class MyApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

一切正常并且在默认路径中:localhost:8080\我得到index.html页面内容

但是如果我使用@EnableWebMvc

注释Application类
@SpringBootApplication
@EnableWebMvc
public class MyApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

我得到例外:javax.servlet.ServletException: Could not resolve view with name 'index.html' in servlet with name 'dispatcherServlet' 但根据this spring doc,这是一个有效的配置。

也许有人可以解释我为什么?我理解错了吗?

3 个答案:

答案 0 :(得分:11)

根据spring-boot's docs

  

自动配置在Spring的默认值之外添加了以下功能:

     
      
  • 静态index.html支持。
  •   
     

...

     

如果你想保留Spring Boot MVC功能,你只想添加   额外的MVC配置(拦截器,格式化器,视图   控制器等)您可以添加自己的@Configuration类类型   WebMvcConfigurerAdapter,但没有 @EnableWebMvc。如果你愿意的话   提供RequestMappingHandlerMapping的自定义实例,   RequestMappingHandlerAdapterExceptionHandlerExceptionResolver你   可以声明提供此类的WebMvcRegistrationsAdapter实例   组件。

因此,通过添加@EnableWebMvc,您只需为您禁用spring-boot自动配置。即静态index.html支持。

答案 1 :(得分:0)

实际上我认为当你选择使用spring boot时,你应该使用spring Boot的默认配置。这意味着您只需编辑文件 application.properties 即可。现在,如果你使用spring mvc,你必须提供自己的servlet。所以我认为混合使用并不是一个好主意。您可以使用spring boot并没有太多的配置,或者您使用spring mvc并进行所有必要的配置。

答案 2 :(得分:0)

根据Spring Boot MVC结构,您应该在templates文件夹中找到您的html文件。然后将显示Spring Boot

src\main\resources\templates\index.html