SpringBoot中配置Web静态资源路径——详解
介绍: 本⽂章主要针对web项⽬中的两个问题进⾏详细解析介绍:1- 页⾯跳转404,即controller转发⽆法跳转页⾯问题;2- 静态资源⽂件路径问题。
项⽬⼯具: Intelij Idea, JDK1.8, SpringBoot 2.1.3
正⽂:
准备⼯作:通过Idea创建⼀个SpringBoot-web项⽬,此过程不做赘述,创建完成后项⽬结构如下图:
1- 创建⼀个controller代码如下:
ller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DemoController {
@RequestMapping("demo")
public String demo() {
System.out.println("进⼊controller中的demo⽅法!");
/*注意:这⾥返回值有后缀名,如何省略后缀名后⾯有介绍*/
return "myPage.html";
}
}
2- 在 web-practice\src\main\resources\templates\路径下创建html页⾯,取名“myPage”,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Welcome to myPage!</h1>
</body>
</html>
此时运⾏项⽬,会发现报404问题,同时查看Idea控制台,打印显⽰进⼊controller⽅法。
sources.static-location登场
打开l⽂件,进⾏如下配置(默认项⽬中配置⽂件为application.properties,修改后缀名即可,因我个⼈喜欢使⽤yml⽂件),重新运⾏项⽬并访问地址:localhost:8080/demo 会发现页⾯跳转成功。
spring:
resources:
static-locations: classpath:templates/
原因分析:sources.static-location参数指定了Spring Boot-web项⽬中静态⽂件存放地址,该参数默认设置为:
classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,servlet context:/,可以发现这些地址中并没有/templates这个地址。当配置⽂件中配置此项后,默认配置失效,使⽤⾃定义设置。这⾥涉及到两个概念:
(1)classpath: 通俗来讲classpath对应的项⽬中:web-practice\src\main\resources ⽂件⽬录。如:“classpath: templates/”即是将resources⽬录下的templates⽂件夹设置为静态⽂件⽬录。更深⼀步讲classpath路径为:⽂件编译后在target/classes⽬录下的⽂件。
(2) 静态⽂件⽬录:通俗理解为存放包括 :.html;.jsp;CSS;js;图⽚;⽂本⽂件等类型⽂件的⽬录。这些⽂件都可以通过浏览器url 进⾏访问。同时controller中转发的⽂件⽬录也必须被设置为静态⽂件⽬录,这就是增加了该参数以后就可以正常访问的原因。
4- spring.mvc.view.prefix/suffix登场
现在页⾯已经可以正常转发,我们有了新的想法,我希望在templates⽂件夹中创建⼀个html⽂件夹⽤
于专门存放页⾯⽂件,另外在每次使⽤controller进⾏转发是都要标明后缀名.html,这很⿇烦,有没有统⼀处理的⽅案,答案当然是有!
修改后项⽬结构如下:
controller⽅法修改如下:
ller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DemoController {
@RequestMapping("demo")
public String demo() {
System.out.println("进⼊controller中的demo⽅法!");
//如果不在l⽂件中添加前后缀信息,此处返回语句为 //return "html/myPage.html"
return "myPage";
}
}
spring:
resources:
static-locations: classpath:templates/
mvc:
view:
prefix: html/
suffix: .html
再次运⾏项⽬即可。通过测试得知prefix/suffix是在controller返回语句前后添加前后缀信息。
5- 配置多个静态⽂件路径:当我们在页⾯中添加图⽚,并且将图⽚存放在resources/static/pic路径下,如下图所⽰:
修改myPage.html如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
springboot结构<body>
<h1>Welcome to myPage!</h1>
<img src="/pic/pig.jpg" height="1920" width="1080"/></body>
</html>
之后重启项⽬,会发现图⽚并没有成功加载!如下:
原因是之前我们配置的静态⽂件⽬录只包含classpath:templates/,static⽬录还不是合法的存储静态⽂件⽬录,我们只需要在后⾯追加上static⽬录即可。修改l⽂件如下:
spring:
resources:
static-locations: classpath:templates/,classpath:static/
mvc:
view:
prefix: html/
suffix: .html
修改后重启项⽬刷新页⾯,⼀切正常!
6- 关于spring.mvc.view.static-path-pattern
该参数⽤来规定访问静态⽂件的路径格式,该参数默认值为:“/**” 表⽰所有路径,现将该参数修改为:“/static/**” 观察现象
spring:
resources:
static-locations: classpath:templates/,classpath:static/
mvc:
view:
prefix: html/
suffix: .html
static-path-pattern: /static/**
重启项⽬,发现页⾯不能加载404错误!
要解决该问题需要修改两个地⽅:
(1) 修改spring.mvc.view.prefix参数值为:static/html/ ;该修改为了controller转发时可以到⽂件路径;
(2)修改myPage页⾯的图⽚地址如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论