目录
[2.Spring boot](#2.Spring boot)
[2.2Maven Vs Spring boot](#2.2Maven Vs Spring boot)
[3.Spring web MVC](#3.Spring web MVC)
[3.2.7.1Cookie 介绍](#3.2.7.1Cookie 介绍)
1Maven
1.1简介
通俗的来讲Maven主要是用来进行项目构建和依赖管理
项目构建 :帮你创建一个项目骨架(比如main java文件等)以及帮你进行编译、打包、运行、部署;依赖管理就是在项目中你要引入一些jar包、框架,第三方库等Maven可以通过pom.xml 文件进行快速的引入依赖,以及在引入依赖时会有依赖的传递 (当引入一个jar包时,为了实现这个jar包,又会附带着给一些别的的jar包),在这个过程中就可能会发生依赖冲突 (相同的jar包,版本号不同就会导致不知道要使用哪一个jar包)此时就要进行**排包。**总的来说,Maven就相当于一个管家,帮你轻松的管理好你从外面拿回来的东西
1.2Maven的使用
Maven仓库:分为本地仓库(自己电脑)和远程仓库
远程仓库:分为中央仓库(开源的相关依赖)、私有仓库
中央仓库:Maven Repository: Search/Browse/Explore
Maven地址:Central Repository:

这些操作就是用来进行项目构建的;常用的有clean(清理项目,删除之前生成的所有文件);compile(编译,将.java文件编译为.class文件);package(打包);install(下载到本地);deploy(上传到远程仓库)
要使用相仓库中相关的jar包可以通过pom文件来引入相关的依赖
1.2.1添加依赖
接下来以通过引入Mysql中的JDBC为例,进行说明:
首先一般通过maven仓库找到自己想要的jar包或者框架

一般都有现成的依赖配置,直接copy就可以
也可以手动对pom文件进行配置

依赖引入主要由 groupId artifactId version构成
groupId :标识该依赖属于哪一个组/类型
artifact:标识依赖在该类别中的具体位置
也就是说一个依赖的具体表示:groupId + artifactId
此外还要选择需要的版本号(一般选择次新的,使用多的)
版本号:大版本号(架构、需求) + 中版本号(功能的变更) + 小版本号(bug的修改)

注意在引入mysql文件时还引入了另一个依赖,这就是依赖的传递

如果我在手动引入一个protobuf 的jar包,相当于该jar包就会有两个不同的版本(一般情况下是使用最小路劲的依赖,这样也可以不用排包,但一切以实际为准),这样就可能会发生依赖冲突 (不知道使用哪一个版本),此时就要进行排包
1.2.2排包

在添加的依赖中进行排包 通过 exclusions exclulsion groupId artifactId 的方式进行排包
当然可以使用一些工具来帮助我们更好的进行依赖的管理,

通过这样的方式可以快速进行排包

可以利用插件进行管理,清楚的看到哪些发生了依赖冲突,快速进行排包
2.Spring boot
2.1简介
Spring boot也是用来提高开发效率的,可以自动帮你配置好MVC相关的环境,也就是是要起来更方便(就好比之前买火车票都是在线下站台处进行买票,但是现在可以直接通过12306进行买票,就大大节约了时间成本,这里的Spring boot也是同样的道理)Spring boot(脚手架) 的存在就相当于给项目的搭建装上了飞行器,大幅度提高了效率。
2.2Maven Vs Spring boot
Maven 聚焦于项目构建和依赖管理,站在一个管理者的角度进行宏观的决策
Spring boot 聚焦于全流程开发效率优化,如web相关的环境,数据库相关的环境的,站在一个"打工人的角度",高效的将配置落地
3.Spring web MVC
3.1简介
Spring MVC是一种软件设计的架构模式,是通过web浏览器来实现客户端服务器之间的交互
V:view 视图 用来展示给用户的界面
M:model 模型 使用特定的业务逻辑来处理用户的请求,同时也是数据的载体,并将处理的结果传递给controller
C:controller 控制器, 对于用户的请求进行分析,然后决定使用哪一个模型进行处理,最后再将处理的结果返回给用户
3.2具体使用
要想进行交互,可以分为三步:建立连接,客户端进行请求,服务端进行响应
这些操作再MVC中是通过相应的注解进行区分不同的功能
注意:注解的设计是不分先后顺序的
"注解"就相当于是一个标签,用来表明这个代码具有什么样的功能,具体的实现是通过Spring框架来实现对应的功能的,对某些功能进行封装,便于程序员使用,通过编译后,又会变成原来的代码。
接下来通过注解的学习,来进一步了解MVC的使用,主要介绍一些常用的注解,以及对应的属性(主要包括:参数的传递、数据的格式、获取用户http请求中的一些信息,以及响应时对一些格式、状态、参数的配置)

通过这个简单的代码发现,通过浏览器就可以直接进行访问了,再将其部署到云服务器上,就相当于一个项目了,简直太神奇了!!!
这就是通过**@RestController 和 @RequestMapping**来进行实现的
3.2.1@RestController
这个注解用来表明这是一个控制器,相当于给这个类打了一个标签告诉Spring如果有用户进行访问时就直接从这里进行查找(提高了查询效率),相当于一个启动标签,后面还会进一步进行讲解
3.2.2@RequestMapping
该注解用来进行路由映射,用来表示用户要进行访问的Url路径
那么用户是通过什么方式进行请求的呢?我们可以通过postman 和抓包工具进行观察

观察发现可以使用任意方式进行请求,当然可以通过method属性,对用户的请求方式进行限制

这样设置之后只可以通过get方式进行请求
此外还可以通过@GetMapping、@PostMapping 等等标签进行设置,只是@RequstMapping是通用的
接下来演示一些不同类型参数的传递


注意:当参数类型不匹配时会报400错误

当使用int类型接收参数是,不传参会报500错误
前端到后端:传递参数是,一开始默认都是String类型,然后转换为定义的类型

对于Boolean 类型,1->true, 0->false 传其他类型就会报400

对于数组的传参可以多次传递
3.2.3@RequestParam

对于集合类型参数的传递要在前面加上@RequesParam注解,同时加上该注解后表示为必传参数,要通过required属性进行修改


此外@RequestParam还可以用来对参数重命名
总结 :
- 用来传递集合类型
- 对参数进行重命名
- 默认为必传参数,通过required进行修改

注意:左图没有获取到参数是因为实体类没有设置set方法,所以没有接收到参数
3.2.4JSON文件格式的传输
在进行参数传递时,一般通过对象/JSON格式格式进行传递,除非只有一个参数时才直接通过参数进行传递,因为这样具有可扩展性,以及前后端之间的协调工作
通过添加**@ReqeustBody**注解来声明可以通过JSON格式进行传输

文件传输的格式:protobuf json xml
轻量级从左到右降低,可读性从左到右增强
protobuf 是用二进制进行存储,一般适用于高性能大规模传输
3.2.5@PathVariable

提取 URL 路径中的动态参数,绑定到控制器方法参数
可以使url更加简洁,
应用场景:url中有固定结构+动态值
3.2.6@RequestPart

RequestPart 通常用来进行文件传输(Multipart)和复杂数据的上传
接下来讲讲对于http请求和响应相关的设置和获取
3.2.7获取Cookie信息
3.2.7.1Cookie 介绍
首先要知道http的通信具有无记忆性,也就是说发了信息之后也就不知道之前干了什么(比如:去医院开要,和医生说我要开之前在这里开过的药,但是因为是无记忆性的,所以医生并不知道),这就是http的特性,这样可以是传输变得更加简单,但是想要进行长时间通信,http又通过Cookie 和 Session 来使之前的信息得以保留(相当于医生通过刷你的身份证就可以看到你所有的就诊信息通过这个身份证就可以将信息进行保存)
总的来说(Cookie VS Session),Cookie 和 Session 都是用来记录 用户信息的,但是Cookie是保存在客户端 容易被获取到,Session 是保存在服务端, Cookie 和 Session 可以通过一个SessionId 进行标识
用户第一次进行请求后,响应时,通过set-cookie 的方式进行设置,此后的一定时间内,若客户端进行再次请求都会带上之前的cookie信息
注意:用户信息的设置不是一定要通过cookie 进行设置,也可以通过url等方式进行,
3.2.7.2HttpServletRequest
HttpServletRequest 可以用来获取客户端请求中的所用信息

3.2.7.3@CookieValue

还可以通过@CookieValue()加上要获取的参数的形式来得到Cookie字段
3.2.8设置和获取Session
方法一、通过HttpServletRequest进行获得Session对象后进行设置和获取

方法二、通过HttpSession类直接进行获取

这里就相当于是HttpServletRequest少了一步,都是同样的性质
方法三、@SessionAttribute注解

该方法和CookieValue类似
3.2.9获取Header头部信息
方法一通过HttpServlet中的getHeader方法进行获取

方法二、通过@RequestAttribute注解进行获取

接下来在介绍一些响应中常用的参数 如:状态码 数据类型(content-type) 响应头等的设置
3.2.10设置状态码

通过HttpServletResponse来进行设置,这里状态码,所代表的含义都是认为进行赋予的
3.2.11content-type
方法一、通过HttpServletReponse 进行获取

方法二、通过注解进行获取可以在RequestMapping中通过添加produces属性来进行设置文件的传输类型

3.2.12响应头参数的设置

3.3常见的状态码
从宏观上看:
2XX:请求成功
3XX:重定向
一个资源进行转移后,用户访问之前的资源路径后进行重定向后可以将其跳转到资源所在的新路径
4XX:发生客户端错误
404:资源不存在 400:请求的查询字符串参数错误 405:请求方法错误
5XX:服务器错误