springboot 工程
目录结构
├─static
├─css
└─js
└─templates
templates 模板文件目录 thymeleaf/freemarker
springboot查找静态资源的相关配置项:
# 应用上下文配置
server.servlet.context-path=/myprojectname
# 默认配置会自动在 /public /static /resources 目录寻找静态资源, 故不需要 /static 等前缀
spring.mvc.static-path-pattern=/**
# SpringMvc(ModelAndView) 视图前缀 prefix/xxx/xxx.html, 可不设,如果static目录下有以工程名命名的文件夹,则可以设置(如: /static/project/css)
spring.mvc.view.prefix=${server.servlet.context-path}
html 引用静态文件
```
<link href="/myprojectname/css/bootstrap.css" rel="stylesheet">
<script src="/myprojectname/js/jquery.js">
```
静态资源404问题总结
- 若设置 server.servlet.context-path=/myprojectname 则每个静态资源都需要加上该值, 否则会出现404的问题
<link href="/myprojectname/css/bootstrap.css" rel="stylesheet">
- ./ 和 / 的区别
- ./ 相对路径, 会动态匹配当前请求的路径作为前缀(如: 若Controller 的 RequestMapping("/login")):
则实际请求路径为 http://ip:port/login/css/bootstrap.css, 很明显不可能每个页面都有bootstrap.css, 所以就会出现404
(换句话说: 请求地址"http://ip:port/login/login.html", 则login.html引入的<link href="./css/bootstrap.css"> 的实际请求路径为http://ip:port/login/css/bootstrap.css) - /url 绝对路径: 实际请求路径 http://ip:port/css/bootstrap.css, 若设置 server.servlet.context-path, 依然报404
如果每个 Controller 都没有 RequestMapping 则html中可以使用 ./ , 但这样不利用业务模块划分.
- ./ 相对路径, 会动态匹配当前请求的路径作为前缀(如: 若Controller 的 RequestMapping("/login")):