SpringBoot详细讲解静态资源导入的实现

目录
  • SpringBootWeb开发
    • 1. 静态资源导入
      • webjars
      • 使用自己的静态资源
      • 总结
    • 2.制作特殊的首页
      • 图标转变
  • Thymeleaf模板引擎
    • 引入Thymeleaf
    • 取值
      • 有无转义
      • 循环

SpringBootWeb开发

回顾一下:

springboot帮助我们配置了什么,能不能进行修改,能修改哪些,能否扩展?

  1. xxxAutoConfiguration:向容器中自动配置组件
  2. xxxProperties:自动配置类,装配配置文件中自定义的一些内容

开发要解决的问题:

  1. 导入静态资源
  2. 首页
  3. jsp
  4. 装配扩展springmvc
  5. 增删改查
  6. 拦截器

1. 静态资源导入

先创建一个普通的springboot项目,主需要加入web即可。

我们在进行项目之前首先要确保环境正确,我们先用helloController测试一下。如果能跳转成功则进行接下来的步骤

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "HelloWord";
    }
}

静态资源的映射规则:

springmvc的web配置都在WebMvcAutoConfiguration 这个配置类里面;进去查看我们发现有一个添加资源处理的方法addResourceHandlers我把代码拿了过来。不知道怎么搜的可以看下面

public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
                CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
                if (!registry.hasMappingForPattern("/webjars/**")) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }
                String staticPathPattern = this.mvcProperties.getStaticPathPattern();
                if (!registry.hasMappingForPattern(staticPathPattern)) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }
            }
        }

快速搜索内容:双击Shift键,框中直接搜你想搜的类或者方法。

第一种:使用原本的,也就是第一个if

