这篇确实有点干 全是文字看完一定会收获满满!!
看晕了就休息会儿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的主要作用是:
- 接收请求:当Web服务器接收到来自浏览器的请求时,它会根据请求中的URL找到对应的Servlet。
- 处理请求:Servlet会对这个请求进行解析,看看用户想要做什么,比如查询数据库、提交表单数据等。然后,Servlet会根据请求的内容(请求的url中通过一系列组件和流程来确保请求被正确地路由到相应的Controller进行处理)进行相应的处理。详细见下面的步骤{} 。
- 生成响应:处理完请求后,Servlet会生成相应的响应内容,这个内容可以是HTML、JSON、图片等,具体取决于用户请求的是什么。
- 发送响应:最后,Servlet会把生成的响应内容发送给浏览器,你就能看到网页上的内容了。
步骤{}:
接收请求
- 客户端发送请求:用户通过浏览器向Web服务器发送HTTP请求。
- Web服务器接收请求:Web服务器(如Apache HTTP Server、Nginx等)接收到来自浏览器的请求。
- 转发给Servlet容器:Web服务器将请求转发给Servlet容器(如Tomcat、Jetty等)。 (强行插入 ~ 一张图片)
处理请求
在Servlet容器中,处理请求的流程并不直接涉及将请求"交给"Controller,而是通过Spring MVC 的DispatcherServlet (前端控制器) 来管理和路由请求。(比如请求url中是/hello路由 就找到Controller中对应的方法)
当Spring MVC的DispatcherServlet 接收到一个请求,并且该请求与控制器中某个方法上的@RequestMapping
(或其变体如@GetMapping
、@PostMapping
等)注解相匹配时,该方法就会被调用。
下面是详细的过程:
- DispatcherServlet拦截请求:DispatcherServlet是Spring MVC的核心组件,它负责拦截所有进入Spring MVC应用的HTTP请求。
- 请求映射:DispatcherServlet根据请求的URL找到对应的HandlerMapping。HandlerMapping是Spring MVC中用于将请求的URL映射到处理器(Controller中的方法)的组件。
- 调用Controller:找到对应的处理器(Controller中的方法)后,DispatcherServlet调用该方法来处理请求。
返回响应
- 处理业务逻辑:Controller中的方法根据请求的内容执行相应的业务逻辑。
- 返回结果:Controller方法处理完请求后,通常会返回一个ModelAndView对象(或其他类型的返回值,如@ResponseBody注解的方法返回JSON数据)。ModelAndView对象包含了视图名称和模型数据。
- 视图渲染:DispatcherServlet根据ModelAndView对象中的视图信息,调用对应的ViewResolver来解析视图,并使用模型数据渲染视图,最终生成响应内容。
- 响应客户端:渲染后的响应内容被发送回客户端(如浏览器)。
返回响应数据用到@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部分进行操作!
是不是收获满满!慢慢理一下思路,没有问题滴!~
还是那句话:"只要一直在跑,就肯定错不了!"