Spring Boot打war包部署如何实现Thymeleaf文件在WEB-INF目录外
首先理清容易混淆的基础规则
Thymeleaf 动态模板默认就是被设计为存放在 WEB-INF 目录下的,不允许浏览器直接通过URL访问,这不是配置或打包的问题。你看到教程里描述的“WEB-INF外可直接访问的HTML”,和Thymeleaf动态模板是两类完全不同的资源,很多教程概念混淆才导致了误解。
两类Web资源的存放映射规则
按照Spring Boot的默认加载逻辑,两类资源的存放路径、打包后位置完全不同:
- 动态渲染类资源:带有
th:标签、需要后端传入业务数据才能生成完整页面的Thymeleaf模板。这类文件需要放在本地项目的src/main/resources/templates目录下,打war包后会自动落到WEB-INF/classes/templates路径,外部无法直接访问,必须通过后端Controller跳转返回视图,这是框架自带的安全设计,目的是避免模板源码泄露。 - 可直接访问的静态资源:不需要动态渲染、可直接通过URL打开的纯静态HTML、JS、CSS、图片、PHP脚本等文件。这类文件需要放在本地项目的
src/main/resources/static目录下,打war包后会自动落到WEB-INF目录外部的静态资源路径,可直接通过域名访问。
当前部署流程的问题修正步骤
- 梳理本地项目的资源目录
- 把纯静态的、不需要后端传数据的HTML、JS、PHP文件,从原来的templates目录移到
src/main/resources/static目录下 - 把带Thymeleaf语法、需要动态渲染的模板留在
src/main/resources/templates目录下
- 把纯静态的、不需要后端传数据的HTML、JS、PHP文件,从原来的templates目录移到
- 修正错误的打包上传操作
- 你目前把生成的war包重新压缩为zip再上传解压的操作,会完全破坏war包的标准目录结构。正确的上传流程是直接把
target目录下生成的iSpringer.war文件,通过cPanel的Java应用管理器上传部署,不要手动解压、不要重新压缩war包 - cPanel的Tomcat运行环境会自动解压war包,生成符合Servlet规范的标准目录结构,不需要人工手动调整目录
- 你目前把生成的war包重新压缩为zip再上传解压的操作,会完全破坏war包的标准目录结构。正确的上传流程是直接把
- 现有配置的校验项
你当前的pom.xml、启动类配置整体符合war部署的要求,只需要确认两个细节:- 不要手动修改Thymeleaf的默认路径配置,保持Spring Boot原生的
classpath:/templates/模板路径、classpath:/static/静态资源路径映射即可 - 确认pom.xml里的
spring-boot-maven-plugin没有配置自定义的资源排除规则,当前默认插件配置会自动把resources目录下的所有文件正确打包
- 不要手动修改Thymeleaf的默认路径配置,保持Spring Boot原生的
正确部署后的目录结构预期
通过cPanel Java应用管理器完成war包部署后,应用的目录结构应该符合Servlet规范:
- 应用根目录(对应项目的访问上下文路径)
WEB-INF/classes/:存放编译后的Java类、配置文件、templates目录下的Thymeleaf模板lib/:存放项目依赖的所有jar包
static/:存放所有可直接访问的静态资源,位于WEB-INF目录外部,可直接通过URL访问
注意:直接把war包丢到public_html目录手动解压的方式,不符合Tomcat的运行规则,Tomcat不会识别手动解压的目录结构,必须通过cPanel提供的Java应用管理入口完成部署。
内容的提问来源于stack exchange,提问作者Murilo de Melo Reis
相关产品推荐
相关产品推荐

