[学习记录] SpringBoot 6. Web 场景

SpringBoot 6. Web 场景

尚硅谷

官方文档

1. 简单功能分析

1.1 静态资源访问

1.1.1 静态资源目录

默认为类路径下:
/static/public/resources/META-INF/resources

访问:http://localhost:8080/资源文件名 即可。

请求进来,会先去找 Controller 能不能处理请求,若不能,则将请求交给静态资源处理器。若静态资源也找不到,就会 404

1.1.2 静态资源访问前缀

有时候我们会做一些拦截器之类的功能,所以一般我们对静态资源的访问会带上前缀。

默认是没有前缀的,即 /**。若我们想让将所有静态资源重新定位到 /resources/** 可以实现如下:

spring:
  mvc:
    static-path-pattern: "/resources/**"

访问:http://localhost:8080/resources/静态资源名 即可。

还可以设置 spring.web.resources.static-locations 属性自定义静态资源位置(将默认值替换为目录位置列表)。

spring:
  mvc:
    static-path-pattern: "/resources/**"

  web:
    resources:
      static-locations: "classpath:/public"

上述意思就是,访问 http://localhost:8080/resources/静态资源名 会去 /resources/public 下面去找:

在这里插入图片描述

spring.web.resources.static-locations 属性还可以写成列表,表示可以去多个目录下找静态资源:

spring:
  mvc:
    static-path-pattern: /resources/**

  web:
    resources:
      static-locations: [classpath:/public, classpath:/static]
1.2.3 引入 Webjars

就是把前端的 js 文件 css 文件框架之类的引入进来。只需要导依赖即可。

https://www.webjars.org/ 找到相关的依赖导入。

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

然后通过 /webjars/路径 即可访问:http://localhost:8080/webjars/jquery/3.6.1/dist/jquery.js

在这里插入图片描述

1.2 欢迎页

先把 yaml 中的内容去掉。因为要去掉默认静态资源访问前缀,否则导致 index.html 不能被默认访问。

在静态资源访问路径下创建 index.html

访问 http://localhost:8080/ 时默认就是访问刚才创建的 index.html

1.3 自定义图标

favicon.ico 在配置的静态内容位置中检查。

2. 静态资源配置原理

  • SpringBoot 启动默认加载 xxxxAutoConfiguration 类(自动配置类)。
  • 找到 spring-boot-autoconfigure 包下的 web/servlet/WebMvcAutoConfiguration 类。

可以看到上面的注解:

@AutoConfiguration(after = { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
		ValidationAutoConfiguration.class })
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)

给容器中配了什么功能:

@Configuration(proxyBeanMethods = false)
@Import(EnableWebMvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties.class, WebProperties.class })
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {
}

配置文件的相关属性和 xxx 进行了绑定:

  • WebMvcProperties → \to spring.mvc
  • WebProperties → \to spring.web

一个配置类只有一个有参构造器,有参构造器所有的参数的值都会从容器中确定:

public WebMvcAutoConfigurationAdapter(WebProperties webProperties, WebMvcProperties mvcProperties,
		// 找 Spring 的 beanFactory
		ListableBeanFactory beanFactory, ObjectProvider<HttpMessageConverters> messageConvertersProvider,
		// 找到资源处理器的自定义器
		ObjectProvider<ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider,
		ObjectProvider<DispatcherServletPath> dispatcherServletPath,
		// 给应用注册 Servlet,Fliter。。。
		ObjectProvider<ServletRegistrationBean<?>> servletRegistrations) {
	this.resourceProperties = webProperties.getResources();
	this.mvcProperties = mvcProperties;
	this.beanFactory = beanFactory;
	this.messageConvertersProvider = messageConvertersProvider;
	this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
	this.dispatcherServletPath = dispatcherServletPath;
	this.servletRegistrations = servletRegistrations;
	this.mvcProperties.checkConfiguration();
}

2.1 资源处理默认规则

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
	if (!this.resourceProperties.isAddMappings()) {
		logger.debug("Default resource handling disabled");
		return;
	}
	// webjars 规则
	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);
		}
	});
}

很多属性都可以在配置文件修改:

spring:
#  mvc:
#    static-path-pattern: /resources/**

  web:
    resources:
      static-locations: [classpath:/public, classpath:/static]
      add-mappings: true       # 静态资源是否生效
      cache:
        period: 11000        # 静态资源缓存周期 单位: 秒
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java学习平台是一个基于Spring Boot框架的Web应用,专为希望学习和提高Java编程技能的用户设计。该平台提供了一系列互动课程、实战项目和评估工具,帮助用户从基础语法到高级概念全面掌握Java语言。 系统的主要功能包括: 1. 课程管理:平台包含多门由浅入深的Java课程,涵盖基础知识、面向对象编程、数据结构、多线程等主题。 2. 视频教学:每门课程都配有高清视频讲解,由经验丰富的讲师授课,便于用户理解和吸收知识点。 3. 编程练习:提供在线代码编辑器,允许用户实时编写、测试和调试代码,支持多种编程语言。 4. 项目实战:通过实际项目练习,用户可以将所学知识应用于真实场景中,增强解决实际问题的能力。 5. 考试与认证:设置不同级别的在线考试,用户可以通过考试获得认证证书,证明其Java技能水平。 6. 社区交流:构建了一个技术社区,用户可以在此讨论问题、分享经验或求助于其他用户和专家。 7. 进度跟踪:系统记录用户的学习进度和成绩,帮助他们有效规划学习路径。 8. 移动适应性:支持移动端访问,确保用户在不同设备上均可继续学习。 本系统采用前后端分离的开发模式,前端可能使用React、Angular或Vue.js等现代JavaScript框架来构建用户界面,后端则利用Spring Boot提供的快速开发能力实现RESTful API接口。数据库通常选用MySQL或其他关系型数据库来存储用户资料、课程信息和学习进度等数据。 Spring Boot的使用使得项目具有快速搭建和易于部署维护的特点,同时Spring Boot生态系统中丰富的插件和组件支持了系统的快速开发和扩展。系统还考虑到了易用性和无障碍访问,使得不同水平的用户都能轻松上手。 总体而言,基于Spring Boot的Java学习平台提供了一个全面、高效、互动的学习环境,极大地促进了用户对Java语言的学习和理解,是现代教育技术中的重要组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇咔咔负负得正

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值