tomcat
文章平均质量分 63
Java部落格
为了部落!!!
展开
-
Tomcat源码阅读(四)-热部署
热部署热部署和热加载是类似的,都是在不重启Tomcat的情况下,使得应用的最新代码生效。但热部署表示重新部署应用,它的执行主体就不能是Context了,而是Host。在上一篇《Tomcat源码阅读(三)-热加载》阅读中发现,StandardEngine会开启一个由ContainerBase中定义的守护线程ContainerBackgroundProcessor,来执行当前容器以及所有子容器的backgroundProcess方法,并且一般容器(如StandardContext)在调用完自己的backgr原创 2021-01-25 11:04:20 · 187 阅读 · 1 评论 -
Tomcat源码阅读(三)-热加载
热加载热加载是在不重启Tomcat的情况下,在Context- StandardContext中重新加载应用的class。热加载是由一个专门的守护线程执行操作的,这个守护线程是ContainerBackgroundProcessor。在StandardEngine启动时,会调用父类ContainerBase的threadStart()方法,就是在此方法中开启了ContainerBackgroundProcessor 线程!此方法代码如下:protected void threadStart()原创 2021-01-25 10:43:50 · 147 阅读 · 0 评论 -
Tomcat源码阅读(二)-请求处理流程
一、请求处理流程图上图中有两个重要的组件:Connector和Engine,接下来重点介绍下这两个组件。二、Http服务器-Connector1、由上图可知,Connector组件包含三部分:Http11NioProtocol、Mapper、CoyoteAdapter。Http11NioProtocol包含NioEndpoint和Http11ConnectionHandler,NioEndpoint是Http11NioProtocol中负责接收处理socket的主要模块;Http11Connecti原创 2021-01-23 18:01:32 · 163 阅读 · 0 评论 -
Tomcat源码阅读(一)-启动流程
一、初始化流程二、启动流程三、Tomcat组件生命周期的管理-Lifecycle由前两点的初始化、启动的流程可以看到一个重要的接口Lifecycle,Tomcat 中组件的生命周期就是通过 Lifecycle 接口来控制的。组件只要继承这个接口,并实现其中的方法,该组件的生命周期就会由包含它的父组件控制,这样一层一层的,直到一个最高级的组件Server,它就可以控制 Tomcat 中所有组件的生命周期,而控制 Server 的是启动和关闭 Tomcat,所以它的 Start 方法自然就是调用它下面原创 2021-01-23 18:00:52 · 175 阅读 · 0 评论 -
Tomcat源码阅读-tomcat是如何打破双亲委派的?
一、为什么要打破双亲委派Tomcat中会部署多个应用,每个应用可能会出现相同的类名,或者引用相同的jar包但版本不同,若使用双亲委派,一个类只会加载一次,项目就互相之间有冲突,若打破双亲委派,可以实现各自的应用加载自己应用的类,互不影响。二、如何打破双亲委派原理:自定义类加载器,然后重写loadClass,不先由父类加载。Tomcat中的自定义的类加载器就是WebappClassLoaderBase,先看下loadClass方法的流程图:所以又上面的流程图可知,正常情况下(没有设置代理的情况下),原创 2020-12-21 15:57:32 · 1614 阅读 · 0 评论 -
Tomcat源码阅读—如何启动SpringWeb项目
Tomcat调用ServletContainerInitializer的实现类的onStartup()方法之前的一篇文章《SpringBoot如何省去Web.xml?》中介绍了Servlet3.0之后,Servlet容器(如Tomcat)在启动之后,会调用jar包META-INF/services/javax.servlet.ServletContainerInitializer中指定的类的实现,并且SpringWeb的类SpringServletContainerInitializer实现了这个接口,原创 2020-12-17 14:51:14 · 291 阅读 · 0 评论