在里面我们可以看到所有的/webjars/**, 都需要去classpath:/META-INF/resources/webjars/找对应的资源;

webjars

Webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可。

使用SpringBoot需要使用Webjars,我们可以去搜索一下:

网站:https://www.webjars.org 进去直接搜索需要的东西即可

要使用jQuery,我们只要要引入jQuery对应版本的pom依赖即可!

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.4.1</version>
</dependency>

导入完毕之后我们可以查看webjars的目录结构,并且此时可以访问jquery.js文件了。

导入完成后我们进行查看,运行之后输入链接http://localhost:8080/webjars/jquery/3.4.1/jquery.js

使用自己的静态资源

上述是第一种if,那么没找到怎么办呢,就出现了下面的情况

String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));

我们去查看staticPathPattern发现第二种映射规则 :/** , 访问当前的项目任意资源,它会去找 resourceProperties 这个类,

发现里面的有对应的四个位置。ResourceProperties 可以设置和我们静态资源有关的参数;这里面指向了它会去寻找资源的文件夹。

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
    "classpath:/META-INF/resources/",
  "classpath:/resources/",
    "classpath:/static/",
    "classpath:/public/"
};

在这四个目录下的静态资源同样可以被我们识别到

但是会有优先级,resources优先级最高,static其次,public最低

总结

在springboot我们可以使用一下方式处理静态资源

  1. webjars,localhost:8080/webjars/
  2. public,static,/**,resources localhost:8080/

优先级resources优先级最高,static其次,public最低

2.制作特殊的首页

我们什么都不管的时候,访问"localhost:8080"会是默认的页面

而原理也就在下方这个代码中

我们让首页进行改变。需要添加一个静态资源,让首页换一个样子

增加一个界面,重新运行

成功后的结果

这样就是实现了首页界面的定制

欢迎页,静态资源文件夹下的所有 index.html 页面;被 /** 映射。

比如我访问 http://localhost:8080/ ,就会找静态资源文件夹下的 index.html

新建一个 index.html ,在我们上面的3个目录中任意一个;然后访问测试 http://localhost:8080/看结果!

图标转变

这个在新的版本代码已经变成了下图的样子

之前是可以在springboot的配置静态内容位置中找到favicon.ico,它将自动用作应用程序的favicon。图标名字就是favicon.ico

#关闭默认图标
spring.mvc.favicon.enabled=false

然后可以自己换一个图标放在public目录下,清楚缓存,刷新网页就可以了。

Thymeleaf模板引擎

模板引擎的作用就是我们来写一个页面模板,比如有些值呢,是动态的,我们写一些表达式。而这些值,从哪来呢,就是我们在后台封装一些数据。然后把这个模板和这个数据交给我们模板引擎,模板引擎按照我们这个数据帮你把这表达式解析、填充到我们指定的位置,然后把这个数据最终生成一个我们想要的内容给我们写出去,这就是我们这个模板引擎

如果我们没有模板引擎的话,在页面中会提示500

引入Thymeleaf

在项目中加入依赖

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

Thymeleaf 官网:https://www.thymeleaf.org/

Thymeleaf 在Github 的主页:https://github.com/thymeleaf/thymeleaf

Spring官方文档:找到我们对应的版本

https://docs.spring.io/spring-boot/docs/2.3.7.RELEASE/reference/htmlsingle/#using-boot-starter

我们可以有通过上述的页面找到我们需要的依赖,进而复制粘贴即可。

引入之后我们再次运行。nice

注意: 使用Thymeleaf,只需要导入对应的依赖即可。同时我们的html页面试放在我们的templates目录下的。

至于为什么,我们看源码,这段源码在ThymeleafProperties下。

private String prefix = "classpath:/templates/";
private String suffix = ".html";

取值

那么我们应该怎么取值呢

首先在controller下编写代码

@Controller
public class HelloController {
    @RequestMapping("/test")
    public String hello(Model model){
        model.addAttribute("msg","王木木");
        return "test";
    }
}

接下来我们在html页面中编写

因为我们要使用thymeleaf,需要在html文件中导入命名空间的约束。

<html lang="en" xmlns:th="http://www/thymeleaf.org">
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www/thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div th:text="${msg}"></div>
</body>
</html>

成功运行后

这里需要这个的th标签。所有的html元素都科一被thymeleaf替换接管,格式为th:元素名

有无转义

从controller传一段信息

model.addAttribute("msg","<h1>王木木</h1>");

html中使用转义和不转义的情况

<div th:text="${msg}"></div>
<div th:utext="${msg}"></div>

运行结果

循环

同样在controller里传一段信息

model.addAttribute("users", Arrays.asList("wangmumu","王木木"));

接下来在html中进行取值

<h2 th:each="user:${users}" th:text="${user}"></h2>

运行结果

到此这篇关于SpringBoot详细讲解静态资源导入的实现的文章就介绍到这了,更多相关SpringBoot静态资源导入内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot中的静态资源加载顺序优先级

    目录 springboot静态资源加载顺序优先级 看springboot源码里面 springboot静态资源加载规则 一.静态资源映射规则 1.webjars 2.springboot内置默认访问路径 3.首页处理 4.网站图标 springboot静态资源加载顺序优先级 看springboot源码里面 springboot静态资源加载规则 我们经常会使用springboot创建web应用,在springboot中金静态资源是如何存放的呢? 一.静态资源映射规则 我们先创建一个springbo

  • 关于SpringBoot静态资源路径管理问题

    目录 一.默认静态资源路径 二.增加静态资源路径前缀 一.默认静态资源路径 类路径下: static public resources 这几个目录为默认静态资源访问的目录 二.增加静态资源路径前缀 动态资源和静态资源路径重复时会优先访问动态资源,为了避免路径重复,可以为静态资源路径增加前缀 1.目录结构 2.配置文件 spring: mvc: static-path-pattern: /static_path/** 3.访问结果 到此这篇关于SpringBoot静态资源路径管理的文章就介绍到这了

  • Java实现扫雷游戏详细代码讲解

    目录 效果展示 难度选择展示 游戏界面展示 代码展示 主类:GameWin类 底层地图MapBottom类 顶层地图MapTop类 底层数字BottomNum类 初始化地雷BottomRay类 工具GameUtil类 难度选择GameSelect类 项目结构 程序界面布局 总结 大家好!上一期我们使用GUI技术写了一个简单的扫雷小游戏,今天对这个Java应用程序更新迭代,增加了难度选择等功能,修复了已知的几个问题.成为初学者学习的好项目!Java实现扫雷小游戏[完整版] 效果展示 难度选择展示

  • 聊聊springboot静态资源加载的规则

    目录 静态资源映射规则 1.webjars 2.springboot内置默认访问路径 3.首页处理 4.网站图标 我们经常会使用springboot创建web应用,在springboot中金静态资源是如何存放的呢? 静态资源映射规则 我们先创建一个springboot项目.使用https://start.spring.io/idea内置创建一个项目,不多说了. 我们要引入我们前端资源,我们项目中有许多的静态资源,比如css,js等文件,我们以前写 项目与都是自己建立文件夹,自己设计访问路径,但是

  • springboot访问静态资源遇到的坑及解决

    目录 访问静态资源遇到的坑及解决 直接访问静态资源的问题 SpringBoot 默认静态资源访问配置 引入shiro 或 security后的拦截过滤 访问静态资源遇到的坑及解决 开始是以这种结构进行的,结果页面上一篇红,访问的页面是这样的 最终找出来问题,虽然每次调整路径都不对,最终查看多种方法可以看到了: 增加: package com.example.demo.config; import org.springframework.stereotype.Component; import o

  • SpringBoot Web详解静态资源规则与定制化处理

    目录 1.相关概念 2.静态资源目录 3.静态资源访问前缀 4.欢迎页支持 5.自定义favicon 6.源码分析 1.相关概念 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置文件进行修改. 如果想要自己完全控制WebMVC,就需要在@Configuration注解的配置类上增加@EnableWebMvc, 增加该注解以后WebMvcAuto

  • SpringBoot 静态资源导入及首页设置问题

    本节了解一下 SpringBoot 中 Web 开发的静态资源导入和首页设置,对应 SpringBoot-03-Web 项目. 1. 静态资源导入 在 Web 开发过程中,我们需要接触许多的静态资源,如 CSS.JS.图片等:在之前的开发过程中,这些资源都放在 Web 的目录下,用到的时候按照对应路径访问即可.不过在 SpringBoot 项目中,没有了 Web 的目录,那这些静态资源该放到哪里去,又要如何访问呢? 由于是 Web 应用中的配置,所以查看对应的自动配置类 WebMvcAutoCo

  • SpringBoot访问静态资源的配置及顺序说明

    目录 访问静态资源的配置及顺序 1. SpringBoot的默认配置 2. 测试 3.配置 静态资源的配置心得 举例 访问静态资源的配置及顺序 今天在玩SpringBoot的demo的时候,放了张图片在resources目录下,启动区访问的时候,突然好奇是识别哪些文件夹来展示静态资源的, 为什么有时候放的文件夹不能显示,有的却可以. 1. SpringBoot的默认配置 首先我们打开WebMvcAutoConfiguration类, 因为是静态资源的位置, 所以搜索location,找到这一行代

  • SpringBoot详细讲解静态资源导入的实现

    目录 SpringBootWeb开发 1. 静态资源导入 webjars 使用自己的静态资源 总结 2.制作特殊的首页 图标转变 Thymeleaf模板引擎 引入Thymeleaf 取值 有无转义 循环 SpringBootWeb开发 回顾一下: springboot帮助我们配置了什么,能不能进行修改,能修改哪些,能否扩展? xxxAutoConfiguration:向容器中自动配置组件 xxxProperties:自动配置类,装配配置文件中自定义的一些内容 开发要解决的问题: 导入静态资源 首

  • SpringBoot详细讲解视图整合引擎thymeleaf

    目录 1. 支持的视图技术 2. Thymeleaf 2.1 Thymeleaf语法 2.2 标准表达式 1. 变量表达式 ${…} 2. 选择变量表达式 *{…} 3. 消息表达式 #{…} 4. 链接表达式 @{…} 5. 片段表达式 ~{…} 3. 基本使用 3.1 Thymeleaf模板基本配置 3.2 静态资源的访问 3.3 完成数据的页面展示 1. 创建Spring Boot项目 2. 编写配置文件 3. 创建web控制类 4. 创建模板页面并引入静态资源文件 5.效果测试 1. 支

  • springboot项目访问静态资源的配置代码实例

    这篇文章主要介绍了springboot项目访问静态资源的配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这里只是简单记录当上传图片不是放在tomcat其他服务器中时,只是放在磁盘中便可以这样配置,在项目启动后可以访问到磁盘中的资源. @Configuration public class SystemConfigurer implements WebMvcConfigurer { @Value("${jeewx.path.uploa

  • Springboot如何设置静态资源缓存一年

    这篇文章主要介绍了Springboot如何设置静态资源缓存一年,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 由于本人所在项目组,所用的项目是前后端分离的,前端是React 的SPA,每次打包都会新版本的静态文件. 然而,在有些时候,这些静态资源是不变的,故可以将资源缓存至用户本地,提升性能. 写法如下,需要继承WebMvcConfigurerAdapter类,并重写addResourceHandlers方法.就可以告诉浏览器强制缓存 pack

  • springBoot详细讲解使用mybaties案例

    首先创建springBoot项目,jdk选择1.8 然后倒入mybaties的相关依赖 我们用的springBoot,当然spring全家桶里面含有mybaties,所以我们直接使用升级版的mybaties-plus. 引入这3个 lombok省的我每次创建对象,都需要get.set方法,以及toString (IDEA里面也要安装lombok插件->file->setting->plugin->搜索lombok安装,完后重启idea,这样lombok在idea中不报错) myba

  • SpringBoot详细讲解如何创建及刷新Spring容器bean

    目录 一.前期准备 1.1 创建工程 1.2 创建Controller 二.探究过程 2.1 启动类 2.2 SpringApplication 2.3 ApplicationContextFactory 2.4 SpringApplication 2.5 结论 参考视频:https://www.bilibili.com/video/BV1Bq4y1Q7GZ?p=6 通过视频的学习和自身的理解整理出的笔记. 一.前期准备 1.1 创建工程 创建springboot项目,springboot版本为

  • SpringBoot中的静态资源访问的实现

    一.说在前面的话 我们之间介绍过SpringBoot自动配置的原理,基本上是如下: xxxxAutoConfiguration:帮我们给容器中自动配置组件: xxxxProperties:配置类来封装配置文件的内容: 二.静态资源映射规则 1.对哪些目录映射? classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/ /:当前项目的根路径 2.什么意思? 就我们在上面五个目

  • 详解SpringBoot之访问静态资源(webapp...)

    springboot访问静态资源,默认有两个默认目录, 一个是  classpath/static 目录 (src/mian/resource) 一个是 ServletContext 根目录下( src/main/webapp ) 这在里可能有小伙伴对 classpath 不怎么了解,这里简要的介绍下,classpath 即WEB-INF下面的classes目录 ,在springboot项目中可能就是,src/main/resource 目录. 1,classpath 目录下-访问默认文件夹名为

随机推荐