Spring Boot(六)--------Web开发、静态资源导入
13、Web开发
13.1 简介
- jar:webapp
- Spring Boot帮助我们自动装配
- xxxxAutoConfiguration:向容器中自动配置组件
- xxxxProperties:自动配置类,装配配置文件中自定义的一些内容
- 思考:Spring Boot到底帮我们配置了什么?能否进行修改?哪些可以修改?能否扩展?
13.2 使用Spring Boot的步骤
- 创建一个Spring Boot应用,选择我们需要的模块,Spring Boot会默认将我们需要的模块自动配置好
- 手动在配置文件中配置部分配置项目,就可以运行起来了
- 专注编写代码业务,不需要考虑各种配置
14、静态资源处理
14.1 静态资源映射规则
- 新建一个SpringBoot项目,写一个测试用的controller,运行成功
- 在SpringBoot项目中,SpringMVC的所有web配置都在
WebMvcAutoConfiguration 这个配置类中 - 在其中找到
WebMvcAutoConfigurationAdapter ,其中放了很多关于SpringMVC的配置,在其中找到一个名为addResourceHandlers() 的方法,用于添加资源处理 - 自动配置文件在WebMvcProperties中
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
registration.addResourceLocations(new Resource[]{resource});
}
});
}
}
- 比如所有的
/webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源
14.2 什么是webjars
14.3 第一种访问静态资源的方法
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.5.1</version>
</dependency>
14.4 第二种访问静态资源的方式
public String[] getStaticLocations() {
return this.staticLocations;
}
this.staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
- 访问
/** 就可以访问到resources文件夹下的东西 - 综上,得出结论可以存放静态资源的四个位置为
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
14.5 自定义静态资源路径
- 可以通过配置文件来指定,哪些文件夹是我们需要放静态资源的,这种情况下官方定义的静态资源文件夹就失效了
spring.resources.static-locations=classpath:/coding/
14.6 总结
15、首页处理
15.1 首页探究
@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));
}
15.2 首页图标设置(2.2.0+版本)
- 将选好的图片改为.ico后缀,一般命名为favicon.ico,将其放在resources文件夹下的static文件夹下
- 在首页index.html中设置
<link rel="icon" href="/favicon.ico">
|