SpringBoot加载静态资源的方式

在SpringBoot中加载静态资源和在普通的web应用中不太一样。默认情况下,spring Boot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容。下面我们来写个例子看一下就会一目了然了:首先看一下项目的目录结构:

我们在resources下面的templates目录下建一个home.html的文件,完整目录为:src/main/resources/templates/home.html。内容如下:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="utf-8"/>
  <title>ConanZhang的首页</title>
</head>
<body>
我是首页:
<!--<image th:src="@{/image/267862-1212151Z12099.jpg}"/> -->
</body>
</html>

如果我们想要访问home.html应该怎么做呢?我们先来看第一种方式:

1、我们在web.controller这个包下面建一个Controller类:ThymeleafTestController.代码内容如下:

package com.zkn.learnspringboot.web.controller; 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; 

/**
 * Created by wb-zhangkenan on 2016/11/30.
 */
@Controller
@RequestMapping("thymeleaf")
public class ThymeleafTestController { 

  @RequestMapping("home")
  public String getHome(){ 

    return "home";
  }
}

写到这里你一定非常眼熟,这不就是SpringMVC的写法吗?没错就是SpringMVC的写法:下面我们来访问一下:http://localhost:8003/thymeleaf/home。结果如图所示:

因为SpringBoot集成了Thymeleaf,所以它会默认查找resources下面的templates这个目录下的文件。templates这个目录的名字不要写错了。接着我又有了这样的需求,假设我想在我的home.html中引入一些其他的静态资源文件,比如我想在home.html中引入一张图片:那我们应该怎么做呢?

首先,我们需要在resources下面建一个static或者public的目录,你不建立目录也行,直接放到resources下面,接着我们再建立一个image的目录,最终的目录结构如图所示:

我们在image这个目录下放入一张图片,然后我们在home.html中引入一下这张图片,最终的代码如下:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>WebMvcConfigurerAdapter
  <meta charset="utf-8"/>
  <title>ConanZhang的首页</title>
</head>
  <body>
我是首页:
  <image th:src="@{/image/267862-1212151Z12099.jpg}" width="100px" height="50px" />
  </body>
</html>

看到上面的写法你可能会有些奇怪,th:src和@{}这都是什么鬼。其实这是Thymeleaf的语法。@{}是引入外部资源用的。下面我们再来访问一下,结果如下图所示:

这样我们就访问到了image目录下的图片了。

可能会有人说难道我只能放到static、public或者直接放到resources下面吗?我换个目录就不行了吗?那当然不是这样的,下面我们来换另外一种写法:

在我现在的这个项目中前台是用React-redux写的,后台SpringBoot只是用来提供接口的,我只需要一个首页来把编译后的react-redux引入到项目中就可以了,如果我想直接访问这个首页那我应该怎么做呢?SpringMVC为我们提供了这样的一个类:WebMvcConfigurerAdapter。我们就是借助于这个类来实现我们需要的功能的。我们写一个类来继承这个类,代码如下:

package com.zkn.learnspringboot.config; 

import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

/**
 * Created by wb-zhangkenan on 2016/11/30.
 */
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter { 

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) { 

    registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/",ResourceUtils.CLASSPATH_URL_PREFIX+"/image/");
    super.addResourceHandlers(registry);
  } 

}

我们重写了addResourceHandlers这个方法来重新注册了一个资源处理器。接着我们在来访问一下看看:http://localhost:8003/templates/home.html。结果如下图所示:

注意了这里我们是直接访问的home.html这个文件。和我们预期的效果是一样的。接着可能会有人说:如果我也想在home.html中引入静态资源要怎么办呢?比如说上面的那个例子,我要引入一个一张图片。也简单,那我们就再注册一个资源处理器就OK了。Java代码如下:

package com.zkn.learnspringboot.config; 

import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

/**
 * Created by wb-zhangkenan on 2016/11/30.
 */
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter { 

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) { 

    registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/");
    registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
    super.addResourceHandlers(registry);
  } 

}

home.html中的内容如下所示:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="utf-8"/>
  <title>ConanZhang的首页</title>
</head>
  <body>
我是首页:
  <image src="/static/image/267862-1212151Z12099.jpg" width="100px" height="50px" />
  </body>
</html> 

接着我们再访问以下看看什么效果:http://localhost:8003/templates/home.html

和之前的效果是一模一样的吧?

前几天在网上找了一个SpringBoot的中文开发指南,有需要的请点击这里下载吧。

这篇文章的完整版代码,github地址如下:https://github.com/zhangconan/LearnSpringBoot

