搜尋
首頁Javajava教程如何透過原始碼探究靜態資源的映射規則

本篇文章為大家介紹一下透過原始碼探究靜態資源映射規則的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

如何透過原始碼探究靜態資源的映射規則

Spring Boot——透過原始碼探究靜態資源的映射規則

我們開發一個Spring Boot項目,肯定要導入許多的靜態資源,例如css ,js等檔案

如果我們是一個web應用,我們的main下會有一個webapp,我們以前都是將所有的頁面導在這裡面的,對吧!但是我們現在的pom呢,打包方式是為jar的方式,那麼這種方式SpringBoot能不能來為我們寫頁面呢?當然是可以的,但是SpringBoot對於靜態資源放置的位置,是有規定的!

靜態資源映射規則

第一種映射規則

#SpringBoot中,SpringMVC的web配置都在WebMvcAutoConfiguration 這個配置類別裡面;

WebMvcAutoConfigurationAdapter 中有很多設定方法;其中就有一個新增資源處理方法:addResourceHandlers (),原始碼如下。

@Override
		protected void addResourceHandlers(ResourceHandlerRegistry registry) {
			super.addResourceHandlers(registry);
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			ServletContext servletContext = getServletContext();
			addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
			addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
				registration.addResourceLocations(this.resourceProperties.getStaticLocations());
				if (servletContext != null) {
					registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION));
				}
			});
		}

WebJars是將客戶端(瀏覽器)資源(JavaScript,Css等)打成jar包文件,以對資源進行統一依賴管理。 WebJars的jar包部署在Maven中央倉庫上。

我們可以到webjars官網上找到自己需要的資源,在自己的工程中加入maven依賴,即可直接使用這些資源了。

例如,我們要導入jquery資源

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

導入後我們可以透過資源路徑找到資源的存放位置並訪問,我們在webjars網站導入的資源都符合下圖的結構

如何透過原始碼探究靜態資源的映射規則

透過路徑訪問,成功存取靜態資源!

如何透過原始碼探究靜態資源的映射規則

第二個映射規則

#下面我們繼續分析原始碼

如何透過原始碼探究靜態資源的映射規則

getStaticPathpattern():取得靜態路徑模式,點進去看一下原始碼

public String getStaticPathPattern() {
		return this.staticPathPattern;
	}

再看一下staticPathPattern的原始碼

如何透過原始碼探究靜態資源的映射規則

