服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot2零基础到精通之配置文件与web开发

SpringBoot2零基础到精通之配置文件与web开发

2022-10-17 14:24扎哇太枣糕 Java教程

SpringBoot是一种整合Spring技术栈的方式(或者说是框架),同时也是简化Spring的一种快速开发的脚手架,本篇让我们一起学习配置文件以及web相关的开发

1 配置文件

  之前说过,配置文件大致分两种类型:properties、yaml。其中properties是最常规的配置文件类型:使用键值对等号的格式来对各种参数进行配置,后缀为.properties,在这里就不过多的进行赘述了。下面说一下yaml文件。

1.1 yaml文件

   YAML全称YAML Ain't(isn't) Markup Language,是一种直观的能够被电脑识别的数据序列化格式,YAML以数据为核心,比传统的xml方式更加简洁。体现在书写的格式简洁,表达的层级明显,非常适合用来做以数据为中心的配置文件。yaml文件的后缀为.yml或者.yaml

1.1.1 基本语法

  • 使用K: V进行键值映射,V前要有空格作为分隔符
  • 区分大小写
  • 使用缩进表示层级关系
  • 语法层面使用缩进不能用Tab键,要手敲空格。空格数不重要,只要是相同的空格数就代表相同的层级关系,所以相同层级的缩进空格要相同。但是实际操作的时候还是使用tab键,不会出现问题
  • 注解使用#字符

1.1.2 数据格式

  yaml文件的数据格式可以使用如下的的格式约束,用注解注掉的就是这种类型的行内写法,可以自行选择习惯的形式进行使用。其中注意的是字符串类型的数据可以不用引号引起来,但是要是使用引号的话,单引号会将转义字符作为字符串进行输出,但是双引号会将转义字符转义之后输出,比如\n单引号就是\n双引号就是换号符。

SpringBoot2零基础到精通之配置文件与web开发

1.2 数据绑定时关键字提示

  在使用yaml配置文件进行配置的时候并不会进行代码补全的相关提示,这样不仅会大大降低代码书写效率,还会增加出错的概率。于是,现在就有一种方法:在项目中加入配置处理器,即可实现编写yaml文件的时候进行关键字提示。方法如下:

第一步: 导入相关依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
</dependency>

第二步: 重启项目

点击运行或者重启按钮,重启一下该SpringBoot项目

第三步: 测试

SpringBoot2零基础到精通之配置文件与web开发

第四步: 在pom.xml文件中添加代码

即在打jar包的时候不将配置处理器打入jar包,否则会降低项目的效率

SpringBoot2零基础到精通之配置文件与web开发

 

2 web开发

2.1 静态资源的存放与访问

  静态资源可以理解为前端的固定页面,这里面包含HTML、CSS、JS、图片等等,不需要查数据库也不需要程序处理,直接就能够显示的页面。

存放路径: 所有的静态资源在编程的时候都放在类路径下的一个文件夹里,文件夹默认匹配以下四种命名的任意一种: static、public 、resources 、/META-INF/resources

资源访问方式:

