目录
[二.Spring MVC](#二.Spring MVC)
[二.Cookie和Session------HTTP 协议的「无状态」问题](#二.Cookie和Session——HTTP 协议的「无状态」问题)
[三.Sping IoC和DI](#三.Sping IoC和DI)
[1.属性注⼊(Field Injection)](#1.属性注⼊(Field Injection))
[2.构造⽅法注⼊(Constructor Injection)](#2.构造⽅法注⼊(Constructor Injection))
[3.Setter 注入(Setter Injection)](#3.Setter 注入(Setter Injection))
[yml 配置](#yml 配置)
[2. 配置日志级别](#2. 配置日志级别)
1.logging.file.name:设置日志的路径和文件名
[2.logging.file.path:设置存储日志的路径, 文件名为固定的spring.log](#2.logging.file.path:设置存储日志的路径, 文件名为固定的spring.log)
一.SpringBoot
以Spring Framework为基础,可以使用Spring Framework中的Spring MVC,Spring IOC,Spring DI,SpringAOP
组成
src/main/java: Java 源代码
/static:静态资源文件夹, 比如js, css, html等静态文件, 不需要服务器数据进行绑定的页面
/templates:模版资源文件夹, 主要存放动态模板文件, 比如JSP, Freemarker,Thymeleaf等需要服务器动态渲染数据的文件
src/test/java: 测试代码源代码
target: 编译后的文件路径
pom.xml: maven 配置文件
4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否⼀致
5xx 的状态码表示服务器出现错误, 往往需要观察页面提⽰的内容和 Tomcat 自身的日志, 观察是否存在报错
二.Spring MVC
web应用程序⼀般分为三层,即:Controller、Service、Dao
浏览器发起请求, 先请求Controller, Controller接收到请求之后, 调用Service进行业务逻辑处理, Service再调用Dao
完整的请求路径=【类上注解】 + 【方法上注解】
注解
1.@RestController
@RestController返回的是数据
@RestController = @Controller + @ResponseBody
@Controller返回的是页面视图,可以解析HTML,如果要返回数据加上@ResponseBody
2.@RequestMapping
完整的请求路径=【类上注解】 + 【方法上注解】
把【前端的 HTTP 请求】和【后端的 Java 方法 / 类】做绑定映射
用来在浏览器访问实现对应功能的接口,以/开始
访问一般都是http://127.0.0.1:8080/后面加上资源路径
属性1.value
请求的 URL 路径,可以实现多路径,和第一个路径格式相同"/ "
属性2.method
@RequestMapping 既支持get请求, 又支持post,请求方式写错,直接报 405 错误
@GetMapping("/ ")=@RequestMapping(value="/ ",method= RequestMethod.Get)
@PostMapping("/ ")=@RequestMapping(value="/ ",method= RequestMethod.Post)
属性3.params
指定「前端请求必须携带某个参数」,才会匹配该方法
属性4.headers
指定「前端请求必须包含某个请求头」,才会匹配该方法
3.@RequestParam
获取【URL 地址栏中 ?后面拼接的「键值对」请求参数】
前端传的参数名和后端方法的形参名完全一致,直接在形参前加@RequestParam即可
参数名不一致的可以用来重命名前后端的参数值,用和前端相同的名字来接收前端传来参数,然后在后端进行重命名
传递集合------定义一个@RequestParam List<>
4.@RequestBody
只能用在【POST/PUT】请求中,GET 不能用
接收前端传来的【纯 JSON 格式字符串】,并自动将 JSON 数据封装 / 转换为 Java 的实体类对象
设置参数是非必填的required = false
@JsonProperty("前端key名") 标注实体类属性,用和前端相同的名字来接收前端传来参数,然后在后端进行重命名
5.@PathVariable
获取 URL 路径中的动态参数,并绑定到对应的参数中
传递单个参数:@GetMapping("/{参数名}") + @PathVariable 形参
传递多个参数:多个{参数名}即可
6.@RequestPart
接收上传的文件
获取单个文件:@RequestPart("参数名") MultipartFile file
获取多个文件:只需要把MultipartFile改成数组 /集合 MultipartFile[] files
二.Cookie和Session------HTTP 协议的「无状态」问题
1.设置Cookie
在传参数时传入HttpServletResponse response,使用response中的addCookie
2.获取Cookie
方法一
在传参数时传入HttpServletRequest request,然后定义一个cookies来拿去request中的getCookies
Cookie[ ] cookies = request.getCookies( )
方法二
在传参数时传入@CookieValue,参数名和传入的cookie参数名要一致
3.存储Session
在传参数时传入HttpServletRequest request然后定义一个session来拿取request中的getSession
HttpSession session = request.getSession( )
4.获取Session
Session是服务器端的机制, 我们需要先存储, 才能再获取
方法一
在传参数时传入@SessionAttribute(value = " ",required = false)
required=false:非必填,没有这个key也不会报错,变量值为null
方法二
在参数传入HttpSession session,然后调用getAttribute(" ")
方法三
在传参数时传入HttpServletRequest request
定义HttpSession session = request.getSession();然后调用 session中的getAttribute
5.获取Header
方法一
在传参数时传入HttpServletRequest request,然后调用request中的getHeader
方法二
在传参数时传入@RequestHeader(" ")
三.Sping IoC和DI
IoC
Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器
Spring 容器 管理的主要是对象, 这些对象, 我们称之为"Bean". 我们把这些对象交由Spring管理, 由Spring来负责对象的创建和销毁.
1.类注解:
@Component(组件存储)
@Controller:控制层, 接收请求, 对请求进⾏处理, 并进⾏响应
@Servie(服务存储):业务逻辑层, 处理具体的业务逻辑
@Repository(仓库存储):数据访问层,也称为持久层. 负责数据访问操作
@Configuration(配置存储):配置层. 处理项⽬中的⼀些配置信息
@Controller , @Service ,@Repository,@Configuratio,这些注解被称为 @Component 的衍生注解

2.方法注解
@Bean(方法注解要配合类注解使用)
主动获取容器中的方法
(
从Spring容器中获取对象:在方法前面加上@SpringBootApplication
ApplicationContext context =SpringApplication.run(SpringIocDemoApplication.class, args);
从Spring中获取UserService对象
管理的方法名 对象名 = context.getBean();
)
当@Bean定义多个对象时,用
管理的方法名 对象名 =(管理的方法名) context.getBean(管理的方法);
重命名 Bean:@Bean(name = {" "})
@ComponentScan配置扫描路径({" "})------一般不用设置,都包含在@SpringBootApplication中,一般把@SpringBootApplication放在我们希望扫描的包的路径下, 这样我们定义的bean就都可以被扫描到
DI
容器在运行期间, 动态的为应⽤程序提供运行时所依赖的资源,称之为依赖注⼊
注入分为三种
1.属性注⼊(Field Injection)
使⽤ @Autowired(把对象取出来放到某个类的属性中)
类型注入(只能⽤于 IoC 容器,如果是非 IoC 容器不可用,不能注入Final修饰的属性)
2.构造⽅法注⼊(Constructor Injection)
在要注入参数的构造方法上面加上@Autowired
如果类只有⼀个构造方法,那么 @Autowired 注解可以省略;如果类中有多个构造方法,
那么需要添加上 @Autowired 来明确指定到底使用哪个构造⽅法
(可以注⼊final修饰的属性,注⼊的对象不会被修改)
3.Setter 注入(Setter Injection)
Setter方法是"set" 开头,后跟属性名(首字母大写)
(不能注⼊⼀个Final修饰的属性)
@Primary:当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现
@Qualifier:指定当前要注⼊的bean对象,在@Qualifier的value属性中,指定注⼊的bean的名称------@Qualifier(" ")
@Resource:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称
@Resource(name = " ")
四.SpringBoot配置(#"来添加注释)
配置文件配置
roperties配置
properties 是以键值的形式配置的,key 和 value 之间是以"="连接的
properties读取配置@Value("${key}")
yml 配置
key: value(冒号后有一个空格不能省略)
配置不同数据类型:类型.yml常量名=
内容配置
配置字符串时
单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串
双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表示本⾝的含义
配置为空时:null.value: ~ 空字符串:empty.value: ''
yml读取配置@Value("${ }")
配置对象
当许多常量属于同一个常量时,可以用大括号包含那几个常量
同一个常量名: {key: value}
@ConfigurationProperties:读取yml里的某个类型中的多个元素
此时要用@ConfigurationProperties(prefix ="同一个常量名")来读取
配置集合
用相同常量名不同内容用-来给赋值
用@ConfigurationProperties(prefix ="同一个常量名")来读取
配置Map
可以用对象的形式同一个常量名: {key: {key: value}}
用@ConfigurationProperties(prefix ="同一个常量名")来读取
五.SpringBoot日志(可以使用lombok调用)
使用日志框架 Slf4j------Logger 对象是属于 org.slf4j 包下的
打印日志:private static Logger logger = LoggerFactory.getLogger(类名.class)
日志的级别从⾼到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE
1.日志分类
FATAL: 致命信息,表示需要立即被处理的系统级错误
ERROR: 错误信息, 级别较⾼的错误日志信息, 但仍然不影响系统的继续运行
WARN: 警告信息, 不影响使用, 但需要注意的问题
INFO: 普通信息, 用于记录应用程序正常运行时的⼀些信息, 例如系统启动完成、请求处理完成等
DEBUG: 调试信息, 需要调试时候的关键信息打印
TRACE: 追踪信息, 比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)
2. 配置日志级别
Properties配置
logging.level.root=debug
yml配置
logging:
level:
root: ⽇志的级别
3.日志持久化
1.logging.file.name:设置日志的路径和文件名
Properties配置
logging.file.name=存储位置/存储名称.log
yml配置
logging:
file:
name: 存储位置/存储名称.log
2.logging.file.path:设置存储日志的路径, 文件名为固定的spring.log
Properties配置
logging.file.path=logging.file.path=存储位置
yml配置
logging:
file:
path: 存储位置
4.日志文件分割
Properties配置
logging.logback.rollingpolicy.file-name-pattern=
${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz(默认日志分割后的文件名格式)
logging.logback.rollingpolicy.max-file-size=分割大小
(日志文件超过这个⼤⼩就⾃动分割)
yml配置
logging:
logback:
rollingpolicy:
max-file-size: 分割大小
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz