BS架构的整个流程+Servlet+SpringMVC的DispatcherServlet(HttpServletRequest、HttpServletResp

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

看晕了就休息会儿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就登场了。 (是不是清晰一些了哈哈 接着看)

Servlet的主要作用是:

  1. 接收请求:当Web服务器接收到来自浏览器的请求时,它会根据请求中的URL找到对应的Servlet。
  2. 处理请求:Servlet会对这个请求进行解析,看看用户想要做什么,比如查询数据库、提交表单数据等。然后,Servlet会根据请求的内容(请求的url中通过一系列组件和流程来确保请求被正确地路由到相应的Controller进行处理)进行相应的处理。详细见下面的步骤{}
  3. 生成响应:处理完请求后,Servlet会生成相应的响应内容,这个内容可以是HTML、JSON、图片等,具体取决于用户请求的是什么。
  4. 发送响应:最后,Servlet会把生成的响应内容发送给浏览器,你就能看到网页上的内容了。

步骤{}:

接收请求

  1. 客户端发送请求:用户通过浏览器向Web服务器发送HTTP请求。
  2. Web服务器接收请求:Web服务器(如Apache HTTP Server、Nginx等)接收到来自浏览器的请求。
  3. 转发给Servlet容器:Web服务器将请求转发给Servlet容器(如Tomcat、Jetty等)。 (强行插入 ~ 一张图片)

处理请求

在Servlet容器中,处理请求的流程并不直接涉及将请求"交给"Controller,而是通过Spring MVCDispatcherServlet (前端控制器) 来管理和路由请求。(比如请求url中是/hello路由 就找到Controller中对应的方法)

当Spring MVC的DispatcherServlet 接收到一个请求,并且该请求与控制器中某个方法上的@RequestMapping(或其变体如@GetMapping@PostMapping等)注解相匹配时,该方法就会被调用。

下面是详细的过程:

  1. DispatcherServlet拦截请求:DispatcherServlet是Spring MVC的核心组件,它负责拦截所有进入Spring MVC应用的HTTP请求。
  2. 请求映射:DispatcherServlet根据请求的URL找到对应的HandlerMapping。HandlerMapping是Spring MVC中用于将请求的URL映射到处理器(Controller中的方法)的组件。
  3. 调用Controller:找到对应的处理器(Controller中的方法)后,DispatcherServlet调用该方法来处理请求。

返回响应

  1. 处理业务逻辑:Controller中的方法根据请求的内容执行相应的业务逻辑。
  2. 返回结果:Controller方法处理完请求后,通常会返回一个ModelAndView对象(或其他类型的返回值,如@ResponseBody注解的方法返回JSON数据)。ModelAndView对象包含了视图名称和模型数据。
  3. 视图渲染:DispatcherServlet根据ModelAndView对象中的视图信息,调用对应的ViewResolver来解析视图,并使用模型数据渲染视图,最终生成响应内容。
  4. 响应客户端:渲染后的响应内容被发送回客户端(如浏览器)。

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

第二部分 关于Tomcat

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

第三部分 DispatcherServlet 详细说明

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

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

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

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

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

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

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

缺点:体验一般

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

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

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

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

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

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

相关推荐
武子康18 分钟前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘1 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意1 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
FF在路上2 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
众拾达人3 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.3 小时前
Mybatis-Plus
java·开发语言
不良人天码星3 小时前
lombok插件不生效
java·开发语言·intellij-idea
守护者1703 小时前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
源码哥_博纳软云3 小时前
JAVA同城服务场馆门店预约系统支持H5小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台