springboot项目jsp springBoot项目页面template应该放在哪里_html




spring boot访问静态资源:

    1. static目录用来存放js、css、图片等静态资源. . .

    2. templates目录用来存放html页面. . .

springboot项目jsp springBoot项目页面template应该放在哪里_spring_02



spring boot默认将/**静态资源访问映射到以下目录:

  • classpath:/static
  • classpath:/public
  • classpath:/resources
  • classpath:/META-INF/resources

这四个目录的访问优先级:META-INF/resources > resources > static > public

  • 即这四个目录中存在同样的静态资源时,spring boot会优先访问META-INF/resources目录中的静态资源

PS: 在创建META-INF/resources目录时,需要一层层的创建(即:先创建META-INF目录,再创建resources目录),不要META-INF.resources这样一次性创建。虽然最终显示是一样的,但这样创建默认为是一个META-INF.resources目录,而不是META-INF/resources目录

PS: 一般使用spring boot默认为我们创建的static目录来放置css、图片、js等静态资源即可,无需额外创建META-INF/resources、resources目录。

PS: html页面不建议放在static目录下,而是放在templates目录中。

springboot项目jsp springBoot项目页面template应该放在哪里_springboot项目jsp_03



springboot项目jsp springBoot项目页面template应该放在哪里_springboot项目jsp_04


🆗,前面说了,html页面放置在templates目录下,那么我们该怎么访问呢?

是不是像访问static目录下的静态资源一样,直接访问即可,我们来试一下!

springboot项目jsp springBoot项目页面template应该放在哪里_java_05


显而易见,templates目录下的页面文件是不能直接访问的,需要通过Controller进行访问(好像是websecurity权限控制的原因)。与我们在做ssm项目时候的WEB-INF目录一样,需要通过服务器内部进行访问,即走控制器–服务–视图解析器这个流程。

要访问templates目录下的html页面,还需要引入下面这个模板引擎,然后才能通过Controller来进行访问

<!--访问静态资源-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>




springboot项目jsp springBoot项目页面template应该放在哪里_spring_06


🆗,下面我们来进行一下测试

springboot项目jsp springBoot项目页面template应该放在哪里_springboot项目jsp_07

home.html

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!--引用外部css样式-->
    <link rel="stylesheet" href="../css/home.css">
    <title></title>
</head>
<body>
    <div class="content">
        <span>好好学习,天天向上!</span>
        <img src="../image/dayan.png" width="10%">
    </div>
</body>
</html>

home.css

.content{
    color: red;
    font-family: 楷体;
    font-size: 25px;
}
.content > img{
    width: 10%;
}

控制器

package com.cd.o2o2.web.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller /*注意不要用@RestController,因为它返回的是json数据格式,而我们要的是html页面*/
public class HomeController {

    @RequestMapping("/home")
    public String home(){
        return "home";
    }

}

效果

springboot项目jsp springBoot项目页面template应该放在哪里_java_08



引入thymeleaf模板引擎后,成功通过控制器访问到了templates目录下的html静态页面,并且也成功访问到了static目录下的css、图片等静态资源。




springboot项目jsp springBoot项目页面template应该放在哪里_spring_09


总结:  

1. 使用spring initializr快速搭建spring boot项目,会自动在main/resources目录下创建static和templates目录。

2. static目录用来放置css、图片、js等静态资源。templates目录用来放置html静态页面。

3. static目录下的静态资源可以直接访问。但templates目录(被websecurity权限控制)下的html静态页面不能直接访问,需要在pom文件中添加thymeleaf模板引擎,然后通过controller控制器来进行访问。

4. 为什么要将html静态页面放置在templates目录?

  • templates目录下的html页面不能直接访问,需要通过服务器内部进行访问,可以避免无权限的用户访问到隐私页面,造成信息泄露。

5. 更多thymeleaf模板配置可在yml或properties配置文件中配置。(粒如默认访问路径为classpath:/templates/,你可以改成classpath:/static/,但不建议哈)

spring:
  #thymeleaf模板配置
  thymeleaf:
    cache: false                   # 这个开发配置为false,避免改了模板还要重启服务器
    prefix: classpath:/templates/  #模板文件视图前缀,默认是classpath:/templates/,可不用配置
    suffix: .html                  #模板文件视图后缀,默认是.html,可不用配置
    check-template-location: true  #检查模板位置,可不用配置
    encoding: utf-8                #编码字符集,默认为utf-8,可不用配置
    mode: HTML                     #模板的模式,默认为HTML,可不用配置
    servlet:
      content-type: text/html	   #模板的内容类型,默认为text/html,可不用配置