6

用静态 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页面内容

但是如果我用注释 Application 类@EnableWebMvc

@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,这是一个有效的配置。

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

4

3 回答 3

12

根据spring-boot的文档

自动配置在 Spring 的默认值之上添加了以下特性:

  • 静态index.html支持。

...

如果您想保留 Spring Boot MVC 功能,并且只想添加额外的 MVC 配置(拦截器、格式化程序、视图控制器等),您可以添加自己@Configuration的 type 类 WebMvcConfigurerAdapter,但 @EnableWebMvc添加. 如果您希望提供 的自定义实例RequestMappingHandlerMappingRequestMappingHandlerAdapter或者ExceptionHandlerExceptionResolver您可以声明一个WebMvcRegistrationsAdapter提供此类组件的实例。

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

于 2017-01-09T08:21:13.837 回答
0

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

于 2017-01-09T08:47:30.057 回答
0

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

src\main\resources\templates\index.html
于 2017-01-09T09:58:53.913 回答