Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 手写Spring

  • SSM

  • SpringBoot

    • 入门
    • 注解
    • 源码分析
    • 核心功能
      • yaml
      • 静态资源访问
      • 请求变量处理
      • 响应处理
      • Thymeleaf
      • 拦截器
      • 文件上传
    • 问题记录
  • JavaWeb

  • Spring
  • SpringBoot
phan
2023-05-15
目录

核心功能

# 核心功能

# yaml

用于写properties的k-v值。缩进表示层级关系;对象采用{属性名字: 值,...}的方式,数组或者list采用[],属性名+冒号后加空格。

public class Person {
private String userName;
private Boolean boss;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;}
-------
person:
  user-name: cungu
  boss: false
  age: 15
  interests: [ss,s16s,5]
  animal: [sk,ssl,8,5]
  score:
    {jisn: 5,sjf: 5}
  salarys: [51,61115.333]
  all-pets:
    {sjnek: [{name: 88},{name: 89}],dog: []}
  pet:
    name: nie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

其中String加了双引号则会转义为换行...,单引号全部解析为字符串。

# 静态资源访问

  • 静态资源目录resources/static,resources/resources

    原理:静态资源映射的路径是/**,请求时先去找RestController能不能处理,如果不能处理再把路径当成静态资源去找。开发时习惯把静态资源路径映射/resources/**

    spring:
      mvc:
        static-path-pattern: /resources/**
    
    1
    2
    3

    welcome页(index.html)若在默认静态资源目录下,直接访问静态资源路径不加index.html能直接访问。

  • 自定义Favicon,在静态资源添加favicon.ico图标,浏览器页能显示自定义图标。

# 请求变量处理

  • 请求路径/user/{id},采用RestFul+@PathVariable("id")
  • 如果请求路径包含请求参数/user?id=2,使用@RequestParam("id")
  • 如果是通过post表单传到服务器,也可以使用@RequestParam("id")
  • 如果处理方法参数名和请求里变量名相同,则形参可以不加注解,springboot自动绑定
  • 当需要进行页面跳转时,只能@Controller,此时return “redirect:/”才会生效,然后在需要把变量写到浏览器页面的方法用@responseBody,当且仅当controller所有方法都需要显示在页面才使用@RestController
  • session->jsessionid放入cookie->然后每次请求携带这个cookie,因此能找到对应会话存的变量。
  • 分号;后矩阵变量@MatrixVariable(springBoot默认禁用,需要手动开启)

# 响应处理

返回值解析器,判断是不是异步返回值

返回值处理器根据返回值类型,找到匹配的返回值处理器。

  • @ResponseBody
    • 内容协商,浏览器告诉服务器它能接受什么样的内容数据
    • 服务器生产对应内容类型数据
    • SpringMVC遍历消息转换器HttpMessageConverter,看谁能处理(支不支持将Person类转成json)

请求头Accepter可以指示浏览器接受的数据类型

# Thymeleaf

  • 创建一个包含公共块儿的公共页面common.html,并自定义声明片段

    <div th:fragment="headermenu" class="header-section">
    </div>
    --------id形式-------------
    <div id="headermenu" class="header-section">
    </div>
    
    1
    2
    3
    4
    5

    然后在其他页面使用th:insert(common代码块所有内容插入到a标签行内),th:replace(common代码块整体替代a标签)导入

    <a th:replace="common::headermenu"></a>
    <a th:insert="common::headermenu"></a>
    ------id形式------
    <a th:replace="common::#headermenu"></a>
    
    1
    2
    3
    4

# 拦截器

拦截器配置步骤:

  1. 编写拦截器配置类并放置在容器中(实现WebMvcConfigurer接口),配置中指明加载哪些拦截器,拦截哪些路径
    • addPathPatterns("/**"):表示拦截所有请求路径,包括静态资源
    • excludePathPatterns
  2. 编写拦截器,实现HandleInterceptor接口
    • preHandle方法,在Controller方法之前执行
    • postHandle方法,在Controller方法之后执行
    • afterCompletion方法,在页面渲染结束之后执行

# 文件上传

前端表单type="file",如果上传的文件数量有多个,则添加multiple

<input type="file" name="photos" multiple>
1

Controller中,使用springboot封装好的的MultipartFile类来接收文件,服务器通过transferTo(new File(path+getOriginalFilename))方法来将文件保存到指定的路径。通过getOriginalFilename获取文件名。

@PostMapping("/upload")
public String upload(String email, String username, MultipartFile headerImg, MultipartFile[] photos) throws IOException {
    if(!headerImg.isEmpty())
    headerImg.transferTo(new File("/"+headerImg.getOriginalFilename()));
    return "main";
}
1
2
3
4
5
6
编辑 (opens new window)
#Spring
上次更新: 2023/12/15, 15:49:57
源码分析
问题记录

← 源码分析 问题记录→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式