http请求到tomcat到servlet与springmvc

本文介绍了HTTP请求从到达Tomcat到被Servlet处理,再到SpringMVC框架中DispatcherServlet的工作原理。在Servlet时代,Tomcat作为Servlet容器,解析HTTP请求并调用servlet的service方法,进而执行doGet或doPost。而在SpringMVC中,DispatcherServlet作为前端控制器,通过处理器映射器和适配器找到合适的处理器进行处理,最后返回响应结果给客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat是web服务器,用来接收http请求并作出响应,servlet则是服务和小程序的合写译作服务小程序,tomcat作为servlet容器,用来运行多个servlet实例,
web.xml作为配置文件其中有servlet、servlet-mapping、filter、listener、等标签进行配置, <load-on-startup> 标签可以决定容器是否应该在web应用程序启动的时候就加载这个servlet。

  • servlet时代:
    Web客户向Servlet容器(Tomcat)发出Http请求
    Servlet容器分析客户的请求信息根据<url-pattern>标签匹配url与servlet的对应关系,并在<servlet-class>中写上url的处理类(HttpServlet的子类)
    在这里插入图片描述
    Servlet容器创建一个HttpRequest对象,将客户http请求的所有信息封装到这个对象中
    Servlet容器创建一个HttpResponse对象
    Servlet容器调用HttpServlet对象的service方法,并把HttpRequest和HttpResponse传入,service(request, response) 方法功能是判断用户发出是什么请求,如果是get则调用子类(HttpSevr)的doGet方法,如果是post则调用子类(HttpSevr)的doPost方法。所以执行顺序是service()然后doget/dopost/doput/dodelete/dooptions
    在这里插入图片描述
    在这里插入图片描述
    HttpServlet调用HttpResponse对象的有关方法,生成响应数据
    Servlet容器把HttpServlet的响应结果传给Web客户
    https://blog.youkuaiyun.com/achenyuan/article/details/77246395
    https://blog.youkuaiyun.com/m0_38039437/article/details/75264012
    https://blog.youkuaiyun.com/qq_38982845/article/details/82120804 (详细过程)
  • springMVC:
    而到了springmvc中DispatcherServlet类继承了HttpServlet,在<servlet-class>标签中写上DispatcherServlet即可,不需要自己再重写HttpServlet中的方法(这其实也是框架的作用,把一些通用的操作封装起来不需要开发人员自己再去实现).
    在这里插入图片描述
  1. 前置控制器(DispatcherServlet)分发处理http请求:
    而到了SpringMVC中,请求的第一站是DispatcherServlet,充当前端控制器角色;
    在这里插入图片描述
    在这里插入图片描述
    DispatcherServlet会查询一个或多个处理器映射(handler mapping)并根据请求所携带的URL信息进行决策,将请求发送给哪个处理器映射器;

  2. 处理器映射器(handler mapping)根据请求的url找到合适的处理器:
    HandlerMapping接口有多个实现。其中针对注解@RequestMapping的处理器映射是使用的RequestMappingHandlerMapping。
    而如果使用SimpleUrlHandlerMapping的话还需写xml配置文件来进行映射
    在这里插入图片描述

  3. 处理器适配器采用适配者模式(HandlerApdate)作用是根据请求的url找到处理器的调用方法
    3.1 由找到的适配器,调用实现对应接口的处理器(因为处理器有多个是对Controller接口的不同实现所以使用不同的适配器执行),并将结果返回给适配器,结果中包含数据模型和视图对象,再由适配器返回给核心控制器。
    3.2 核心控制器将获取的数据和视图结合的对象传递给视图解析器,获取解析得到的结果,并由视图解析器响应给核心控制器。
    3.3 核心控制器将结果返回给客户端。

总体就是:
DispatcherServlet根据url和处理器映射器查找相应的 Handler,返回给DispatcherServlet。
DispatcherServlet再传给处理器适配器让它进行处理,处理器适配器会去找到对应的 Handler 去处理,处理后则就会返回一个 ModleAndView 对象给DispatcherServlet。
DispatcherServlet使用视图解析器去进行视图解析,视图解析器向前端控制器返回View,前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)。
DispatcherServlet向用户响应结果。
https://www.jianshu.com/p/e4f1c9326223
https://blog.youkuaiyun.com/fageweiketang/article/details/81087852
http://blog.sina.com.cn/s/blog_e660c25b01030kbj.html(为什么用适配器,不同接口,方法名不同,如果想调用那个接口的实现类,则通过调用那个实现类的适配器.再由适配器调用他所适配的实现类.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值