Изучение веб-разработки | SpringBoot Series (4)

Spring Boot задняя часть
Изучение веб-разработки | SpringBoot Series (4)

расширять

Нажмите, чтобы прыгнуть~:Сводка по обучению и расширение серии SpringBoot


@[toc]

предисловие

  • На самом деле вещи SpringBoot очень просты в использовании, потому что самой большой особенностью SpringBoot является автоматическая сборка.
  • Но полагаться на механическое зазубривание явно недостаточно, ведь слишком много вещей, которые отнимают много времени и неблагодарны. Далее будет про автопроводку SpringBootисходный кодОбъясняйте, смотрите его почаще, когда вам нечем заняться, а изучение идей и задумок в нем точно пойдет на пользу нашему росту!

1. Статические ресурсы

1.1 Подробное объяснение правил отображения статических ресурсов

  • ① Найдите файл WebMvcAutoConfiguration.class.

在这里插入图片描述

  • ② Найдите метод addResourceHandlers (добавить обработку ресурсов)

在这里插入图片描述

  • ③ Исследование исходного кода
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
			super.addResourceHandlers(registry);
			//资源如果不存在,即false,日志打印【默认资源处理被禁用】,不进行处理,直接返回,反之进入第二步
			if (!this.resourceProperties.isAddMappings()) {
				logger.debug("Default resource handling disabled");
				return;
			}
			ServletContext servletContext = getServletContext();
			//添加静态资源
			//所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源;
			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));
				}
			});
		}

		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());
			customizeResourceHandlerRegistration(registration);
		}

1.2 Как использовать веб-файлы для доступа к статическим ресурсам

  • ① Проект ссылается на веб-банки: 在这里插入图片描述
  • добавить зависимости
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>
  • 2 найти позицию пакета JAR

在这里插入图片描述

  • 3 Запустите доступ к проекту, чтобы увидеть

在这里插入图片描述

在这里插入图片描述

  • ⑤ Визит прошел успешно! Готово!

1.3 Путь к пользовательскому статическому ресурсу

  • ① После введения веб-файлов вы можете создать следующие три папки в папке ресурсов:

在这里插入图片描述

  • ②Добавить тестовый html-файл в общедоступный
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>dadadingdada</h1>
</body>
</html>
  • 3 Доступ к следующей попытке: Работа!

在这里插入图片描述

1.4 Порядок статических путей к ресурсам

  • ① Сначала создайте четыре html-файла с одинаковыми именами в разных местах, но с разным содержимым, как показано ниже:

在这里插入图片描述

  • ②Когда все четыре существуют:Наивысший приоритет: файлы в статическом каталоге

在这里插入图片描述

  • ③ Удалите html в статическом каталоге:Приоритет: второй по величине в общедоступном каталоге
    • Не забудьте очистить кеш браузера, иначе вы все равно можете увидеть исходную страницу

在这里插入图片描述

  • ④ Удалите файлы в общем каталоге:Приоритет: 404

在这里插入图片描述

  • ⑤ Резюме:Статический приоритет выше публичного, и шаблон должен быть перенаправлен через контроллер, доступ к корневому каталогу ресурсов невозможен, если вы сами не укажете каталог.

1.5 Укажите путь доступа

  • Как только вы сами определите путь к статической папке, исходная автоматическая конфигурация станет недействительной!
    • добавлен файл конфигурации yml:
    • Формат: static-locations:file:+путь, где расположены статические ресурсы
spring:
  resources:
    static-locations: file:C:\Users\大大丁大大\Downloads\个人测试文件\dyjProject\src\main\java\com\dyjTest\dyjProject\dyj
  • ②Проверка доступа:

在这里插入图片描述

2. Настройка домашней страницы и значков

2.1 Главная

  • ①Исходный код исходного кода: метод WelcomePageHandlerMapping
@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;
		}
  • ②получить страницу приветствия()
public FlashMapManager flashMapManager() {
			return super.flashMapManager();
		}

		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;
		}
		// 欢迎页就是一个location下的的 index.html 而已
		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;
		}
  • ③ Страница приветствия, все страницы index.html в папке статических ресурсов, сопоставленные /**.

    • Например, я посещаюhttp://localhost:7777/, вы найдете index.html в папке статических ресурсов
    • Создайте новый index.html в любом из трех каталогов, указанных выше, а затем посетите тест.http://localhost:7777/Посмотрите результаты!

在这里插入图片描述

在这里插入图片描述

2.2 Значки

  • ① Сначала отключите значок по умолчанию: рекомендуется сбросить версию SpringBoot до 2.1.7, потому что в последней версии этого больше нет.

在这里插入图片描述

  • ②Добавить конфигурацию в yml
spring:
  mvc:
    favicon:
      enabled: false
  • ③Создайте новый файл favicon.ico: поместите его в статический каталог~

在这里插入图片描述

  • ④Посетить после очистки кеша браузера: Смотрите внимательно! ! ! !在这里插入图片描述

Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрить блоггеров~Пожалуйста, указывайте источник при перепечатке~