Web开发静态资源处理---SpringBoot

Web开发静态资源处理

使用SpringBoot的步骤:

1、创建一个SpringBoot应用,选择我们需要的模块,SpringBoot就会默认将我们的需要的模块自动配置好

2、手动在配置文件中配置部分配置项目就可以运行起来了

3、专注编写业务代码,不需要考虑以前那样一大堆的配置了。

要熟悉掌握开发,之前学习的自动配置的原理一定要搞明白!

比如SpringBoot到底帮我们配置了什么?我们能不能修改?我们能修改哪些配置?我们能不能扩展?

  • 向容器中自动配置组件 :*** Autoconfiguration
  • 自动配置类,封装配置文件的内容:***Properties

没事就找找类,看看自动装配原理!

第一种静态资源映射规则

首先,我们搭建一个普通的SpringBoot项目,回顾一下HelloWorld程序!

写请求非常简单,那我们要引入我们前端资源,我们项目中有许多的静态资源,比如css,js等文件,这个SpringBoot怎么处理呢?

如果我们是一个web应用,我们的main下会有一个webapp,我们以前都是将所有的页面导在这里面的,对吧!但是我们现在的pom呢,打包方式是为jar的方式,那么这种方式SpringBoot能不能来给我们写页面呢?当然是可以的,但是SpringBoot对于静态资源放置的位置,是有规定的!

我们先来聊聊这个静态资源映射规则:

SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 这个配置类里面;

我们可以去看看 WebMvcAutoConfigurationAdapter 中有很多配置方法;

有一个方法:addResourceHandlers 添加资源处理

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.isAddMappings()) {// 已禁用默认资源处理logger.debug("Default resource handling disabled");return;}// 缓存控制Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();// webjars 配置if (!registry.hasMappingForPattern("/webjars/**")) {customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}// 静态资源配置String staticPathPattern = this.mvcProperties.getStaticPathPattern();if (!registry.hasMappingForPattern(staticPathPattern)) {customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));}
}

读一下源代码:比如所有的 /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.5.1</version></dependency>

导入完毕,查看webjars目录结构,并访问Jquery.js文件!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MeVua5FK-1610005795544)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20210107152253069.png)]

第二种静态资源映射规则

那我们项目中要是使用自己的静态资源该怎么导入呢?我们看下一行代码;

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

// 进入方法
public String[] getStaticLocations() {    return this.staticLocations;}
// 找到对应的值
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
// 找到路径
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {     "classpath:/META-INF/resources/",  "classpath:/resources/",     "classpath:/static/",     "classpath:/public/" };

ResourceProperties 可以设置和我们静态资源有关的参数;这里面指向了它会去寻找资源的文件夹,即上面数组的内容。

所以得出结论,以下四个目录存放的静态资源可以被我们识别:

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

优先级

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bm1onWjE-1610005795546)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20210107154153523.png)]

我们可以在resources根目录下新建对应的文件夹,都可以存放我们的静态文件;

比如我们访问 http://localhost:8080/1.js , 他就会去这些文件夹中寻找对应的静态资源文件;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm执行linux 指令,Linux逻辑卷快照及ssm的使用

Linux逻辑卷快照及ssm的使用理论部分&#xff1a;逻辑卷管理(LVM)提供了为任何逻辑卷作一个快照的功能,目的是在一致的状态下来得到一个分区的备份.因为在备份过程中,应用程序可能访问一个分区的文件或者数据库.一些文件可能在一个状态被备份&#xff0c;而后面的文件可能在一个…

import javax.servlet.ServletRequest 关于IDEA javax.servlet.http.HttpServletRequest 不存在 解决方案

https://blog.csdn.net/a290450134/article/details/80964726 关于IDEA javax.servlet.http.HttpServletRequest; 不存在 解决方案 渊丹 2018-07-09 08:32:08 16576 收藏 8 分类专栏&#xff1a; 学习笔记 工具配置 版权 昨天从eclipse导入了一个web项目到idea&…

centos 7 部署 dotnetcore+Angular2 实践

1.准备 服务器: 腾讯云主机(Centos 7.1) http://www.qcloud.com/ 项目:aspnetcoreangular2开源项目模版 https://www.npmjs.com/package/generator-aspnetcore-angular2 该项目使用webpack 打包Angular2, 内网涉及到npm请使用tnpm 2.环境安装 (1)安装dotnetcore https://www.mi…

java.nio.ByteBuffer用法小结

转载自 java.nio.ByteBuffer用法小结 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,…

Python函数之计算规则图形的面积

来个直接的吧&#xff0c;看代码; #codingutf-8 from __future__ import unicode_literals import sys reload(sys) sys.setdefaultencoding(utf-8)#圆形 def yuan():rinput("请输入圆的半径:".decode(utf-8).encode(gbk))print 圆的面积是&#xff1a;,return 3.14*…

Thymeleaf模板引擎---SpringBoot

Thymeleaf模板引擎 前端交给我们的页面&#xff0c;是html页面。如果是我们以前开发&#xff0c;我们需要把他们转成jsp页面&#xff0c;jsp好处就是当我们查出一些数据转发到JSP页面以后&#xff0c;我们可以用jsp轻松实现数据的显示&#xff0c;及交互等。 jsp支持非常强大…

FinTech浪潮已到,五大金融场景将迎变革

