【Spring】springmvc如何处理接受http请求

这篇具有很好参考价值的文章主要介绍了【Spring】springmvc如何处理接受http请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

目录

​编辑

1. 背景

2. web项目和非web项目

3. 环境准备

4. 分析链路

5. 总结


1. 背景

今天开了一篇文章“SpringMVC是如何将不同的Request路由到不同Controller中的?”;看完之后突然想到,在请求走到mvc 之前服务是怎么知道有请求进来了,并且知道交给谁处理呢?想看看这一块的代码

2. web项目和非web项目

当我们需要新增一个后端接口的时候,我们会通过@RestController和@RequestMapping注解来新增一个接口。然后我们发现我们这两个注解实际上是在spring-web包下的。

  • 如果我们的后端服务需要提供http请求的能力,那么我们就需要引入一个spring-web的包。称做web项目。
  • 如果我们的后端服务只提供thrift(一种rpc框架),那么我们也就不需要引入spring-web的包,称做非web项目。 这次主要是想看看是怎么处理的http请求。

3. 环境准备

  • 新建或者打开一个之前创建的springboot项目,我用的是之前写各种demo的项目
  • 在项目中新建一个Controller或者使用之前的Controller,我用的是之前就建好的TestController,自己得知道咋请求这个接口就行
@RestController
public class TestController implements BaseController {
    @RequestMapping("/test")
    public String test() {
        return "SUCCESS";
    }
}

 文章来源地址https://www.toymoban.com/news/detail-837099.html

  • 在AbstractHandlerMethodMapping#lookupHandlerMethod第一行添加断点(这个看文章知道的会在这里处理请求转发到不同的controller),如图

    【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

  • 以debug启动项目

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

  • 请求接口,然后进入到debug模式

4. 分析链路

  1. 首先可以看到在线程池拿到了一个task并执行

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

2. 继续往下,我们可以看到这个task是一个SocketProcessorBase对象,添加断点,重启服务,再次请求接口

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

3. 然后发现是在NioEndpoint$Poller创建的socket继续debug,

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

  1. 这个时候我们发现,是在容器加载完成之后会去启动服务,同时启动tomcat

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

5. 当tomcat接受到请求的时候:

  • Poller从Acceptor线程接收新的连接请求。
  • Poller将接收到的连接请求注册到其内部的NIO Selector上。
  • Poller不断轮询其注册的Selector,以查看是否有任何NIO事件就绪。
  • 一旦Poller检测到某个通道上有事件就绪,它就会创建一个SocketProcessor任务对象,并将该任务提交给Executor线程池进行处理。
  1. 然后经过tomcat 的一顿invoke

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

7. 开始处理请求

【Spring】springmvc如何处理接受http请求,spring,http,java,intellij-idea,后端,开发语言,网络协议

8. 一直走到FrameworkServlet这个springmvc处理请求的核心类 9. 然后走到DispatcherServlet 的doDispatch类

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
    。。。省略
    try {

            //现在在这里,去拿mappedHandler
            mappedHandler = getHandler(processedRequest);
            if (mappedHandler == null) {
                noHandlerFound(processedRequest, response);
                return;
            }
    。。。省略
}

 

5. 总结

后面就走到了我们比较熟悉的springmvc处理请求的地方了,这块网上很多写的文章,大家感兴趣可以自己去百度看看。

 

到了这里,关于【Spring】springmvc如何处理接受http请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring基础 - SpringMVC请求流程和案例

     用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中 Model(模型)是应用

    2024年02月20日
    浏览(34)
  • Spring Boot使用httpcomponents实现http请求

    基于org.apache.httpcomponents的httpclient实现,其它的实现方式都行。 通过ApplicationRunner 实现启动自动运行。 结果:成功返回

    2024年02月16日
    浏览(47)
  • Spring Boot学习笔记(十三)获取HTTP请求参数

    SpringBoot获取参数代码 User类: (1)路径参数 使用@PathVariable获取 (2)URL参数 1、使用@RequestParam获取 2、使用request的getParameter方法获取 3、直接在controller里使用同名的方法参数获取 4、使用实体类的同名属性接收参数 (3)表单参数 获取方式Url参数一样获取。GET请求只能拿到

    2024年02月04日
    浏览(51)
  • Spring Boot进阶(72):【教程】用Spring Boot和HttpClient实现高效的HTTP请求

      随着系统规模的不断扩大和复杂度的提升,异步通信这种模式越来越被广泛应用于各种分布式系统中。RocketMQ作为一个高性能、高可靠性、分布式消息队列,得到了众多企业的青睐。本文将介绍如何使用Spring Boot整合RocketMQ,实现异步通信。   那么,具体如何实现呢?这

    2024年02月09日
    浏览(45)
  • Spring Boot进阶(75):从容应对HTTP请求——Spring Boot与OkHttp完美结合

            在现代的Web应用程序中,HTTP请求成为了构建客户端和服务器端之间通信的一个重要手段。Spring Boot是一个灵活的Web框架,它提供了与HTTP请求相关的许多特性和API。OkHttp是一个流行的HTTP客户端库,它提供了面向对象的API,以便开发人员轻松地在其应用中进行HTTP请求

    2024年02月06日
    浏览(40)
  • spring boot请求http接口的三种方式

    HttpURLConnection 是 Java 中的 HTTP 客户端实现,,适用于简单的请求需要。 HttpURLConnection主要工作内容:打开socket连接,封装http请求报文,解析请求报文。 OkHttp 是一个第三方的 HTTP 客户端库,它比 Java 标准的 HttpURLConnection 更高效、更实用。主要特点包括: 比 HttpURLConnection 快得多

    2024年02月14日
    浏览(59)
  • Spring基础(Web-MVC)——在idea中新建springWeb项目 & 浏览器请求 和 服务器响应 & SpringMvc文件相关

    mvc是啥,springMvc是啥,如何搭建springWeb项目, 在springMvc下的request和response怎么发请求,怎么进行响应? springMvc处理文件相关:上传文件,uuid改名,静态资源映射,yaml配置路径,spring配置文件初步; 表现(视图)层:WEB层,用来和客户端进行数据交互的。 servlet-controller 业务层

    2024年02月03日
    浏览(44)
  • Java框架学习(二)SSM体系:Spring、SpringMVC、MybatisPlus

    在原始的分层架构实现中,负责响应请求的Controller层依赖于业务逻辑处理的Service层,而业务逻辑处理的service层又依赖与数据访问Dao层。上下层间相互依赖耦合,耦合的缺陷在于牵一发而动全身,不利于后期维护拓展。 为了分层解耦,Spring采用IoC控制反转和DI依赖注入,来解

    2024年02月11日
    浏览(49)
  • 【NanoHTTPD】Android,使用NanoHTTPD搭建服务器,接受Http请求,最佳实践

    安卓app,作为服务器,接受Http,get post 请求推送数据,NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小。 开源地址:GitHub - NanoHttpd/nanohttpd: Tiny, easily embeddable HTTP serv

    2024年02月10日
    浏览(44)
  • Crow:run的流程3 接受http连接请求do_accept

    Crow:run的流程2 建立io_service及线程-CSDN博客 介绍了run的Crow会启动一个线程并用于处理do_accept。 那么do_accept本身是做什么的呢? 用于根据当前处理任务的数量多少,从io_service池取出一个is,也就相当于是从线程池中取出一个线程(因为每个线程阻塞在一个io_service上)。 然后将

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包