项目下载地址:LearnSpringBoot_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot静态资源css,js,img配置方案

    一.概述 springboot 默认静态资源访问的路径为:/static 或 /public 或 /resources 或 /META-INF/resources 这样的地址都必须定义在src/main/resources目录文件中,这样可以达到在项目启动时候可以自动加载为项目静态地址目录到classpath下 ,静态访问地址其实是使用 ResourceHttpRequestHandler 核心处理器加载到WebMvcConfigurerAdapter进行对addResourceHandlers

  • spring boot中的静态资源加载处理方式

    1.spring boot默认资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. spring boot默认加载文件的路径是: /META-INF/resources/ /resources/ /static/ /public/ 这些目录下面, 当然我们也可以从spring boot源码也可以看到Java代码: private static final String[] CLASSPATH_RESOURCE_L

  • spring boot 静态资源处理方法

    spring boot 秉承约定优于配置,spring boot在静态资源的处理上就已经默认做了处理. 1.默认资源映射 映射"/**"的路径到 /static (或/public./resources./META-INF/resources), "/webjars/** 映射到 classpath:/META-INF/resources/webjars/ 复制代码 代码如下: <script type="text/javascript" src=&

  • Spring boot 默认静态资源路径与手动配置访问路径的方法

    在application.propertis中配置 ##端口号 server.port=8081 ##默认前缀 spring.mvc.view.prefix=/ ## 响应页面默认后缀 spring.mvc.view.suffix=.html # 默认值为 /** spring.mvc.static-path-pattern=/** # 这里设置要指向的路径,多个使用英文逗号隔开,默认值为 classpath:/META-INF/resources/,classpath:/resources/,

  • SpringBoot加载静态资源的方式

    在SpringBoot中加载静态资源和在普通的web应用中不太一样.默认情况下,spring Boot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容.下面我们来写个例子看一下就会一目了然了:首先看一下项目的目录结构: 我们在resources下面的templates目录下建一个home.html的文件,完整目录为:src/main/resources/templa

  • 解决Django加载静态资源失败的问题

    Django项目中为什么会加载静态时会失败呢? 原因:django部署方式比较特别,采用静态文件路径:STATICFILES_DIRS的部署方式,之前你写的相对路径,绝对路径因为缺少静态文件路径而全部失效 做页面显示时,肯定少不了加载css,js等文件吧,但是在Django中,我们的这些文件应该放在哪里呢?又该如何来配置? 1.Django中有静态文件(static)文件夹 2.配置相关文件 在settings.py文件中 STATIC_URL = '/static/' #添加这段代码 STAT

  • SpringBoot加载配置文件的实现方式总结

    目录 一.简介 二.代码实践 2.1.通过@value注解实现参数加载 2.2.通过@ConfigurationProperties注解实现参数加载 2.3.通过@PropertySource注解实现配置文件加载 2.4.通过自定义环境处理类,实现配置文件的加载 2.5.最后,我们来介绍一下yml文件读取 三.小结 一.简介 在实际的项目开发过程中,我们经常需要将某些变量从代码里面抽离出来,放在配置文件里面,以便更加统一.灵活的管理服务配置信息.比如,数据库.eureka.zookeeper.r

  • thinkphp5 加载静态资源路径与常量的方法

    1.加载静态资源路径 大于5.0.4版本可以直接使用 __ROOT__ :项目目录 __STATIC__ :项目目录下的static目录 __JS__ :项目目录下的static/js目录 __CSS__:项目目录下的static/css目录 我们可以使用view模板打印这些常量的具体路径 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert ti

  • springboot2版本无法加载静态资源问题解决

    前言 在学习springboot的过程中,发现无法引用静态资源.我使用的是springboot2.2.1版本. 追溯源码,终于解决.并记录下解决思路. 默认加载路径 首先得知道springboot默认加载得资源路径是什么. 首先我们看WebMvcAutoConfiguration这个类.里面有一个方法叫做addResourceHandlers() @Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication(type

  • springboot 加载 META-INF/spring.factories方式

    目录 springboot 加载 META-INF/spring.factories 用户应用程序Application 建立META-INF/spring.factories文件的意义何在 平常我们如何将Bean注入到容器当中 springboot 加载 META-INF/spring.factories 用户应用程序Application ConfigurableApplicationContext context = SpringApplication.run(NacosSpringBoo

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

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

  • Springboot如何加载静态图片

    目录 如何加载静态图片 java工具类 使用的是注入的方式 Springboot的图片显示问题 原因 解决方法 如何加载静态图片 java工具类 import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.

  • 浅谈SpringBoot资源初始化加载的几种方式

    目录 一.问题 二.资源初始化 一.问题 在平时的业务模块开发过程中,难免会需要做一些全局的任务.缓存.线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢? 二.资源初始化 1.既然要做资源的初始化,那么就需要了解一下springboot启动过程(这里大体说下启动过程,详细:https://www.jb51.net/article/133648.htm) 按照前面的分析,Spring-boot容器启动流程总体可划分为2部分: 执行注解:扫描指定范围下的bean.载入自

  • Django添加bootstrap框架时无法加载静态文件的解决方式

    项目结构如下: 开始时在setting.py中设置如下; html文件中的写法如下: 这样设置一直无法加载静态文件,只需要修改setting.py文件如下: 就可以加载到静态文件了. 补充知识:Django-项目上线后,静态文件配置失效以及404.500页面的全局配置 一.项目上线后静态文件失效 1.因为项目还没上线的时候,django会默认从setting.py中这个设置 STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BAS

随机推荐