编辑
2023-11-09
Tomcat源码学习
00
请注意,本文编写于 548 天前,最后修改于 548 天前,其中某些信息可能已经过时。

Tomcat作为一个Web容器,它的类加载机制与JVM的类加载机制有所不同。在JVM中,类加载器采用双亲委派机制,即当一个类需要被加载时,首先会委托父类加载器去加载,如果父类加载器找不到该类,再由子类加载器尝试加载。而Tomcat为了实现Web应用的隔离性,打破了双亲委派机制,采用了自定义的类加载器WebAppClassLoader。

WebAppClassLoader是Tomcat中用于加载Web应用的类加载器,它继承自URLClassLoader,并重写了findClass和loadClass方法来实现自己的加载逻辑。

  1. findClass方法:WebAppClassLoader首先会在Web应用的本地目录下查找要加载的类,如果找不到,则会委托给父类加载器去查找。如果父类加载器也找不到该类,则会抛出ClassNotFoundException异常。

  2. loadClass方法:loadClass方法是WebAppClassLoader重写的ClassLoader类的方法。在loadClass方法中,WebAppClassLoader会先尝试使用自己的findClass方法加载类,如果找不到,则会调用父类加载器的loadClass方法。这样就实现了优先加载Web应用自定义的类。

通过打破双亲委派机制,Tomcat能够实现Web应用的隔离性,每个Web应用都有自己独立的类加载器,避免了不同Web应用之间的类冲突问题。


Learn more:

  1. Day691.Tomcat如何打破双亲委托机制 -深入拆解 Tomcat & Jetty_tomcat双亲委托机制_阿昌喜欢吃黄桃的博客-CSDN博客
  2. 【精选】Tomcat的加载机制及破坏双亲委派机制_tomcat双亲委派机制_ximeneschen的博客-CSDN博客
  3. Tomcat为什么要JAVA破坏双亲委派机制? - 知乎

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!