场景
使用 spring boot + html or jsp
组合时 , 目录如下
设置视图代码
@Configuration
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer, ApplicationContextAware {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/html/");
resolver.setSuffix(".html");
registry.viewResolver(resolver);
}
}
但是打成jar包后,访问都是404,经过解压jar包查看,webapp里的文件全没有打包进去,搜索了很多资料,要么说指定spring boot
的打包插件,要么是先解压 再把webapp里面的文件放进去,试了均不靠谱,不过解压再放进去这个可以,但是也太麻烦了把。
冷静思考,为啥webapp文件下没被打包进去
顺着打包的思路,在外面的网站上搜到了一篇blog,发现了一个神奇的东西,就是spring boot + jsp, 可以直接打成一个war包,然后直接java -jar xxx.war
即可,同时jps|html文件也会被打进去,就不会发生文件找不到的情况了,
打包成war的目录结构解压后如下,多了一个WEB-INF,如果指定的是jar,则WEB-INF不会被打包的jar里,少了这么一个,所以用jar执行就会404出错,
在pom文件中指定packaging
直接java -jar o2o.war
即可,
如果想让war丢到tomcat里也可以运行,就在启动类上添加如下代码:
原文blog:https://htr3n.github.io/2018/12/jsp-spring-boot/
注意
不需要改spring-boot-maven-plugin
的版本,有的博客说必须指定为1.4.2啥的~ 试了压根不是这么一回事儿,只要视图配好,项目结构对,直接打包成war运行就行了,说白了就是war会包含WEB-INF
,而jar不会。