本篇博文目录:

  • 一.Web静态资源处理
    • 1. 默认静态资源访问路径
    • 2. 第一种静态资源映射规则
    • 3. 第二种静态资源映射规则
    • 4. 第三种自定义静态资源路径
  • 二.首页处理
  • 三.网站图标
    • 1.什么是网站图标
    • 2.自定义网站图标
      • (1)首先先生成IOC图标(网站图标名为:favicon.ico)
      • (2) 将favicon.ico放在static文件下
      • (3) 关闭默认图标
      • (4) 解决无法加载favicon.ico问题

一.Web静态资源处理

1. 默认静态资源访问路径

打开IDEA,新建一个SpringBoot项目,导入Web依赖,删除没有必要部分创建之后的项目结构如下:

在SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 这个配置类里面,我们看看这个配置的源代码,键盘按下ctrl+shift+T,输入WebMvcAutoConfiguration


在这个类中有一个addResourceHandlers方法中文意思就是添加资源处理集,具体如下:

先看第一行if语句代码,如果isAddMappings为false,就进入if语句中执行debug打印 "Default resource handling disabled" ,然后return。

将鼠标放在isAddMappings()方法上按ctrl+鼠标左键,跳转到该方法源码:
(从源码可知isAddMappings()方法其实就是返回一个addMappings变量,并且该变量存放在WebProperties类中)

在WebProperties类中100行,从addMappings上面的注释我们可知该变量的含义就是是否启用默认资源处理,默认true(是),如果没有启用就不执行下面的代码,意思就是不添加任何外部资源映射!

在88~95行位置,我们可以发现staticLocations这个就是静态资源的位置集合,初始值为CLASSPATH_RESOURCE_LOCATIONS

CLASSPATH_RESOURCE_LOCATIONS就是默认的静态资源地址(Locations of static resources. Defaults to classpath:[/META-INF/resources/, /resources/, /static/, /public/].),默认地址如下:

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

我们在resources文件中分别创建/META-INF/resources/,resources和public文件(static已经有了就无需再创建),并分别在各个文件中创建一个index.html文件。

/META-INF/resources/中的index.html:

resources中的index.html:

public中的index.html:

static中的index.html:

运行一下我们的Web程序(访问地址为:http://localhost:8089/index.html):

备注:端口这里我设置的是8089

然后我们将/META-INF/resources/中的index.html删掉,再次运行:

我们再将resources中的index.html删除掉再次运行:

我们再将static中的index.html删除掉再次运行:

从上面的操作可知访问优先级分别为(从高到低):

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

我们试试将addMappings设置为false,然后再次访问index.html(经过上面的操作仅有public文件中还有index.html):
在application.properties中设置addMappings为false

输入addmappings会有提示:

运行效果:

从上面我们的分析可知,debug会打印出 “Default resource handling disabled” 信息,由于控制台输出的信息实在太多,这里我将控制台的信息复制到Word中通过按F5进行查找,确实如我们分析那样,addMappings=false的话就会debug打印 “Default resource handling disabled” ,然后return,就不再执行后面的代码(addResourceHandler()添加外部资源的映射的方法)!。


备注:打印debug信息只需要在resources中新建一个logback.xml(文件名不要错了)

logback.xml配置如下:

<?xml version="1.0" encoding="UTF-8" ?><configuration scan="true" scanPeriod="3 seconds"><!--设置日志输出为控制台--><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%logger{32}] %msg%n</pattern></encoder></appender><!--设置日志输出为文件--><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>logFile.log</File><rollingPolicy  class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>logFile.%d{yyyy-MM-dd_HH-mm}.log.zip</FileNamePattern></rollingPolicy><layout class="ch.qos.logback.classic.PatternLayout"><Pattern>%d{HH:mm:ss,SSS} [%thread] %-5level %logger{32} - %msg%n</Pattern></layout></appender><root><level value="DEBUG"/><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root>
</configuration>

2. 第一种静态资源映射规则

分析完第一条之后我们再来分析下面这句代码:

addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");

从方法名我们可知是一个添加资源处理的方法,第二个参数pattern表示模式,/webjars/,在百度上随便搜索了一下,Webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可
在使用SpringBoot需要使用Webjars,我们可以去官网搜索我们需要的Webjars:
具体地址:Webjars官网

Build Tool这里有Maven,我们选择Maven:

假设这里我们需要一个JQuery,我们在搜索搜索一下jquery,复制对应的Maven配置到pom.xml中去


