springboot中static文件夹和templates文件夹的区别(进行页面跳转后css样式丢失的解决办法)


本来springboot就刚学了点皮毛,如今被赶鸭子上架做一个大创项目,也是遇到了很多困难,其中碰到的就是关于static和templates文件夹存放静态资源,然后进行跳转后,发现只有html代码了,查看了许多大佬的博客也是耗费了很长时间解决,下面是我的一些体会。

总体认识

首先有个大概的了解,SpringBoot项目创建后,resources下默认有两个文件夹static和template.一般static存放静态资源,template存放动态资源.

static目录

static目录是用来保存静态文件的目录, 比如JS, CSS样式, 图片等, 是不需要服务器进行数据绑定的页面.

此文件下都是静态资源文件,最主要的一个特点,可以通过浏览器地址栏,直接访问;

templates目录

template目录是用来保存动态模版文件的目录, 比如Freemarker, JSP, Thymeleaf等需要服务器动态渲染数据的文件.
由于页面渲染需要服务器中的数据, 所以该文件必须经过Controller控制器进行Model数据绑定后, 由服务器进行跳转. 所以直接访问是无意义的, 也访问不到.
模板文件夹,该文件下的页面不能通过地址栏地址直接访问,需要经过Controller类来访问,需要在application.properties中配置对应的模板引擎

测试

在没有导入thymeleaf模板情况下

在static和templates目录下同时建立两个html,取相同的名字dyk.html,内容不一样,再在templates下创建一个dyk1.html
在这里插入图片描述

static下的dyk.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>static文件夹</title>
</head>
<body>
<h1>static</h1>
</body>
</html>

templates下的dyk.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>templates</title>
</head>
<body>
<h1>templates</h1>
</body>
</html>

templates下的dyk1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>templatesdyk1111111</h1>
</body>
</html>

启动springboot,访问

结果

在这里插入图片描述
在这里插入图片描述

可以发现static目录下的dyk.html被访问了,而访问dyk1.html直接就404了

导入thymeleaf模板情况下

依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

再次直接在浏览器地址栏输入dyk.html,dyk1.html

在这里插入图片描述
在这里插入图片描述
发现会和没加thymeleaf模板情况下一样,但是我们接下来通过接口来测试

没有使用thymeleaf模板情况下接口跳转

package com.blb.test.Controller;

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

@Controller
public class TestController {
    @RequestMapping("/dyk")
    public String test(){
        return "dyk.html";
    }

    @RequestMapping("/dyk1")
    public String test1(){
        return "dyk1.html";
    }

}

访问/dyk
在这里插入图片描述
访问/dyk1
在这里插入图片描述
可见在没使用thymeleaf模板情况还是只能访问static目录下的

使用了thymeleaf模板情况下接口跳转

package com.blb.test.Controller;

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

@Controller
public class TestController {
    @RequestMapping("/dyk")
    public String test(){
        return "dyk";
    }

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

}

在浏览器地址访问dyk结果如下
在这里插入图片描述
这样就发现区别了默认访问的templates下的dyk.html

总结

静态页面的return默认是跳转到/static/目录下,当在pom.xml中引入了thymeleaf
组件,动态跳转会覆盖默认的静态跳转,默认就会跳转到/templates/下,注意看两
者return代码也有区别,动态没有html后缀

然后再来看下我这个项目遇到的问题

css样式丢失的问题

在这里插入图片描述

首先是资源的路径问题

一开始把代码粘进idea的时候,它默认帮我们全部改成了相对路径
例如

<script src="js/flexible.js"></script>
    <script src="../static/js/echarts.min.js"></script>
    <!-- 先引入jquery -->
    <script src="../static/js/jquery.js"></script>
    <!-- 必须先引入china.js 这个文件 因为中国地图需要 -->
    <script src="../static/js/china.js"></script>
    <script src="../static/js/index.js"></script>

这样是错误的

<link rel="stylesheet" href="css/index.css" />


<script src="js/flexible.js"></script>
    <script src="js/echarts.min.js"></script>
    <!-- 先引入jquery -->
    <script src="js/jquery.js"></script>
    <!-- 必须先引入china.js 这个文件 因为中国地图需要 -->
    <script src="js/china.js"></script>
    <script src="js/index.js"></script>

后面这个才是正确的,直接从static目录下的下一级文件夹开始写起即可

SpringBoot框架是约定大于高于配置,约定静态资源的路径要在static目录下,因此我们最开始的根路径要从static目录下的第一个目录开始写。