FinTech是FinanceTechnology的缩写&#xff0c;可译为“金融科技”&#xff0c;与“互联网金融”一词相比&#xff0c;它更能突出科技的重要性。FinTech所带来的&#xff0c;不仅仅是升级金融领域的各种服务&#xff0c;而是一场革命&#xff0c;是金融领域的颠覆性未来。 FinT…

linux下q和q 的区别,linux命令中q、wq、q!的区别

Linux中没这个命令&#xff1b;只是在vi中有这个指令&#xff1b;q表示退出&#xff1b;w表示保存退出&#xff1b;q!表示强制退出。linux命令是对Linux系统进行管理的命令&#xff0c;对于Linux系统来说&#xff0c;无论是中央处理器、内存、磁盘驱动器、键盘、鼠标&#xff0…

spingmvc 通过xml配置redis jedispol 有密码 通过xml配置redis中的 jedispool(有密码)

https://blog.csdn.net/programmer_hard/article/details/103700334 通过xml配置redis中的 jedispool(有密码) programmer_hard 2019-12-25 15:55:16 209 收藏 分类专栏&#xff1a; java 版权 从git上拉了个项目一直报错, 看了下原因是因为redis一直没连接上. 于是看了下…

常用的字符串加密解密工具类

提前声明一下:此工具类忘记出处了&#xff0c;很抱歉&#xff0c;如果原创遇上了我立马上您的链接&#xff1a; 加密解密的工具类DataEncryptUtil&#xff1a; package org.util;import java.security.MessageDigest; import javax.crypto.KeyGenerator; import javax.cryp…

深入Java集合学习系列:LinkedHashSet的实现原理

转载自 深入Java集合学习系列&#xff1a;LinkedHashSet的实现原理 1. LinkedHashSet概述&#xff1a; LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于&#xff0c;后者维护着一个运行于所有条目的双重链接列表。此链接…

MVC自动配置原理---SpringBoot

MVC自动配置原理 官网阅读 在进行项目编写前&#xff0c;我们还需要知道一个东西&#xff0c;就是SpringBoot对我们的SpringMVC还做了哪些配置&#xff0c;包括如何扩展&#xff0c;如何定制。 只有把这些都搞清楚了&#xff0c;我们在之后使用才会更加得心应手。途径一&…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息

easyui是jquery中很强大的插件&#xff0c;我们开发人员经常会遇到比较复杂的布局&#xff0c;或者在实现某个功能的时候要写好多的代码&#xff0c;比如说分页&#xff0c;那么easyui的datagrid就把他给代替了&#xff0c;现在我简要的分享几个案例。 我们先创建一个员工的实体…

idea合并分支 idea git 合并分支

当前在dev上面 将dev_yjb合并到dev上面 idea git 合并分支 awesome_go 2018-07-12 16:22:20 50149 收藏 52 分类专栏&#xff1a; git idea git的使用&#xff08;四&#xff09;git建立分支与合并分支 作者&#xff1a;马育民 • 2017-11-10 17:05 • 阅读&#xff1a;10…

.NET Core New csproj 如何发布可执行文件

一、前言 .NET工具链在最新的Preview3版本中&#xff0c;引入了新的MSBuild项目系统&#xff0c;项目文件又回归了.csproj的XML文件来管理&#xff0c;项目文件、包引用、程序集引用、.NET Core工具集、发布内容定义等内容。本文主要将主要讨论&#xff0c;如何在新的项目系统中…

xshell linux cmd命令大全,Linux(Xshell)命令大全

对Linux的操作经常是使用Xshell工具&#xff0c;这里特地整理了一些Linux比较常用的快捷键和命令&#xff0c;分享给大家&#xff0c;希望对大家有所帮助^ _ ^一、Linux常用快捷键Ctrl Z &#xff1a;退出Ctrl insert &#xff1a;复制Shift insert &#xff1a;粘贴Tab &am…

java.util.Stack类简介

转载自 java.util.Stack类简介 Stack是一个后进先出&#xff08;last in first out&#xff0c;LIFO&#xff09;的堆栈&#xff0c;在Vector类的基础上扩展5个方法而来 Deque&#xff08;双端队列&#xff09;比起Stack具有更好的完整性和一致性&#xff0c;应该被优先使用…

作为 IT 行业的过来人,你有什么话想对后辈说的?2

1 本人本硕机械工程&#xff0c;目前就职于阿里巴巴淘宝无线事业群&#xff0c;摸爬滚打三年还是能给大家提供点建议。 1、至少每周坚持复盘。这是最重要的习惯&#xff0c;可能大家在学校都有这种印象&#xff0c;明明一本书看过/一道题做过&#xff0c;重新复习的时候感觉什…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息

现在请大家看看Dept的实体类和对应的映射信息&#xff1a; Dept实体类 package org.entity;import java.util.HashSet; import java.util.Set;/*** Dept entity. author MyEclipse Persistence Tools*/public class Dept implements java.io.Serializable {// Fieldsprivate I…

.NET Core 首例 Office 开源跨平台组件(NPOI Core)

前言 最近项目中&#xff0c;需要使用到 Excel 导出&#xff0c;找了一圈发现没有适用于 .NET Core的&#xff0c;不依赖Office和操作系统限制的 Office 组件&#xff0c;于是萌生了把 NPOI 适配并移植到 .NET Core 的想法。 NPOI 的介绍不多说了&#xff0c;不了解的可以看一下…