使用静态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
@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,这是一个有效的配置。
也许有人可以解释我为什么?我理解错了吗?
答案 0 :(得分:11)
自动配置在Spring的默认值之外添加了以下功能:
- 静态
index.html
支持。...
如果你想保留Spring Boot MVC功能,你只想添加 额外的MVC配置(拦截器,格式化器,视图 控制器等)您可以添加自己的
@Configuration
类类型WebMvcConfigurerAdapter
,但没有@EnableWebMvc
。如果你愿意的话 提供RequestMappingHandlerMapping
的自定义实例,RequestMappingHandlerAdapter
或ExceptionHandlerExceptionResolver
你 可以声明提供此类的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