加载一下!,该jar就被我们下载下来了!

第三个参数locations表示为地址集合(classpath:/META-INF/resources/webjars/),我们试试访问该地址下的bower.json看看是否可以访问,地址对应路径为下面红框框部分:

这里我们只需要在路径后面加上 /webjars/jquery/3.6.0/bower.json ,就可以访问到该文件。
(注意: #spring.web.resources.add-mappings=false 一定要注释掉,不然是无法访问的!)

运行效果:

3. 第二种静态资源映射规则

最后一种添加资源处理方法,看到该方法我们可以发现第二个参数 this.mvcProperties.getStaticPathPattern(),从方法名可知是一个静态资源的路径模式。

通过ctrl+鼠标左键,看看源码:

再进一步看看:
staticPathPattern用于静态资源的路径模式(Path pattern used for static resources. ),默认为 /**,访问当前的项目任意资源。

我们再来看第三个参数有一个方法的参数为 this.resourceProperties.getStaticLocations() ,我们看看该方法的源码!

看到 staticLocations ,你一定会感觉很熟悉这不是前面分析的静态资源位置集合嘛,如果不在外部对该参数进行注入的话会采用默认的路径 CLASSPATH_RESOURCE_LOCATIONS 变量的集合路径。

4. 第三种自定义静态资源路径

分析到这里我们可以试想一下,在最开始访问index.html的时候, /** 表示访问项目中的所有(为 webjars 时表示 webjars 下的所有,然后对应的访问路径),第三个参数表示具体的访问路径,为了证明我们的猜想,我们在application.properties中添加 spring.web.resources.static-locations=classpath:/static/ 配置,该配置表示只访问static路径下的静态资源,如果我们猜想正确的话,访问index.html会访问不到,因为index.html只在放在public文件下:

运行效果:

为了进一步验证,我们再在static目录下创建一个index.html,然后再次访问看看!

运行效果:

二.首页处理

在WebMvcAutoConfiguration类中,有一个welcomePageHandlerMapping方法该方法关于欢迎页(首页)的映射:

该方法中有一个getWelcomePage()方法,从方法名我们可知该方法是获取欢迎页面

跳转查看一下源码:

分析源码:先遍历 this.resourceProperties.getStaticLocations() (静态资源的路径集合),然后根据路径获取 Resource indexHtml = getIndexHtml(location); 首页,如果返回indexHtml不为null就将首页返回, 如果为null(没有设置相应的首页),就获取ServletContext对象,如果该对象不为null通过该对象获取首页并返回,如果为null返回null。

getIndexHtml(location); 我们看看该方法的源码:

从上面的源码我们可知,判断一下在静态资源路径集合中是否包含index.html,如果有就当成首页放回。
在前面我们访问路径都在搜索栏后面加上index.html,从上面的分析我们可知,index.html其实就是我们的首页,我们可以直接通过网址 http://localhost:8089/ 访问。

运行一下项目(确实如此):

三.网站图标

1.什么是网站图标

什么是网站图标,如下图红框框所示:

2.自定义网站图标

(1)首先先生成IOC图标(网站图标名为:favicon.ico)

FavIcon Generator

在线工具

也可以将地址放在迅雷等相应下载器中进行下载!

(2) 将favicon.ico放在static文件下

(3) 关闭默认图标

在application.properties/yaml中修改 favicon.enabled=false,有二种方式,第一种( spring.mvc.favicon.enabled=false ),第二种( spring.favicon.enabled = false ),我是第二种有效!

(4) 解决无法加载favicon.ico问题
  • 项目生成后,观察target中static文件夹下是否生成了favicon.ico

  • 清楚游览器缓存

这里我用的谷歌游览器,ctrl+shift+del键,点击清楚数据

  • 重启游览器
  • 在前端页面head标签中添加代码

方式一:

<head><meta charset="UTF-8"><title>登录</title><link rel="shortcut icon" href="/favicon.ico"/><link rel="bookmark" href="/favicon.ico"/>
</head>

方式二:

<head><meta charset="UTF-8"><title>登录</title><link rel="shortcut icon" th:href="@{/favicon.ico}"/><link rel="bookmark" th:href="@{/favicon.ico}"/>
</head>

运行效果:

SpringBoot学习---Web开发(静态资源处理,首页和图标)相关推荐

  1. Springboot的web开发-静态资源

    1.web开发简介 SpringMVC自动配置概览 Spring Boot provides auto-configuration for Spring MVC that works well wit ...

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

    Web开发静态资源处理 使用SpringBoot的步骤: 1.创建一个SpringBoot应用,选择我们需要的模块,SpringBoot就会默认将我们的需要的模块自动配置好 2.手动在配置文件中配置部 ...

  3. springboot10 Web开发静态资源

    10.Web开发静态资源处理 接下来呢,开始学习SpringBoot与Web开发,其实SpringBoot的东西用起来非常简单,因为SpringBoot最大的特点就是自动装配. 使用SpringBoo ...

  4. SpringBoot的Web开发入门案例7—WebMvcConfigurer配置类

    SpringBoot的Web开发入门案例7-WebMvcConfigurer配置类 WebMvcConfigurer接口的几个常用方法: addViewControllers:配置请求路径和页面的映射 ...

  5. SpringBoot的Web开发支持【超详细【一篇搞定】果断收藏系列】

    SpringBoot的Web开发支持 常用的服务器配置 使用Jetty服务器替换Tomcat 排除Tomcat的启动器,引入Jetty application.yml 编写入口程序 编写Control ...

  6. java web开发初学_2018年学习Web开发的绝对初学者指南

    java web开发初学 This post was originally published on Coder-Coder.com. 该帖子最初发布在Coder-Coder.com上 . If yo ...

  7. Spring-Boot:写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的图标资源?

    Spring-Boot:Spring-Boot写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的 ...

  8. web开发 学习_是否想学习Web开发但不知道从哪里开始?

    web开发 学习 by Rick West 由里克·韦斯特(Rick West) 是否想学习Web开发但不知道从哪里开始? (Want to learn web development but don ...

  9. 自学也能学得会的《零基础入门学习Web开发》(HTML5 CSS3)

    1 Web开发是什么 很多读者可能还不明白,Web开发到底是什么. 其实,我们所说的Web开发通常相当于前端开发与后端开发的组合. 前端开发主要通过HTML.CSS.JavaScript. AJAX. ...

  10. SpringBoot直接URL获取静态资源文件

    SpringBoot直接URL获取静态资源文件 spring boot 直接通过url访问获取内部或者外部静态资源图片 https://blog.csdn.net/ljj_9/article/deta ...

最新文章

  1. 人工智能下一阶段,为啥要看互联网巨头?
  2. 8.6亿个人信息被偷 网络安全团队曝光交易内幕
  3. php计算多元一次方程,C++实现的求解多元一次方程示例
  4. python requests 使用代理
  5. 又一国产开源微内核操作系统上线!源代码已开放下载
  6. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(七)我把魔法变成了积木
  7. spring ldap_Spring 3,Spring Web Services 2和LDAP安全
  8. suse glibcxx版本过高问题
  9. web.xml中的contextConfigLocation在spring中的作用
  10. 【PAT乙】1005 继续(3n+1)猜想 (25分)
  11. BlogEngine学习二:基于ICallbackEventHandler的轻量级Ajax方式
  12. Python编程从入门到实践(基础入门)
  13. 按一定条件筛选df1,返回结果中df1的索引取df2的数据
  14. 机器视觉入门资料大全
  15. 手机 android.downloader病毒,Android手机出现史上最强木马 感染后无法删除
  16. VMware虚拟机快速安装Ubuntu教程
  17. Python-等额本息计算
  18. python 中文转拼音原理_Python中文转拼音
  19. php去掉字符串带逗号前面的字符,php 怎么去掉字符串最后一个逗号
  20. 什么是威胁建模及其最重要的优势?

热门文章

  1. 11月20日取消纸质车票,怎么报销
  2. OpenInfra中国日志愿者第三次会议召开
  3. Linux宝库名人轶事栏目 | 人生若只如初见,我与开源圈
  4. python分类识别_Python构建图像分类识别器的方法
  5. 【配送路径规划】基于matlab遗传算法求解带时间窗的多配送中心半开放式车辆路径规划问题【含Matlab源码 YC002期】
  6. 【图像融合】基于matlab PCA图像融合【含Matlab源码 723期】
  7. python闭包的延迟绑定_Python延迟绑定问题原理及解决方案
  8. php中用get和post传值时的用法 $_GET[], $_POST[]
  9. linux怎么点亮硬盘灯_一种基于Linux系统下测试Expander背板硬盘指示灯的方法及系统与流程...
  10. cad填充图案乱理石_「AutoCAD之填充」CAD图案填充的6个要点以及3个墙裂的建议...