一、使用Spring Boot创建web项目

  1. 使用Spring Initializr创建项目时,勾选Spring Web场景启动器,同时一并选择web场景下需要的其他场景启动器。
  2. Spring Boot默认将这些场景配置好了,只需要在配置文件中指定少量的配置就可以运行起来。
  3. 编写自己的业务代码

    xxxxAutoConfiguration:帮我们给容器中自动配置组件 xxxxProperties:配置类,来封装配置文件的内容

二、静态资源映射规则

2.1 webjars的形式引入静态资源

以jar包的方式引入静态资源。官网地址:http://www.webjars.org/

  1. <!--引入jquery-webjar-->
  2. <!--在访问的时候只需要写webjars下面资源的名称即可-->
  3. <dependency>
  4. <groupId>org.webjars</groupId>
  5. <artifactId>jquery</artifactId>
  6. <version>3.3.1</version>
  7. </dependency>

引入webjars之后,我们通过 localhost:8080/webjars/jquery/3.3.1/jquery.js 即可访问到静态资源。 所有的/webjars/**请求,都去 classpath:/META-INF/resources/webjars/ 路径下找资源。

静态资源映射 - 图1
实际开发中,通过 2.1webjars的形式引入静态资源的操作非常少,缺点明显。我们需要哪些静态资源,只需要自己去下载好,然后放在静态资源文件夹即可,对应2.2部分。

2.2 静态资源文件夹

  1. ## Spring Boot默认的静态资源文件夹 "/" 表示当前项目的根路径
  2. "classpath:/META-INF/resources/",
  3. "classpath:/resources/",
  4. "classpath:/static/",
  5. "classpath:/public/"

访问当前项目的任何资源,如果没有绑定映射路径,着都去静态资源文件夹找映射。 例如:localhost:8080/abc 如果没有绑定/abc请求路径,则去资源文件夹中找abc

  1. public class WebMvcAutoConfiguration {
  2. public static final String DEFAULT_PREFIX = "";
  3. public static final String DEFAULT_SUFFIX = "";
  4. private static final String SERVLET_LOCATION = "/";
  5. @Override
  6. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  7. if (!this.resourceProperties.isAddMappings()) {
  8. logger.debug("Default resource handling disabled");
  9. return ;
  10. }
  11. Integer cachePeriod = this.resourceProperties.getCachePeriod();
  12. if (!registry.hasMappingForPattern("/webjars/**")) {
  13. customizeResourceHandlerRegistration(
  14. registry.addResourceHandler("/webjars/**")
  15. .addResourceLocations("classpath:/META-INF/resources/webjars/")
  16. .setCachePeriod(cachePeriod));
  17. }
  18. String staticPathPattern = this.mvcProperties.getStaticPathPattern();
  19. // 静态资源文件夹映射
  20. if (!registry.hasMappingForPattern(staticPathPattern)) {
  21. customizeResourceHandlerRegistration(
  22. registry.addResourceHandler(staticPathPattern)
  23. .addResourceLocations(this.resourceProperties.getStaticLocations())
  24. .setCachePeriod(cachePeriod));
  25. }
  26. }
  27. // 配置欢迎页映射
  28. @Bean
  29. public WelcomePageHandlerMapping welcomePageHandlerMapping(
  30. ResourceProperties resourceProperties) {
  31. return new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(),
  32. this.mvcProperties.getStaticPathPattern());
  33. }
  34. // 配置喜欢的图标
  35. @Configuration
  36. @ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
  37. public static class FaviconConfiguration {
  38. private final ResourceProperties resourceProperties;
  39. public FaviconConfiguration(ResourceProperties resourceProperties) {
  40. this.resourceProperties = resourceProperties;
  41. }
  42. @Bean
  43. public SimpleUrlHandlerMapping faviconHandlerMapping() {
  44. SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
  45. mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
  46. //所有 **/favicon.ico
  47. mapping.setUrlMap(Collections.singletonMap("**/favicon.ico",faviconRequestHandler()));
  48. return mapping;
  49. }
  50. @Bean
  51. public ResourceHttpRequestHandler faviconRequestHandler() {
  52. ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
  53. requestHandler.setLocations(this.resourceProperties.getFaviconLocations());
  54. return requestHandler;
  55. }
  56. }

欢迎页
静态资源文件夹下的所有index.html页面,被“/”映射。
图标文件
所有的 *
/favicon.ico 都在静态资源文件夹下找