其次@RequestMapping()导致的问题

package com.blb.dachuang.controller;

import com.blb.dachuang.entity.User;
import com.blb.dachuang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;

    @PostMapping("/login")
    public String login(){
        return "history";
    }

    @PostMapping("/regist")
    public String regist(User user){
        return userService.register(user);
    }
}

在这里插入图片描述

在这里插入图片描述
因为类上加了这个@RequestMapping("/user")后发现,它在资源路径上也加了这个路径导致资源请求失败,然后导致资源失败

因此把这个删了之后
在这里插入图片描述
资源就好了全部请求到了,样式也都有了

模板页面之间的跳转

一开始用a标签跳转时
错误的使用

<li><a href="history.html">历史数据</a></li>

在这里插入图片描述

在这里插入图片描述

这个只有在html放在静态资源里面能跳
而在templates再写普通的a标签就会报错

<ul class="res">
			 <li><a th:href="@{/toIndexPage}" class="active">主页</a></li>
			<li><a th:href="@{/toHistoryPage}">历史数据</a></li>
			<li><a th:href="@{/toCurrentPage}">实时数据</a></li>
			<li><a th:href="@{/toLoginPage}">登录</a> | <a th:href="@{/toRegisterPage}">注册</a></li>
package com.blb.dachuang.controller;

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

@Controller
public class MainController {
    @RequestMapping("/toHistoryPage")
    public String toHistoryPage(){

            return "history";

    }

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

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


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

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

这些都是自己的一些心得体会可能有不正确的地方,大家可以提出来

### 回答1: Spring Boot中的static文件夹是用于存放静态资源文件的文件夹。这些静态资源文件可以是图片、CSSJavaScript等文件,它们可以直接被浏览器访问。在Spring Boot应用中,可以通过访问“/static/”路径来访问static文件夹中的静态资源文件。同时,Spring Boot也支持自定义静态资源文件夹的路径。 ### 回答2: Spring Boot是一个基于Spring框架的开发平台,可以大大简化Spring应用的配置部署。在Spring Boot应用中,静态资源文件通常放置于“static文件夹中。 首先,我们需要在项目中新建“static文件夹,并将所需的静态资源文件放置其中,例如图片、CSSJavaScript文件等等。 接下来,当我们访问这些静态资源文件时,Spring Boot会自动映射到这个“static文件夹中。例如,我们访问“/img/logo.png”时,Spring Boot会自动查找项目的“static文件夹,并返回“/static/img/logo.png”路径下的图片文件。 在Spring Boot中,我们可以通过@Configuration注解+addResourceHandlers方法来自定义静态资源的位置。例如,我们可以将静态资源文件放置在外部磁盘上,并在应用中进行配置。 总之,Spring Boot的静态资源文件夹static”可以方便地管理部署静态资源文件,让我们的开发工作更加高效便捷。 ### 回答3: Spring Boot 是一个流行的 Java 开发框架,它为开发者提供了一种简便的方式来构建 Web 应用程序。在 Spring Boot 中,static 文件夹是用于存储静态资源的目录。在 Web 应用程序中,有很多静态资源例如 HTML、CSSJavaScript、图片等等,这些静态资源需要以某种方式被加载到应用程序中。而 static 文件夹就是 Spring Boot 提供的一种加载静态资源的方式。 在 Spring Boot 中,任何位于 static 文件夹下的静态资源都可以通过直接访问 URL 来访问。举例来说,如果您的静态资源位于 static/css/example.css,则可以通过访问 http://localhost:8080/css/example.css来加载这个样式表。 Spring Boot 还支持在 static 文件夹下创建子目录来组织静态资源。例如,您可以在 static 文件夹下创建一个 images 目录,将所有的图片资源都存储到这个目录内。这样做的好处是方便管理组织静态资源。 另外,Spring Boot 也提供了许多外部的静态资源目录,这些目录中包含了很多常用的、开源的静态资源,例如 Bootstrap、jQuery 等等。要使用这些资源,只需要将它们加入到 pom.xml 文件中,Spring Boot 就会自动将它们添加到应用程序的 classpath 中。 总之,static 文件夹Spring Boot 中用于存储静态资源的目录,它提供了一种简单、方便的方式来加载、管理、组织静态资源。无论您是一名 Java 开发者还是 Web 开发者,都应该掌握 Spring Boot 的 static 文件夹的使用方法。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值