原文地址:https://blog.csdn.net/ikaraide/article/details/20308031

简而言之,JVM的classloader加载继承关系分为BootstarpClassLoader –> ExtClassLoader –>

SystemClassLoader,应用的WebAppClassLoader继承自SystemClassLoader,在加载具体某个类

时,一般会先委托给父类ClassLoader,当父类ClassLoader无法加载成功时,才会再由子类ClassLoader

尝试加载,这就是所谓的delegate机制。

    其次,Tomcat在jvm的ClassLoader机制上增加了几个继承层次。

SystemClassLoader –> CommonClassLoader –>(ServerClassLoader | SharedClassLoader –>

WebAppClassLoader)。CommonClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中

common.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/lib下的文件。该loader加载

的类为tomcat服务器和tomcat

    下面的所有webApp所共享。ServerClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中server.loader配置目录下

的类文件,一般是用来加载${CATALINA_HOME}/server下的文件。该loader加载的类为tomcat服务器所独

有核心类,tomcat下面的WebApp无法访问。

    SharedClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中shared.loader配置目

录下的类文件,一般是用来加载${CATALINA_HOME}/shared下的文件。该loader加载的类为tomcat下

面的所有webApp所共享。WebAppClassLoader用来加载${CATALINA_HOME}/webapps/目录下每个

WebApp应用的/WEB-INF/class,/WEB-INF/lib的类文件,每个WebApp对应一个WebAppClassLoader,

用来加载其所需要的类文件。

    最后,说一下delegate配置的意义。True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会

先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一

直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。

    False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝

试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

    在此说一下配置为False需要注意的问题:一旦配置为False,如果你在WebApp中自己定义了一个

java.lang.String,则这个String类会有可能覆盖掉jdk中的String类,这也许不是你想要的结果。另外对于

多个WebApp公用jar包,你可能会放到${CATALINA_HOME}/shared目录中共享,但是一不小心在应用

的/WEB-INF/lib中也包含了一个同名的但版本不一致的jar的话,这就有可能会导致很多奇怪的问题。

Tomcat中的contex.xml中添加' Loader delegate=true '的作用及意义相关推荐

  1. Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页

    QUESTION:Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页 ANSWER: 简单直接的有效方法:重装tomcat服务器.

  2. 在springBoot中配置web.xml中配置的servlet

    第一种 web.xml (截取的需要转换的) 当拦截到 /socke t时执行该servlet <servlet><servlet-name>websocket</ser ...

  3. android id 重名_android 中不同的Xml中id可以重名吗?

    今天在做项目的时候,居然发现@+id 居然可以重名,而且 情况一:同一个Xml文件中的同名 在同一个Xml文件的中若同名了,则前一个有效,而后一个无效,as会报异常.如: android:id=&qu ...

  4. mysql 遍历XML_mybatis 中,mapper.xml中遍历list集合知识点

    select uid from user where uid in #{item.uid,jdbcType=VARCHAR} ORDER BY CREATE_DATE DESC ----------- ...

  5. eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包

    1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...

  6. (转)如何在maven的pom.xml中添加本地jar包

    转载自: https://www.cnblogs.com/lixuwu/p/5855031.html 1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下 ...

  7. 在C#.net中如何操作XML

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...

  8. 深入理解web.xml中配置/和/*的区别

    在用SpringMVC进行web开发的时候,如果将DispathcerServlet对外访问的虚拟路径配置成/时,需要在Spring的配置文件中配置<mvc:default-servlet-ha ...

  9. android中string.xml使用总结,string.xml 的作用以及意义——国际化应用

    为什么需要把应用中出现的文字单独存放在string.xml文件中呢? 一:是为了国际化,当需要国际化时,只需要再提供一个string.xml文件,把里面的汉子信息都修改为对应的语言(如,English ...

最新文章

  1. Map集合练习之对字符串中字母出现的次数求和
  2. mysql 恢复 二进制,mysql通过二进制日志恢复数据库
  3. 单链表进阶学习 二段
  4. Android心得8--Internet
  5. RabbitMQ 简介和使用
  6. stl vector 函数_vector :: back()函数以及C ++ STL中的示例
  7. Linux系统:Centos7下搭建ClickHouse列式存储数据库
  8. js原型和原型链_理解JS中的原型和原型链
  9. 数据链路层解决的三个问题
  10. 使用valgrind检查cache命中率
  11. Java是块级作用域吗_javascirpt如何模仿块级作用域(js高程笔记)
  12. 基于php的外卖订餐系统开题报告_网上订餐系统开题报告
  13. 周杰伦要出新专辑了?上 Instagram 看看
  14. Shader GrabPass应用实例——实现扭曲效果
  15. c语言中数组怎么用乘法分配律,乘法分配律说课稿(5篇)(33页)-原创力文档
  16. 衡水二中2021清华北大高考成绩查询,衡水二中成为“清华大学2020年优质生源中学”...
  17. 为什么总是闹离职的员工没走,平时不吭声的员工却突然离职?
  18. 快排的优化策略(3种快排4种优化)
  19. Vite css 热重载失效
  20. 征文投稿丨只需6步!轻量应用服务器快速建站指南

热门文章

  1. 电子学会2023年3月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析
  2. 通过frp搭建属于自己的免费稳定的内网穿透服务
  3. 计算机辅助建筑设计英文全称是,计算机辅助建筑设计CAAD,computer-aided architectural design CAAD,音标,读音,翻译,英文例句,英语词典...
  4. lm2776dbvr_收购LM5007MM大量回收LM2776DBVR
  5. BA--湿球温度和干球温度的区别
  6. 【ABAQUS】搞定ABAQUS与SolidWorks2无缝集成
  7. python从远程服务器下载文件
  8. c++游戏设计一:清明上河图的播放
  9. css中position:fixed为啥下面还要设置一个div的height
  10. flink jdbc(mysql)修改为阿里云AnalyticDB方言