将项目启动开之后,使用当前项目根路径/ + 静态资源名 对静态资源进行访问。所有的静态资源映射地址是/**

当静态资源和controller请求重名的时候,资源解析器会首先去找该名称的Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器查找静态资源,静态资源也找不到则响应404页面

自定义存放路径、访问方式:

对配置文件的 spring. web.resources.static-locations配置项进行修改,可以改变默认的静态资源存储路径。

SpringBoot2零基础到精通之配置文件与web开发

对配置文件的 spring.mvc.static-path-pattern配置项进行修改,可以使得在访问时拥有指定前缀的请求才会访问静态资源。如下图,只有使用 /res前缀 + 静态资源名访问的时候才会访问到相应的静态资源

SpringBoot2零基础到精通之配置文件与web开发

2.2 webjars

  webjars就是将前端所需要的技术jar(比如jquery)使用依赖进行导入,webjars的官方文档就是展示jar对应的依赖,使用的时候直接复制到pom.xml文件即可。webjars的官方文档:https://www.webjars.org/

2.3 web小技巧

2.3.1 index页面

  不管是默认的还是自定义的静态资源路径,只要在下面创建一个index.html文件,这个页面就将会被当做项目的欢迎页面,也就是说访问localhost: 端口号的时候就会访问到index.html页面。但是需要注意的是,不能自定义静态资源的访问方式,否则就会导致上述效果失效。

2.3.2 网页小图标

  不管是默认的还是自定义的静态资源路径,只要在下面添加一个命名为favicon.ico的图片,即可将该图片设置成网页的小图标。同时需要注意的是,不能自定义静态资源的访问方式,否则就会导致上述效果失效。

SpringBoot2零基础到精通之配置文件与web开发

2.4 web场景源码浅析

生效自动配置类: SpringBoot启动的时候默认加载xxxAutoConfiguration类(自动配置类)是相关场景生效,SpringMVC功能的自动配置类是 WebMvcAutoConfiguration

配置绑定:

@EnableConfigurationProperties注解将配置文件的相关属性和xxx配置类进行了绑定,可以用于更改默认的配置信息。而通过分析源码可知在WebMvcAutoConfiguration自动配置类里的WebMvcAutoConfigurationAdapter静态类上有如下注解,注解参数中有两个配置类,其中配置类与配置文件中的属性绑定关系如下:WebMvcProperties.class --> spring.mvc WebProperties.class --> spring.web

@EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})

源码中资源处理器的解析: 在SpringBoot的源码中有一个规则:有参构造器所有参数的值都会从容器中拿,于是在WebMvcAutoConfigurationAdapter静态类里的有参构造器中,所有的参数都将直接从容器中获取。

//ResourceProperties resourceProperties --> 获取和spring.resources绑定的所有的值的对象
//WebMvcProperties mvcProperties --> 获取和spring.mvc绑定的所有的值的对象
//ListableBeanFactory beanFactory --> Spring的beanFactory
//HttpMessageConverters --> 找到所有的HttpMessageConverters
//ResourceHandlerRegistrationCustomizer --> 找到资源处理器的自定义(重点解析)
//DispatcherServletPath -->  找到资源的路径
//ServletRegistrationBean --> 给应用注册Servlet、Filter....
public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebMvcProperties mvcProperties,
			ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,
			ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,
			ObjectProvider<DispatcherServletPath> dispatcherServletPath,
			ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {
	this.resourceProperties = resourceProperties;
	this.mvcProperties = mvcProperties;
	this.beanFactory = beanFactory;
	this.messageConvertersProvider = messageConvertersProvider;
	this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
	this.dispatcherServletPath = dispatcherServletPath;
	this.servletRegistrations = servletRegistrations;
}

  通过对WebMvcAutoConfigurationAdapter静态类里的addResourceHandlers方法解析,得知资源解析器中资源处理的默认规则

public void addResourceHandlers(ResourceHandlerRegistry registry) {
	// 判断resource.add-mappings的值true/false(默认为true,可以在配置文件修改配置项)
	if (!this.resourceProperties.isAddMappings()) {
		// resource.add-mappings的值为false,则禁用所有的静态资源的访问规则,debug日志输出下面这句话
		logger.debug("Default resource handling disabled");
		return;
	}

	// resource.add-mappings的值true的话,定义规则

	// 定义缓存的相关配置
	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));
	}
	         
	// 定义静态资源的访问规则
	// this.mvcProperties.getStaticPathPattern() --> 获取静态资源的访问方式,默认是\/**
	String staticPathPattern = this.mvcProperties.getStaticPathPattern();
	if (!registry.hasMappingForPattern(staticPathPattern)) {
		customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
			// getStaticLocations()方法中
			.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
			.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
	}
}

源码中欢迎页的解析:

@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
	// 下面 welcomePageHandlerMapping 的有参函数在下面图片
  WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
  welcomePageHandlerMapping.setInterceptors(this.getInterceptors(mvcConversionService, mvcResourceUrlProvider));
  welcomePageHandlerMapping.setCorsConfigurations(this.getCorsConfigurations());
  return welcomePageHandlerMapping;
}

  下图解释了为什么:自定义静态资源的访问方式会导致欢迎页无法起到作用。SpringBoot的源码中已经将这部分条件写死了。

SpringBoot2零基础到精通之配置文件与web开发

到此这篇关于SpringBoot2零基础到精通之配置文件与web开发的文章就介绍到这了,更多相关SpringBoot2 配置文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_59138417/article/details/123234272

延伸 · 阅读

精彩推荐