女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot對(duì)靜態(tài)資源的映射規(guī)則

冬至子 ? 來(lái)源:瑞煕share ? 作者:brevity wit ? 2023-06-02 10:04 ? 次閱讀

在實(shí)際項(xiàng)目開(kāi)發(fā)中,除了程序代碼外,還需要一些靜態(tài)資源,比如公司logo,背景圖,css樣式文件,js文件等等,這里介紹一下單體應(yīng)用中Spring Boot對(duì)靜態(tài)資源的一些映射規(guī)則。(此處的單體應(yīng)用指非前后端分離、非微服務(wù)、非SOA架構(gòu)的簡(jiǎn)易版項(xiàng)目,具體區(qū)別看下圖所示)

圖片

Spring Boot對(duì)靜態(tài)資源的映射規(guī)則

在Spring Boot中,SpringMVC的相關(guān)配置都默認(rèn)在WebMvcAutoConfiguration類(lèi)中,具體源碼請(qǐng)?jiān)贗DE中自行搜索查看。

1、 所有/webjars/**(/**表示訪問(wèn)此路徑下的任何資源,都會(huì)去classpath:/META-INF/resources/webjars/下尋找資源(webjars就是以jar包方式引入資源到項(xiàng)目中), 相關(guān)源碼如下:

// WebMvcAutoConfiguration.java
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   if (!this.resourceProperties.isAddMappings()) {
      logger.debug("Default resource handling disabled");
      return;
   }
   addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
   addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) - > {
      registration.addResourceLocations(this.resourceProperties.getStaticLocations());
      if (this.servletContext != null) {
         ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
         registration.addResourceLocations(resource);
      }
   });
}
private void addResourceHandler(ResourceHandlerRegistry registry, String pattern, String... locations) {
   addResourceHandler(registry, pattern, (registration) - > registration.addResourceLocations(locations));
}
private void addResourceHandler(ResourceHandlerRegistry registry, String pattern,
      Consumer< ResourceHandlerRegistration > customizer) {
   if (registry.hasMappingForPattern(pattern)) {
      return;
   }
   ResourceHandlerRegistration registration = registry.addResourceHandler(pattern);
   customizer.accept(registration);
   registration.setCachePeriod(getSeconds(this.resourceProperties.getCache().getPeriod()));
   registration.setCacheControl(this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl());
   registration.setUseLastModified(this.resourceProperties.getCache().isUseLastModified());
   customizeResourceHandlerRegistration(registration);
}

結(jié)構(gòu)如圖所示(以jquery為例):

圖片

jquery的maven依賴(lài)如下:

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

訪問(wèn)示例地址如下:

localhost:8080/webjars/jquery/3.6.0/dist/jquery.js

訪問(wèn)結(jié)果如下圖所示:

圖片

2、 /**,訪問(wèn)當(dāng)前項(xiàng)目下的任何靜態(tài)資源,相關(guān)源碼如下:

// WebMvcAutoConfiguration.java
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) - > {
   registration.addResourceLocations(this.resourceProperties.getStaticLocations());
   if (this.servletContext != null) {
      ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
      registration.addResourceLocations(resource);
   }
});


// WebMvcProperties.java
public String getStaticPathPattern() {
   return this.staticPathPattern;
}
private String staticPathPattern = "/**";


// WebProperties.java
public String[] getStaticLocations() {
   return this.staticLocations;
}
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
      "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
/**
 * Locations of static resources. Defaults to classpath:[/META-INF/resources/,
 * /resources/, /static/, /public/].
 */
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;

由源碼可知,靜態(tài)資源的訪問(wèn)路徑有如下幾個(gè):

1、classpath:/META-INF/resources/ ;

2、classpath:/resources/;

3、classpath:/static/;

4、classpath:/public/;

5、/ (當(dāng)前項(xiàng)目的根路徑)。

如下圖所示:

圖片

**3、 **歡迎頁(yè): 靜態(tài)資源文件夾下的index.html頁(yè)面,相關(guān)源碼如下:

