(客户端)发送请求====>(到服务器端) 过程分析

总过程

第一阶段: 客户端发送请求 通过DNS解析找到具体的ip地址和端口号
第二阶段: webserver(Tomca中间件)----->DispatcherServlet
第三阶段:springmvc处理请,求并响应结果返还给客户端

第一阶段 :DNS映射

具体什么是DNS?

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,有人说DNS就是一个本大得电话本,说的也挺贴切 它的基本工作原理可用下图来表示。
在这里插入图片描述

Dns服务的工作过程

我们在浏览器访问www.baidu.com这个域名,dns怎么查询到这台主机那?

在这里插入图片描述

1、在浏览器中输入www.baidu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个ip地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则会查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析记过给客户端,完成域名解析,此解析具有权威性。

4、如果要查询域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找baidu.com域服务器,重复上面的动作,进行查询,直至找到www.baidu.com主机。

6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。不管是本地DNS服务器用是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

DNS域名

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第二阶段: webserver(Tomca中间件)----->DispatcherServlet

在这里插入图片描述

客户端访问网址,服务器端页面响应 --------通过sts断点分析

在这里插入图片描述
在这里插入图片描述
1.初始化会开启一些守护线程
在这里插入图片描述
2.线程池 取出相关线程处理请求
在这里插入图片描述
3.io流读取 socket 封装的HTTP请求数据
在这里插入图片描述
4.服务器在调用service方法把相关请求信息封装到Request对象中
在这里插入图片描述

5.过滤器filter在这里插入图片描述
6.DispatcherServlet前端控制器
在这里插入图片描述

第三阶段:springmvc处理请求,并响应结果返还给客户端

在这里插入图片描述
springmvc执行原理
(1).用户发送请求 至 前端控制器(DispatcherServlet);
提示:DispatcherServlet的作用:接收请求,调用其它组件处理请求,响应结果,相当于转发器、中央处理器,是整个流程控制的中心

(2).前端控制器(DispatcherServlet)收到请求后调用处理器映射器(HandlerMapping)
处理器映射器(HandlerMapping)找到具体的Controller(可以根据xml配置、注解进行查找),并将Controller返回给DispatcherServlet;

(3).前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。处理器适配器经过适配调用具体的Controller;(Controller–> service --> Dao --> 数据库)
Controller执行完成后返回ModelAndView,
提示:Model(模型数据,即Controller处理的结果,Map) View(逻辑视图名,即负责展示结果的JSP页面的名字)
处理器适配器(HandlerAdapter)将controller执行的结果(ModelAndView)返回给前端控制器(DispatcherServlet);

(4).前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析器(ViewReslover)
视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面

(5).前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据填充至视图中);
前端控制器(DispatcherServlet)将填充了数据的网页响应给用户。
其中整个过程中需要开发人员编写的部分有ControllerServiceDaoView;

Spring MVC中的拦截器

Spring MVC中的拦截器基于回调机制,可以在目标方法执行之前,先进行业务检测,满足条件则放行,不满足条件则进行拦截,拦截器原理分析如下图所示:

在这里插入图片描述
各种拦截器Filer
在这里插入图片描述

Servlet本质

Servlet本质是一段运行在服务器端的Java程序,

和之前的Java程序不同的是,Servlet程序无法独立运行,需要将Servlet程序放在服务器中(比如tomcat服务器),由服务器调用才可以执行。在这里插入图片描述
SpringMVC基于Servlet进行封装的框架
在这里插入图片描述

servlet的生命周期

1.加载和实例化
2.初始化
3.请求处理
4.服务终止

Web服务器在与客户端交互时Servlet的工作过程是:

  1. 在客户端对web服务器发出请求
  2. web服务器接收到请求后将其发送给Servlet
  3. Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.
  4. web服务器将从Servlet实例对象中收到的响应结构发送回客户端.
    当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。

request和response

其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),
response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。

每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象。(即,服务器每次处理请求都会创建request和response对象)

在请求处理完,响应结束时,服务器会销毁request和response对象。

猜你喜欢

转载自blog.csdn.net/weixin_48052161/article/details/108501022