HTTP 三、http在springboot中得应用

一、springboot处理http请求的过程

        1、客户端发起HTTP请求,经过网络传输到服务器

        HTTP请求通常由浏览器、Postman、curl或其他HTTP客户端发起,客户端的HTTP请求通过网络(通常是TCP/IP协议)传输到服务器,这个请求首先会到达Spring Boot应用的端口

        2、服务器接收请求

        服务器上的网络堆栈处理传入的TCP/IP包,并将其传递给服务器软件。在Spring Boot应用中,嵌入式的Tomcat、Jetty或Undertow服务器负责监听HTTP端口并接收请求。
        也就是说到达springboot的程序之后,首先是由tomcat接收并处理请求的,一般这个tomcat是springboot内置的。

        3、 Servlet容器(tomcat)处理请求

        嵌入式的Servlet容器(如Tomcat)接收到HTTP请求后,会将请求解析成HttpServletRequest对象。这个对象封装了请求行、请求头和请求体等信息。这个过程是在Tomcat的内部实现的,遵循Servlet规范,不涉及到Spring Boot的具体代码。

        4、查找对应的Servlet然后DispatcherServlet处理请求

        Tomcat Servlet容器会根据HttpServletRequest对象的信息(例如URL、HTTP方法类型等)去寻找已经注册到容器中的对应的Servlet,找到对应的DispatcherServlet后,Tomcat将把HttpServletRequest对象传递给它。DispatcherServlet接收到HttpServletRequest后,将会根据其中的URL信息,去寻找在Spring应用程序中注册的对应的Controller和处理的方法。

        5、Controller处理请求

        找到对应的Controller和方法后,DispatcherServlet将调用这个方法,并传递HttpServletRequest中的信息。到达controller接口之后,进入controller中自己的处理逻辑,然后最终生成返回结果。

  • 视图解析:如果控制器返回的是视图名称,Spring会使用ViewResolver来解析视图并生成HTML内容。
  • 序列化数据:如果控制器返回的是对象(如JSON),Spring会使用HttpMessageConverter将对象序列化为JSON或XML格式。
        6、返回响应给客户端

   DispatcherServlet生成HttpServletResponse对象,包含响应的状态码、头部和体。Servlet容器(如Tomcat)将HttpServletResponse对象转换为原始的HTTP响应,并通过网络传输回客户端。

        7、客户端接收响应

        客户端收到HTTP响应,解析响应行、响应头和响应体,并根据状态码和内容采取相应的动作。例如:

  • 浏览器渲染HTML内容或显示JSON数据。
  • API客户端解析JSON数据并进一步处理。

        

二、关于tomcat与servlet

        Spring Boot处理HTTP请求的整个过程。在这个过程中,Spring Boot的自动配置让开发者不需要关心底层的处理细节,可以专注于编写业务代码。
        而tomcat主要就是负责处理http请求的。Spring Boot默认使用内嵌的Tomcat服务器。这意味着Spring Boot应用启动时,它会自动启动一个Tomcat实例,并且该实例会根据Spring Boot的配置文件来决定监听哪个端口。
        Tomcat作为Servlet容器,负责管理所有部署在它上面的应用及其Servlet对象。而servlet,在每个Spring Boot应用中(也就是每个服务中),通常会有一个DispatcherServlet对象,它是负责处理所有HTTP请求的核心组件。每个Spring Boot应用相当于一个独立的服务,运行在Tomcat上。也就是说每一个springboot服务对应一个servlet 对象,这个servlet对象由tomcat统一管理。每个应用的DispatcherServlet是独立的,处理与该应用相关的所有HTTP请求。

        所以总结一下:

  • 一个Spring Boot服务对应一个Servlet对象,即DispatcherServlet
  • 服务器(Tomcat)上可以运行多个Spring Boot服务,因此会有多个DispatcherServlet对象。
  • Tomcat负责管理这些Servlet对象,包括它们的创建、初始化、请求处理、和销毁,并确保请求被正确路由到相应的Servlet对象。

        这里面只简答介绍一下对应关系,详细了解可以再自行查询。

        所以流程就是:
        http请求 ----> tomcat ---> 对应servlet类 ----> 再到对应接口

三、springboot对应http请求映射 (Request Mapping)

        前面简单说了 http 对应的方法类型常用的有 GET、POST、PUT、DELETE 等方法,这些方法在springboot中也帮我们定义好了对应的注解来映射这些方法。

  • @GetMapping:用于处理 HTTP GET 请求。
  • @PostMapping:用于处理 HTTP POST 请求。
  • @PutMapping:用于处理 HTTP PUT 请求。
  • @DeleteMapping:用于处理 HTTP DELETE 请求。
@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

        上面的代码中,指定请求路径为 /api/hello,指定请求方法为 GET。

        还有一个常用注解是@RequestMapping 注解,这个注解 value 属性来指定请求路径,使用 method 属性来指定请求方法,例如:

@RestController
@RequestMapping("/api")
public class MyController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "Hello, World!";
    }
}

        关于这些注解的详细使用也不再多说,比较简单会用即可,详细可再自行搜索。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值