栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring源码笔记(SpringMvc执行流程 Bean生命周期 http三次握手 四次挥手)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring源码笔记(SpringMvc执行流程 Bean生命周期 http三次握手 四次挥手)

当用户发送请求 咱这个项目是怎么个流程呢?

http的三次握手----?四次挥手?

三次握手 :
1.客户端发起一个要创建连接的数据包(SYN/seq)的请求发送给服务器
2.服务器端接收到客户端的请求,返回一个SYN/ACK 标志的数据包,其中ACK就是客户端发送Seq+1,而且再次发送一个服务端的Seq。
3.客户端接收到服务端发送的请求,表明允许连接了,再次向服务端发送数据确认可以接收到的数据,发送ACK等于上一步返回的Seq+1.以及新的数据Seq

为什么要三次握手?

就是为了防止服务端开启一些无用的连接(毕竟网络连接是有延迟的)需要三次握手来确定客户端于服务器端保持连接以及发送数据成功

四次挥手又是个什么玩意?

1.Client向Server发送Fin包,表示Client主动要关闭连接,而且进入FIN_WAIT_1状态,等待Server返回Ack包。此后Client不能向Server发送数据,但是能读取数据
2.Server接收FIN包后向Cient发送ACK包,然后进入Close_WAIT状态,此后Server不能读取数据了,但是可以想Client发送数据
3.Client接收Server返回的ACk包后进入Fin_WAIT_2状态,等待Server发送FIN包
4.Server完成数据的发送后,将FIn包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server不能读取数据,也不能发送数据
5.Client接收Fin包后想Server发送ACK包,然后进入Time_WAIT状态,接着等待足够长的时间(2MSL)确保Server接收ACK包,最后回到CLOSED窗台,释放网络资源

为什么要四次挥手呢?

因为TCP是全双工信通道,就是客户端于服务端建立两条通道。
1.客户端对服务端说,老子要关闭输入通道了,服务端说,行,你关吧,我这边也关闭这个通道。
2.服务端对着客户端说,你关了这个通道了,该我了,我也要关闭这个输入通道了。客户端说,行吧,你关吧,我把这个通道关闭。

这里是引用

Spring源码解析

客户端发送请求------http://localhost:8080/项目名字/接口请求

1.浏览器 先将域名转为ip地址(第一步,在计算机本地的hosts文件中找域名对应的ip 如果没有找到的话,那就去dns服务器中去找。将对应的域名装为ip地址)2.获取ip地址后,就能找到网络中的具体计算机了,然后根据端口号,找到对应计算机的对应端口号的程序 也就是Tomcat 这时候Tomcat启动3.Tomcat启动后会根据Tomcat的部署文件进行部署,也就是进入项目文件中4.进入项目文件中会找到web.xml(Spring-MVC)创建一个Spring容器或者是启动主方法(Spring-boot)直接创建一个Spring容器。5.创建完Spring容器之后会根据web.xml配置文件中的Spring-mvc.xml的路径找到这个xml文件,且找到需要进行注解扫描的包(SpringMVC)找到@Controller注解或者什么@Bean注解 @Service @Component等,把这些类new一个对象 放在Spring容器中 这个Spring容器其实就是一个Map集合,他的key就是Bean的名字,他的value就是Bean的对象-------如何放在SPring容器中的呢?Spring底层是把每一个元素分别转换为一个BeanDefinition对象,其中保存了从配置文件中读取到该Bean的各种信息,然后通过BeanFactory对Bean进行注册,等到我们用的时候,直接对着Bean工厂也就是BeanFactory给一个类型,这个工厂直接返回一个Bean对象,当然,这种情况是属于单例Bean6.Spring容器中有对象了,然后我们在使用,如何使用?使用依赖注入(针对的类的一个特定属性,所以是一次操作(一个)),或者 是自动装配(针对的是一个类下的所有属性(所以可能是多个),所以是一次批量操作(多个))7.Bean的初始化前(@PostConstrut) 初始化(Initinlizing接口) 初始化后(AOP)如果使用Aop的话 会使用代理设计模式 生成一个代理对象 ,这个代理对象就是一个普通对象,他底层是通过继承普通对象 ,且实现普通对象的方法,但是代理对象中有一targrt属性 ,这个target属性是Bean对象(有数据的对象)
AOP:面向切面 —面对交叉逻辑的情况,把一个东西封装成一个切面,直接注入到对象中,使这个对象或者方法增强 但是 只能是Public
权限:Public 所有类可见 protected 对子类可见 对本类可见 private 对本类可见8.Bean初始化完毕,Spring会使用适配器进行适配,适配出@Controoller
这个@Controller对象会根据路由上的地址进行查找 ,底层是通过反射,循环便利这个方法,且看一看他有没有这个注解,有的话,查看这个注解的参数值与路由对不对应,对应的话,直接运行这个方法。9.运行这个方法,会返回一个ModelAndView对象,或者是直接返回给前端一个JSON值,如果是ModelAndView对象会给试图解析器,试图解析器会根据这个对象返回一个试图 也就是view给前端控制器,前端控制对其进行渲染,且传给前端做响应

Spring SpringMvc SpringBoot有什么区别?
Spring:他是一个IoC容器 他是通过控制反转进行依赖注入,使代码耦合性降低,他是一个胶水型框架,他是一个IOC容器
SpringMvc:他是一个SPring的进行web开发的一种方案,M指的是数据模型,V指的是用户界面 C是控制器。他的目的即使实现代码分离。
SpringBoot:他是一个开发工具包,他里面内嵌了tomcat ,还有什么Mysql。redis。mongodb。他没有xml文件 只需要在一个yml文件中就可以进行配置。SpringBoot====SPring+SpringMvc

SpringMvc的运行流程
用户发送请求,前端控制器接收请求,调用处理器映射器,找到具体的处理器,生成处理器与拦截器(如果有的话)一并返回给前端控制器,前端控制器调用处理器适配器,适配调用合适的处理器Controller,Controller返回一个ModelAndView对象,处理器适配器把这个对象返回给前端控制器,前端控制器接收这个对象且传给试图解析器,试图解析器根据这个对象返回view,且返回给前端控制器,前端控制器渲染view,响应给客户端

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/721386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号