likes
comments
collection
share

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

作者站长头像
站长
· 阅读数 20

这篇确实有点干 全是文字看完一定会收获满满!!

看晕了就休息会儿doge

第一部分 Servlet

1.1 什么是Servlet?

Servlet是Java Servlet的简称,称为小服务程序或服务连接器,是用Java编写的服务器端程序。它具有独立于平台和协议的特性,主要运行在支持Java的应用服务器中,如Tomcat、Jetty等(所以Tomcat也被称为Servlet容器)。Servlet程序需要依赖Tomcat才能运行(本篇后面马上要讲到Tomcat)

Servlet是Java EE规范的一部分,用于处理来自Web客户端(如浏览器)的请求并生成响应。以下是对Servlet的详细解释:

1.2 Servlet主要功能

  • 处理请求和生成响应:Servlet作为Web服务器和客户端之间的中间层,负责接收客户端的请求,处理这些请求,并生成相应的响应发送给客户端。
  • 生成动态Web内容:Servlet可以根据客户端的请求动态地生成HTML、XML、JSON等格式的Web内容。
  • 访问服务器端资源:Servlet可以访问服务器上的各种资源,如文件、数据库等,以获取需要的数据。
  • 与JSP协作:Servlet经常与JSP(Java Server Pages)协作,共同生成动态的Web页面。Servlet负责处理业务逻辑,而JSP则负责页面的展示。

1.3 Servlet工作原理

  • 请求接收:当Web客户端(如浏览器)向服务器发送请求时,服务器会根据请求的URL找到对应的Servlet。
  • 处理请求:Servlet接收到请求后,会执行相应的业务逻辑,如查询数据库、处理表单数据等。
  • 生成响应:Servlet处理完请求后,会生成相应的响应内容,如HTML页面、JSON数据等。
  • 响应发送:Servlet将生成的响应内容发送给服务器,服务器再将响应发送给客户端。

看到这里是不是有点晕啦哈哈 没事看我下面来解释一下:

Servlet就像是Web服务器(比如Tomcat、Jetty等)和Web应用之间的一个“小助手”或者“中间人”。当你通过浏览器访问一个网站时,你的请求会先到达Web服务器。但是,服务器本身并不直接处理这些请求来生成你看到的网页内容。这时候,Servlet就登场了。 (是不是清晰一些了哈哈 接着看)

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

下面是详细的工作流程:

  1. 用户请求

    • 用户在客户端(通常是浏览器)输入一个URL并发送HTTP请求。
  2. Web服务器接收请求

    • Web服务器(如Apache HTTP Server、Nginx等)接收到来自浏览器的HTTP请求。
    • Web服务器并不直接处理业务逻辑,而是根据配置将请求转发给Servlet容器(如Tomcat)。BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程
  3. Servlet容器处理请求

    • 在Servlet容器中,具体是Tomcat,它接收来自Web服务器的请求。
    • Tomcat并不直接根据URL找到对应的Servlet,而是根据URL和配置(如web.xml或注解)找到Spring MVC的入口:DispatcherServlet。
  4. DispatcherServlet处理请求

    • DispatcherServlet是Spring MVC的前端控制器,它拦截所有进入Spring MVC应用的HTTP请求。
    • DispatcherServlet根据请求的URL查找HandlerMapping,HandlerMapping负责将请求的URL映射到对应的处理器(Controller中的方法)。
    • 当Spring MVC的DispatcherServlet接收到一个请求,并且该请求与控制器中某个方法上的@RequestMapping(或其变体如@GetMapping@PostMapping等)注解相匹配时,该方法就会被调用。
    • 找到对应的处理器后,DispatcherServlet调用该处理器(Controller中的方法)来处理请求。
  5. Controller处理请求

    • Controller中的方法根据请求的内容执行相应的业务逻辑。
    • 处理完请求后,Controller方法会返回一个结果,这个结果可能是ModelAndView对象(包含视图名称和模型数据),或者是直接通过@ResponseBody注解返回的数据(如JSON)。
  6. DispatcherServlet处理响应

    • DispatcherServlet接收到Controller返回的结果后,会根据返回的结果类型进行进一步处理。
    • 如果返回的是ModelAndView对象,DispatcherServlet会调用ViewResolver来解析视图,并使用模型数据渲染视图,最终生成响应内容。
    • 如果返回的是直接的数据(如JSON),DispatcherServlet会直接将数据写入到HttpServletResponse中,作为响应发送给客户端。
  7. Web服务器返回响应

    • Tomcat将DispatcherServlet生成的响应内容发送给Web服务器。
    • Web服务器再将响应内容发送给客户端(浏览器)。
  8. 客户端展示响应

    • 浏览器接收到响应内容后,解析并展示给用户。

返回响应数据用到@ResponseBody(后续会出文章专门讲!)

第二部分 关于Tomcat

Tomcat是一个apache旗下的web服务器(对http协议进行了封装、部署web项目对外提供网上信息浏览服务)、Springboot里已经是内嵌了Tomcat

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

第三部分 DispatcherServlet 详细说明

DispatcherServlet(前端控制器或核心控制器)

他是springboot底层所提供的一个非常核心的servlet—— DispatcherServlet,它实现了servlet规范中的servlet接口,所以它就是一个可以被tomcat识别的server程序。

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

前端浏览器发起的请求会先到Web服务器,再将请求转发给Servlet容器(Tomcat)再通过Spring MVCDispatcherServlet (前端控制器) 来管理和路由请求,DispatcherServlet根据请求的URL找到对应的HandlerMapping再由它将这个请求转给后面的各个controller程序,由controller程序再对请求进行处理,完毕后,controller再将处理完的结果返回给servlet,这个dispatcherServlet再给浏览器响应数据

前端浏览器发起请求会携带http的请求数据

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

web服务器会接收到这个请求协议数据并解析,并且会将解析后的所有请求信息封装到一个对象中(HttpServletRequest)也叫作请求对象,我们的应用程序就可以从这个request对象中来获取请求数据,并进行处理,处理完后tomcat服务器需要根据http响应数据的格式给浏览器响应数据,这里会用到另一个对象(HttpServletResponse)来设置响应对象数据

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

这种架构被称为BS架构(浏览器服务器架构模式),客户端只需要一个浏览器就可以,而应用程序所有的逻辑和数据都是存储在服务端的

优点:维护起来更方便,只需要维护服务端

缺点:体验一般

BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程

扩展:还有一种叫做CS架构(客户端服务器架构模式)如QQ,需要用户下载安装客户端使用的。

缺点:在不同的操作系统下客户端不一样,所以软件的开发和维护比较麻烦

优点:体验感不错,有独立的客户端,有很多的逻辑和数据可以在客户端进行处理,速度会更快一些(比如腾讯视频 可以把很多视频缓存在本地,观看就很流畅,不需要一直联网去加载)

我们主要就是在controller部分进行操作!

是不是收获满满!慢慢理一下思路,没有问题滴!~

还是那句话:“只要一直在跑,就肯定错不了!”

转载自:https://juejin.cn/post/7394721446821396507
评论
请登录