// WebMvcAutoConfiguration.java
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext,
      FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
   WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
         new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
         this.mvcProperties.getStaticPathPattern());
   welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));
   welcomePageHandlerMapping.setCorsConfigurations(getCorsConfigurations());
   return welcomePageHandlerMapping;
}


private Resource getWelcomePage() {
   for (String location : this.resourceProperties.getStaticLocations()) {
      Resource indexHtml = getIndexHtml(location);
      if (indexHtml != null) {
         return indexHtml;
      }
   }
   ServletContext servletContext = getServletContext();
   if (servletContext != null) {
      return getIndexHtml(new ServletContextResource(servletContext, SERVLET_LOCATION));
   }
   return null;
}
private Resource getIndexHtml(String location) {
   return getIndexHtml(this.resourceLoader.getResource(location));
}
private Resource getIndexHtml(Resource location) {
   try {
      Resource resource = location.createRelative("index.html");
      if (resource.exists() && (resource.getURL() != null)) {
         return resource;
      }
   }
   catch (Exception ex) {
   }
   return null;
}


// WebMvcProperties.java
public String getStaticPathPattern() {
   return this.staticPathPattern;
}
private String staticPathPattern = "/**";

根據(jù)源碼可知,歡迎頁(yè)是被/**映射,也解釋了首頁(yè)名稱(chēng)為index.html的原因。

4、 自定義靜態(tài)資源文件夾,在配置文件application.properties中添加如下配置,就會(huì)覆蓋掉項(xiàng)目的默認(rèn)配置,示例代碼如下:

spring.web.resources.static-locations=classpath:/brevity/,classpath:/github/

以上就是Spring Boot單體應(yīng)用中關(guān)于靜態(tài)資源映射的說(shuō)明。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SOA
    SOA
    +關(guān)注

    關(guān)注

    1

    文章

    300

    瀏覽量

    28023
  • CSS
    CSS
    +關(guān)注

    關(guān)注

    0

    文章

    110

    瀏覽量

    14732
  • MVC
    MVC
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    14058
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Spring Boot如何實(shí)現(xiàn)異步任務(wù)

    Spring Boot 提供了多種方式來(lái)實(shí)現(xiàn)異步任務(wù),這里介紹三種主要實(shí)現(xiàn)方式。 1、基于注解 @Async @Async 注解是 Spring 提供的一種輕量級(jí)異步方法實(shí)現(xiàn)方式,它可以標(biāo)記在方法上
    的頭像 發(fā)表于 09-30 10:32 ?1658次閱讀

    Spring Boot Starter需要些什么

    pulsar-spring-boot-starter是非常有必要的,在此之前,我們先看看一個(gè)starter需要些什么。 Spring Boot Starter spring-boot
    的頭像 發(fā)表于 09-25 11:35 ?999次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> Starter需要些什么

    Spring boot中Redis的使用

    【本人禿頂程序員】springboot專(zhuān)輯:Spring boot中Redis的使用
    發(fā)表于 03-27 11:42

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目標(biāo)是構(gòu)建“非常容易創(chuàng)建、獨(dú)立、產(chǎn)品級(jí)別的基于Spring的應(yīng)用”。這些應(yīng)
    發(fā)表于 12-16 07:57

    Spring Boot從零入門(mén)1 詳述

    在開(kāi)始學(xué)習(xí)Spring Boot之前,我之前從未接觸過(guò)Spring相關(guān)的項(xiàng)目,Java基礎(chǔ)還是幾年前自學(xué)的,現(xiàn)在估計(jì)也忘得差不多了吧,寫(xiě)Spring
    的頭像 發(fā)表于 12-10 22:18 ?811次閱讀

    Spring Boot特有的實(shí)踐

    Spring Boot是最流行的用于開(kāi)發(fā)微服務(wù)的Java框架。在本文中,我將與你分享自2016年以來(lái)我在專(zhuān)業(yè)開(kāi)發(fā)中使用Spring Boot所采用的最佳實(shí)踐。這些內(nèi)容是基于我的個(gè)人經(jīng)驗(yàn)
    的頭像 發(fā)表于 09-29 10:24 ?1106次閱讀

    強(qiáng)大的Spring Boot 3.0要來(lái)了

    來(lái)源:OSC開(kāi)源社區(qū)(ID:oschina2013) Spring Boot 3.0 首個(gè) RC 已發(fā)布,此外還為兩個(gè)分支發(fā)布了更新:2.7.5 2.6.13。 3.0.0-RC1: https
    的頭像 發(fā)表于 10-31 11:17 ?2229次閱讀

    怎樣使用Kiuwan保護(hù)Spring Boot應(yīng)用程序呢?

    Spring Boot 提供了快速輕松地構(gòu)建基于Spring 的應(yīng)用程序所需的工具、功能和依賴(lài)項(xiàng)。
    的頭像 發(fā)表于 03-16 09:10 ?1009次閱讀

    Spring Boot Web相關(guān)的基礎(chǔ)知識(shí)

    Boot的第一個(gè)接口。接下來(lái)將會(huì)將會(huì)介紹使用Spring Boot開(kāi)發(fā)Web應(yīng)用的相關(guān)內(nèi)容,其主要包括使用spring-boot-starter-web組件來(lái)實(shí)現(xiàn)Web應(yīng)用開(kāi)發(fā)、UR
    的頭像 發(fā)表于 03-17 15:03 ?828次閱讀

    簡(jiǎn)述Spring Boot數(shù)據(jù)校驗(yàn)

    上一篇文章我們了解了Spring Boot Web相關(guān)的知識(shí),初步了解了spring-boot-starter-web,還了解了@Contrler和@RestController的差別,如果
    的頭像 發(fā)表于 03-17 15:07 ?979次閱讀

    介紹一下單體應(yīng)用中Spring Boot對(duì)靜態(tài)資源的一些映射規(guī)則

    在實(shí)際項(xiàng)目開(kāi)發(fā)中,除了程序代碼外,還需要一些靜態(tài)資源,比如公司logo,背景圖,css樣式文件,js文件等等
    的頭像 發(fā)表于 06-02 11:02 ?1256次閱讀
    介紹一下單體應(yīng)用中<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>對(duì)<b class='flag-5'>靜態(tài)</b><b class='flag-5'>資源</b>的一些<b class='flag-5'>映射</b><b class='flag-5'>規(guī)則</b>

    Spring Boot Actuator快速入門(mén)

    不知道大家在寫(xiě) Spring Boot 項(xiàng)目的過(guò)程中,使用過(guò) Spring Boot Actuator 嗎?知道 Spring
    的頭像 發(fā)表于 10-09 17:11 ?820次閱讀

    Spring Boot啟動(dòng) Eureka流程

    在上篇中已經(jīng)說(shuō)過(guò)了 Eureka-Server 本質(zhì)上是一個(gè) web 應(yīng)用的項(xiàng)目,今天就來(lái)看看 Spring Boot 是怎么啟動(dòng) Eureka 的。 Spring Boot 啟動(dòng) E
    的頭像 發(fā)表于 10-10 11:40 ?1131次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動(dòng) Eureka流程

    Spring Boot的啟動(dòng)原理

    可能很多初學(xué)者會(huì)比較困惑,Spring Boot 是如何做到將應(yīng)用代碼和所有的依賴(lài)打包成一個(gè)獨(dú)立的 Jar 包,因?yàn)閭鹘y(tǒng)的 Java 項(xiàng)目打包成 Jar 包之后,需要通過(guò) -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?868次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動(dòng)原理

    Spring Boot 的設(shè)計(jì)目標(biāo)

    什么是Spring Boot Spring BootSpring 開(kāi)源組織下的一個(gè)子項(xiàng)目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?755次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計(jì)目標(biāo)