当前位置: 首页 > article >正文

Spring Boot Web项目全解析:从前端请求到后端处理

第一章:对静态资源的整合

@ConfigurationProperties(prefix
= "spring.resources", ignoreUnknownFields
= false)public
class ResourceProperties implements
ResourceLoaderAware
{//可以设置和静态资源有关的参数,缓存时间等
    WebMvcAuotConfiguration:
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!this.resourceProperties.isAddMappings()) {
            logger.debug("Default resource handling disabled");
            return;
        }
        Integer cachePeriod = this.resourceProperties.getCachePeriod();
        if (!registry.hasMappingForPattern("/webjars/**")) {
            customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META‐INF/resources/webjars/").setCachePeriod(cachePeriod));
        }
        String staticPathPattern = this.mvcProperties.getStaticPathPattern();
    //静态资源文件夹映射
        if (!registry.hasMappingForPattern(staticPathPattern)) {
            customizeResourceHandlerRegistration(registry.
                    addResourceHandler(staticPathPattern).addResourceLocations(this.resourceProperties.getStaticLocations()).setCachePeriod(cachePeriod));
        }
} /
        /配置欢迎页映射
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(
        ResourceProperties resourceProperties) {
    return new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(),
            this.mvcProperties.getStaticPathPattern());
}
//配置喜欢的图标
@Configuration
@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
public static class FaviconConfiguration {
    private final ResourceProperties resourceProperties;
    public FaviconConfiguration(ResourceProperties resourceProperties) {
        this.resourceProperties = resourceProperties;
    }
    @Bean
    public SimpleUrlHandlerMapping faviconHandlerMapping() {
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
        //所有 **/favicon.ico
        mapping.setUrlMap(Collections.singletonMap("**/favicon.ico",
                faviconRequestHandler());
        return mapping;
    }
    @Bean
    public ResourceHttpRequestHandler faviconRequestHandler() {
        ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
        requestHandler.setLocations(this.resourceProperties.getFaviconLocations());
        return requestHandler;
    }
}
}
  1. 所有 /webjars/**,都去 classpath:/META-INF/resources/webjars/ 中找资源
  2. webjars:以 jar 包方式引入静态资源WebJars - Web Libraries in Jars
  3. 导入依赖:
    <!‐‐引入jquery‐webjar‐‐>在访问的时候只需要写webjars下面资源的名称即可
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>3.3.1</version>
    </dependency>
  4. /**:访问当前项目的任何资,都去(静态资源文件夹)找映射
    "classpath:/META‐INF/resources/",
    "classpath:/resources/",
    "classpath:/static/",
    "classpath:/public/"
    "/":当前项目的根路径
  5. 首页:静态资源文件夹下的所有 index.html 页面,被 /** 映射
    1. localhost:端口号/index页面

第二章:模板引擎

  1. JSP、Velocity、Freemarker、Thymeleaf:
    1. SpringBoot 推荐的 Thymeleaf:语法更简单,功能更强大
  2. 引入 thymeleaf:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    1. 从 Spring 父文件中能看到 SpringBoot 2.0.1 所使用的 thymeleaf 版本是 3.0.9
    2. SpringBoot 启动的时候会自动配置:
      1. org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
    3. 从 ThymeleafAutoConfiguration 的源代码中我们可以得知 ThymelaefProperties 中配置了 Thymeleaf 的规则:
      public class ThymeleafProperties {
          private static final Charset DEFAULT_ENCODING;
          public static final String DEFAULT_PREFIX = "classpath:/templates/";
          public static final String DEFAULT_SUFFIX = ".html";
          private boolean checkTemplate = true;
          private boolean checkTemplateLocation = true;
          private String prefix = "classpath:/templates/";
          private String suffix = ".html";
          private String mode = "HTML";
          private Charset encoding;
          private boolean cache;
      }
    4. 使用 html 作为模板,而且默认的前缀是放在 classpath:/templates/ 下,后缀是 .html
    5. 这些属性可以通过 application.properties 来修改
  3. 示例:
    1. 在 templates 下创建一个 success.html
    2. 在 html 中引入 thymeleaf 的命名空间
      <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. 创建一个 Controller 提供一个访问的方法:
      @RequestMapping("/success")public String hello(Model model){    model.addAttribute("hello","<h1>zhangsan</h1>");  
        return "success";
        }
    4. 在 thymeleaf 模板中取值:
      <!DOCTYPE
      HTML PUBLIC "-//W3C//DTD HTML 4.01       "http://www.w3.org/TR/html4/loose.dtd"
      Transitional//EN">
      html lang="en" xmlns:th="http://www.thymeleaf.org">
      head>
      title>Title</title>
      head>
      body>
      div  th:text="${hello}"> </div>
      body>
      html>

http://www.kler.cn/a/529509.html

相关文章:

  • AI开发学习之——PyTorch框架
  • C#面向对象(封装)
  • 《编写可读代码的艺术》读书笔记
  • Janus-Pro 论文解读:DeepSeek 如何重塑多模态技术格局
  • CNN的各种知识点(一):卷积神经网络CNN通道数的理解!
  • MySQL知识点总结(十七)
  • 解锁Spring Boot 3.1 + JDK 17:分布式系统的变革力量
  • 网络工程师 (14)保护期限
  • 放假前的最后一天
  • 蓝桥杯之c++入门(四)【循环】
  • leetcode_264. 丑数 II
  • 【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance开始,更新于2025/2/2)
  • 【论文分享】Ultra-AV: 一个规范化自动驾驶汽车纵向轨迹数据集
  • 使用 PaddlePaddle 实现逻辑回归:从训练到模型保存与加载
  • x86-64算术逻辑指令
  • string的详细用法c++
  • R绘图 | pheatmap 聚类并设置间隔
  • O3 模型正式上线,能否与 DeepSeek 一较高下?
  • ubuntu直接运行arm环境qemu-arm-static
  • C++语法·十伞
  • git基础使用--3---git安装和基本使用
  • 属性编程与权限编程
  • 【python】python油田数据分析与可视化(源码+数据集)【独一无二】
  • 高斯光束介绍及光斑处理
  • java-抽象类注意点
  • python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理