/** 就是目前目錄下的所有靜態資源都能識別,但是目前目錄下具體指的又是什麼呢?我們點開resourceProperties的源碼便可看出來。原始碼如下:

如何透過原始碼探究靜態資源的映射規則

上面原始碼很清楚的給了我們四個靜態資源路徑,所以只要是這四個目錄下的靜態資源,都可以直接取得。

我們來測試一下,先補齊上面的目錄,然後再resource目錄放一個js資源

如何透過原始碼探究靜態資源的映射規則

啟動springboot應用測試:成功存取靜態資源!

如何透過原始碼探究靜態資源的映射規則

以下四個目錄存放的靜態資源可以被我們辨識:

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

注意:

  • 第一個目錄的存取路徑為localhost:8080/webjars/資源目錄結構,後面三個存取路徑為localhost:8080/資源名稱

  • 第二種映射規則的優先權為:resources>static(預設)>public

自訂靜態資源路徑

#我們可以自己透過設定檔來指定一下,哪些資料夾是需要我們放靜態資源檔案的,在application.properties中配置;

spring.resources.static-locations=classpath:/coding/,classpath:/cheng/

但是透過下面原始碼我們可以看出,如果自訂了資源路徑,那麼上面預設的四個路徑就失效了,所以最好不要自訂路徑,使用springboot幫我們自動配置好的就行。

if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}

相關免費學習推薦:java基礎教學

以上是如何透過原始碼探究靜態資源的映射規則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
Spring Boot Actuator从未授权访问到getshell的示例分析Spring Boot Actuator从未授权访问到getshell的示例分析May 23, 2023 am 08:56 AM

前言部门大佬在某src上挖到了这个漏洞,是一个比较老的洞了,我觉得有点意思,就动手在本地搭了个环境测试一下。Actuator是springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在Actuator启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息,从而导致信息泄露甚至服务器被接管的事件发生。如上所示,actuator是springb

如何利用Spring Boot构建区块链应用和智能合约如何利用Spring Boot构建区块链应用和智能合约Jun 22, 2023 am 09:33 AM

随着比特币等数字货币的兴起,区块链技术也逐渐成为热门话题。而智能合约,则可视为区块链技术的重要组成部分。SpringBoot作为一种流行的Java后端开发框架,也能够用来构建区块链应用和智能合约。本文将介绍如何利用SpringBoot搭建基于区块链技术的应用和智能合约。一、SpringBoot与区块链首先,我们需要了解一些与区块链相关的基本概念。区块链

基于Spring Boot和MyBatis Plus实现ORM映射基于Spring Boot和MyBatis Plus实现ORM映射Jun 22, 2023 pm 09:27 PM

在Javaweb应用开发过程中,ORM(Object-RelationalMapping)映射技术用来将数据库中的关系型数据映射到Java对象中,方便开发者进行数据访问和操作。SpringBoot作为目前最流行的Javaweb开发框架之一,已经提供了集成MyBatis的方式,而MyBatisPlus则是在MyBatis的基础上扩展的一种ORM框架。

使用Spring Boot和Apache ServiceMix构建ESB系统使用Spring Boot和Apache ServiceMix构建ESB系统Jun 22, 2023 pm 12:30 PM

随着现代企业越来越依赖于各种不同的应用程序和系统,企业集成变得愈发重要。企业服务总线(ESB)就是一种集成架构模式,通过将不同系统和应用程序连接在一起,提供通用的数据交换和消息路由服务,从而实现企业级应用程序集成。使用SpringBoot和ApacheServiceMix,我们可以轻松构建一个ESB系统,这篇文章将介绍如何实现。SpringBoot和A

基于Spring Boot的分布式数据缓存和存储系统基于Spring Boot的分布式数据缓存和存储系统Jun 22, 2023 am 09:48 AM

随着互联网的不断发展和普及,数据的处理和存储需求也越来越大,如何高效且可靠地处理和存储数据成为了业界和研究人员的热门话题。基于SpringBoot的分布式数据缓存和存储系统是近年来备受关注的一种解决方案。什么是分布式数据缓存和存储系统?分布式数据缓存和存储系统是指通过多个节点(服务器)分布式地存储数据,提高了数据的安全性和可靠性,同时也可以提升数据的处理性

Spring Boot与NoSQL数据库的整合使用Spring Boot与NoSQL数据库的整合使用Jun 22, 2023 pm 10:34 PM

随着互联网的发展,大数据分析和实时信息处理成为了企业的一个重要需求。为了满足这样的需求,传统的关系型数据库已经不再满足业务和技术发展的需要。相反,使用NoSQL数据库已经成为了一个重要的选择。在这篇文章中,我们将讨论SpringBoot与NoSQL数据库的整合使用,以实现现代应用程序的开发和部署。什么是NoSQL数据库?NoSQL是notonlySQL

使用Spring Boot和JavaFX构建桌面应用程序使用Spring Boot和JavaFX构建桌面应用程序Jun 22, 2023 am 10:55 AM

随着技术的不断发展,我们现在可以使用不同的技术来构建桌面应用程序。而SpringBoot和JavaFX则是现在较为流行的选择之一。本文将重点介绍如何使用这两个框架来构建一个功能丰富的桌面应用程序。一、介绍SpringBoot和JavaFXSpringBoot是一个基于Spring框架的快速开发框架。它可以帮助开发者快速构建Web应用程序,同时提供一组开

Spring Boot的任务调度和定时任务实现方法Spring Boot的任务调度和定时任务实现方法Jun 22, 2023 pm 11:58 PM

SpringBoot是一款非常流行的Java开发框架,不仅具有快速开发的优势,而且还内置了很多实用的功能,其中,任务调度和定时任务就是其常用的功能之一。本文将探讨SpringBoot的任务调度和定时任务实现方法。一、SpringBoot任务调度简介SpringBoot任务调度(TaskScheduling)是指在特定的时间点或某个条件下,执行一些特

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。