4.1.1.6 兼容 我们在对老系统,老功能进行重构迭代的时候,一定要做好兼容,否则上线后会出现重大的线上问题,公司内外有大量因为没有做好兼容性,而导致资损的情况。兼容分为:向前兼容性和向后兼容性,需要好好的区分他们,如下是他们的定义:…
前言 前文中分析了 Http11Processor#process 方法是怎么处理请求的,其中关键的地方就是调用 CoyoteAdapter 的相关方法。 1. CoyoteAdapter#asyncDispatch @Override public boolean asyncDispatch(org.apache.coyote.Request req,…
前言 前文中讲到了 CoyoteAdapter 的 asyncDispatch 和 service 方法处理请求的过程,其中最重要的就是调用了 Engine 里的 Pipeline 对象的 Valve 对象的 invoke 方法,也就是 StandardEngineValve#invoke 方法。Valve 对象相关介绍之前里提到过,这里就不多介绍了。…
前言 前文分析了各个容器相关的 Pipeline 属性对象的 的 Valve 属性对象的 invoke 方法。在最后的 StandardWrapperValve 方法里调用 ApplicationFilterChain#doFilter 方法,本文分析一下这个方法。 1. ApplicationFilterChain#doFilter /** *…
前言 前文讲到了 ConnectionHandler#process 方法,其中最关键的步骤是获取一个 org.apache.coyote.Processor 对象,然后调用这个对象的 process 方法,传入的参数就是它自己接收的参数,也就是 和 NioSocketWrapper 对象 和 SocketEvent 对象。tomcat 中 用于处理…
前言 Tomcat 是后端服务最常见的web容器,关于 Tomcat 一个重要的话题就是它的类加载机制,本文就基于 9.0.16 版本介绍一下 Tomcat 的类加载机制。 有几个类加载器? 在Tomcat的启动类 org.apache.catalina.startup.Bootstrap 里定义了三个 ClassLoader 类型的属性…
前言 前文中讲到了 Connector 的初始化与启动,其中最关键的就是 ProtocolHandler 的初始化与启动。tomcat 中 ProtocolHandler 的默认实现类是 Http11NioProtocol。tomcat9.0.16 中 ProtocolHandler 的实现类中还有一个…
前言 前文讲到了 ProtocolHandler 及其默认实现类 Http11NioProtocol,在 Http11NioProtocol 的构造方法中创建了一个 NioEndpoint 对象,并且在 Http11NioProtocol 的 init 和 start 方法中最重要的步骤是调用这个 NioEndpoint 对象的 init 和 start…
前言 前文介绍了 NioEndpoint,其中讲到了在 NioEndpoint#startInternal 方法里创建并启动了 Acceptor 和 Poller,线程。本篇文章先看 Acceptor,下篇文章再看 Poller。 1. Acceptor Acceptor 的构造方法声明为: private final…
前言 前文里讲到了 NioEndpint 的启动过程中创建了多个 Poller 对象,并启动了 Poller 线程。在 上篇文章 中介绍了 Acceptor 的 run 方法,其中讲到了 Acceptor 的工作就是接受客户端的连接并转交给 Poller 线程处理,本文将分析 Poller 和 PollerEvent。Poller 和…