BS架构解析:Servlet、Spring MVC DispatcherServlet及Tomcat的工作流程
这篇确实有点干 全是文字看完一定会收获满满!!
看晕了就休息会儿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就登场了。 (是不是清晰一些了哈哈 接着看)
下面是详细的工作流程:
-
用户请求:
- 用户在客户端(通常是浏览器)输入一个URL并发送HTTP请求。
-
Web服务器接收请求:
- Web服务器(如Apache HTTP Server、Nginx等)接收到来自浏览器的HTTP请求。
- Web服务器并不直接处理业务逻辑,而是根据配置将请求转发给Servlet容器(如Tomcat)。
-
Servlet容器处理请求:
- 在Servlet容器中,具体是Tomcat,它接收来自Web服务器的请求。
- Tomcat并不直接根据URL找到对应的Servlet,而是根据URL和配置(如web.xml或注解)找到Spring MVC的入口:DispatcherServlet。
-
DispatcherServlet处理请求:
- DispatcherServlet是Spring MVC的前端控制器,它拦截所有进入Spring MVC应用的HTTP请求。
- DispatcherServlet根据请求的URL查找HandlerMapping,HandlerMapping负责将请求的URL映射到对应的处理器(Controller中的方法)。
- 当Spring MVC的DispatcherServlet接收到一个请求,并且该请求与控制器中某个方法上的
@RequestMapping
(或其变体如@GetMapping
、@PostMapping
等)注解相匹配时,该方法就会被调用。 - 找到对应的处理器后,DispatcherServlet调用该处理器(Controller中的方法)来处理请求。
-
Controller处理请求:
- Controller中的方法根据请求的内容执行相应的业务逻辑。
- 处理完请求后,Controller方法会返回一个结果,这个结果可能是ModelAndView对象(包含视图名称和模型数据),或者是直接通过@ResponseBody注解返回的数据(如JSON)。
-
DispatcherServlet处理响应:
- DispatcherServlet接收到Controller返回的结果后,会根据返回的结果类型进行进一步处理。
- 如果返回的是ModelAndView对象,DispatcherServlet会调用ViewResolver来解析视图,并使用模型数据渲染视图,最终生成响应内容。
- 如果返回的是直接的数据(如JSON),DispatcherServlet会直接将数据写入到HttpServletResponse中,作为响应发送给客户端。
-
Web服务器返回响应:
- Tomcat将DispatcherServlet生成的响应内容发送给Web服务器。
- Web服务器再将响应内容发送给客户端(浏览器)。
-
客户端展示响应:
- 浏览器接收到响应内容后,解析并展示给用户。
返回响应数据用到@ResponseBody(后续会出文章专门讲!)
第二部分 关于Tomcat
Tomcat是一个apache旗下的web服务器(对http协议进行了封装、部署web项目对外提供网上信息浏览服务)、Springboot里已经是内嵌了Tomcat
第三部分 DispatcherServlet 详细说明
DispatcherServlet(前端控制器或核心控制器)
他是springboot底层所提供的一个非常核心的servlet—— DispatcherServlet,它实现了servlet规范中的servlet接口,所以它就是一个可以被tomcat识别的server程序。
前端浏览器发起的请求会先到Web服务器,再将请求转发给Servlet容器(Tomcat)再通过Spring MVC的DispatcherServlet (前端控制器) 来管理和路由请求,DispatcherServlet根据请求的URL找到对应的HandlerMapping再由它将这个请求转给后面的各个controller程序,由controller程序再对请求进行处理,完毕后,controller再将处理完的结果返回给servlet,这个dispatcherServlet再给浏览器响应数据
前端浏览器发起请求会携带http的请求数据
web服务器会接收到这个请求协议数据并解析,并且会将解析后的所有请求信息封装到一个对象中(HttpServletRequest)也叫作请求对象,我们的应用程序就可以从这个request对象中来获取请求数据,并进行处理,处理完后tomcat服务器需要根据http响应数据的格式给浏览器响应数据,这里会用到另一个对象(HttpServletResponse)来设置响应对象数据
这种架构被称为BS架构(浏览器服务器架构模式),客户端只需要一个浏览器就可以,而应用程序所有的逻辑和数据都是存储在服务端的
优点:维护起来更方便,只需要维护服务端
缺点:体验一般
扩展:还有一种叫做CS架构(客户端服务器架构模式)如QQ,需要用户下载安装客户端使用的。
缺点:在不同的操作系统下客户端不一样,所以软件的开发和维护比较麻烦
优点:体验感不错,有独立的客户端,有很多的逻辑和数据可以在客户端进行处理,速度会更快一些(比如腾讯视频 可以把很多视频缓存在本地,观看就很流畅,不需要一直联网去加载)
我们主要就是在controller部分进行操作!
是不是收获满满!慢慢理一下思路,没有问题滴!~
还是那句话:“只要一直在跑,就肯定错不了!”
转载自:https://juejin.cn/post/7394721446821396507