首页 > 其他分享 >tomcat类加载器

tomcat类加载器

时间:2024-03-19 14:12:08浏览次数:17  
标签:WEB tomcat ClassLoader class 载入 HOME APP 加载

https://blog.csdn.net/MeBieber/article/details/105114645?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-105114645-blog-3672450.235^v43^pc_blog_bottom_relevance_base1&spm=1001.2101.3001.4242.2&utm_relevant_index=4

 

CommonLoader:加载Tomcat所需要的jar包和class文件,可以被Tomcat容器本身以及各个Webapp访问;
CatalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;
SharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,对于Tomcat不可见;
WebAppClassLoader:各个Webapp私有的类加载器,加载路径中的class只对当前Webapp可见;
JasperLoader:它出现的目的就是为了被丢弃,加载路径仅仅是某个JSP文件所编译出来的那一个.class文件

 

https://www.jianshu.com/p/972b45b574b2

 

 

https://blog.csdn.net/tangyangbuaa/article/details/3672450

 

/**
 * 该类的main方法的主要任务: --------------------------
 * 
 * 1,创建TOMCAT自己的类载入器(ClassLoader) +---------------------------+ | Bootstrap | | | | |
 * System | | | | | Common | | / / | | Catalina Shared |
 * +---------------------------+ 其中: - Bootstrap -
 * 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/*.jar - System - 载入$CLASSPATH/*.class -
 * Common - 载入$CATALINA_HOME/common/,它们对TOMCAT和所有的WEB APP都可见 - Catalina -
 * 载入$CATALINA_HOME/server/,它们仅对TOMCAT可见,对所有的WEB APP都不可见 - Shared -
 * 载入$CATALINA_HOME/shared/,它们仅对所有WEB APP可见,对TOMCAT不可见(也不必见)
 * 注意:当一个ClassLoader被请求载入一个类时,它首先请求其父ClassLoader完成载入,
 * 仅当其父ClassLoader无法载入该类时,才试图自己载入该类 2,

改变本身线程的默认ClassLoader(本线程就是Tomcat
 * Server线程,类载入器是catalinaLoader)
 * 3,让catalinaLoader载入一些类,类的位置在$CATALINA_HOME/server/lib/catalina.jar中
 * 4,创建org.apache.catalina.startup.Catalina类的一个实例startupInstance,并为其调用方法:
 * startupInstance.setParentClassLoader(sharedLoader);
 * startupInstance.process(args);
 * 
 * 
 * 有关ClassLoader的说明: -----------------------
 * 
 * 每个被DEPLOY的WEB APP都会被创建一个ClassLoader,用来载入该WEB APP自己的类
 * 这些类的位置是webappX/WEB-INF/classes/*.class和webappX/WEB-INF/lib/*.jar
 * 
 * ClassLoader的工作流程是: 1) 收到一个载入类的的请求 2) 请求其父ClassLoader来完成该类的载入 3)
 * 如果父ClassLoader无法载入,则自己试图完成该类的载入
 * 
 * 特别注意WEB APP自己的ClassLoader的实现与众不同: 它先试图从WEB APP自己的目录里载入,如果失败则请求父ClassLoader的代理(待核实)
 * 这样可以让不同的WEB APP之间的类载入互不干扰(不存在因果关系)
 * 
 * WEB APP的ClassLoader的层次结构是: +----------------------------+ | Shared | | / /
 *  | | Webapp1 Webapp2  | +----------------------------+ 故对于一个WEB
 * APP,其类载入的优先顺序如下: - /WEB-INF/classes/*.class 和 /WEB-INF/lib/*.jar - Bootstrap
 * classes of JVM - System class loader classes - $CATALINA_HOME/common/ -
 * $CATALINA_HOME/shared/

 

 

这便是

/**  * Boostrap loader for Catalina.     This application constructs a class loader  * for use in loading the Catalina internal classes (by accumulating all of the  * JAR files found in the "server" directory under "catalina.home"), and  * starts the regular execution of the container.     The purpose of this  * roundabout approach is to keep the Catalina internal classes (and any  * other classes they depend on, such as an XML parser) out of the system  * class path and therefore not visible to application level classes.  *  * @author Craig R. McClanahan  * @version $Revision: 1.36 $ $Date: 2002/04/01 19:51:31 $  */ /**  * 该类的main方法的主要任务: --------------------------  *   * 1,创建TOMCAT自己的类载入器(ClassLoader) +---------------------------+ | Bootstrap | | | | |  * System | | | | | Common | | / / | | Catalina Shared |  * +---------------------------+ 其中: - Bootstrap -  * 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/*.jar - System - 载入$CLASSPATH/*.class -  * Common - 载入$CATALINA_HOME/common/,它们对TOMCAT和所有的WEB APP都可见 - Catalina -  * 载入$CATALINA_HOME/server/,它们仅对TOMCAT可见,对所有的WEB APP都不可见 - Shared -  * 载入$CATALINA_HOME/shared/,它们仅对所有WEB APP可见,对TOMCAT不可见(也不必见)  * 注意:当一个ClassLoader被请求载入一个类时,它首先请求其父ClassLoader完成载入,  * 仅当其父ClassLoader无法载入该类时,才试图自己载入该类 2,改变本身线程的默认ClassLoader(本线程就是Tomcat  * Server线程,类载入器是catalinaLoader)  * 3,让catalinaLoader载入一些类,类的位置在$CATALINA_HOME/server/lib/catalina.jar中  * 4,创建org.apache.catalina.startup.Catalina类的一个实例startupInstance,并为其调用方法:  * startupInstance.setParentClassLoader(sharedLoader);  * startupInstance.process(args);  *   *   * 有关ClassLoader的说明: -----------------------  *   * 每个被DEPLOY的WEB APP都会被创建一个ClassLoader,用来载入该WEB APP自己的类  * 这些类的位置是webappX/WEB-INF/classes/*.class和webappX/WEB-INF/lib/*.jar  *   * ClassLoader的工作流程是: 1) 收到一个载入类的的请求 2) 请求其父ClassLoader来完成该类的载入 3)  * 如果父ClassLoader无法载入,则自己试图完成该类的载入  *   * 特别注意WEB APP自己的ClassLoader的实现与众不同: 它先试图从WEB APP自己的目录里载入,如果失败则请求父ClassLoader的代理  * 这样可以让不同的WEB APP之间的类载入互不干扰  *   * WEB APP的ClassLoader的层次结构是: +----------------------------+ | Shared | | / /  *  | | Webapp1 Webapp2  | +----------------------------+ 故对于一个WEB  * APP,其类载入的优先顺序如下: - /WEB-INF/classes/*.class 和 /WEB-INF/lib/*.jar - Bootstrap  * classes of JVM - System class loader classes - $CATALINA_HOME/common/ -  * $CATALINA_HOME/shared/  *   *   * 小结: ------  *   * 综上分析 - Tomcat Server线程使用的classLoader是Catalina - 每个WEB  * APP线程使用的classloader是Webapp?  *   */

标签:WEB,tomcat,ClassLoader,class,载入,HOME,APP,加载
From: https://www.cnblogs.com/silyvin/p/18082705

相关文章

  • IDEA + Tomcat控制台乱码问题
    1.进入IDEA安装目录,进入bin文件夹,找到idea64.exe.vmoptions和idea.exe.vmoptions这两个文件,在每个文件新增2行,加入-Dfile.encoding=UTF-8和-Dconsole.encoding=UTF-82.打开IDEA,file—settings—Editor—FileEncodings的GlobalEncoding和ProjectEncoding和Defaultenc......
  • 资源加载和序列化
    一切加载最后都要跑到LoadPackageInternal:创建Linker序列化(LoadAllObjects){ FUObjectSerializeContext*InOutLoadContext=LoadContext; Linker=GetPackageLinker(InOuter,PackagePath,LoadFlags,nullptr,InReaderOverride,&InOutLoadContext,ImportLinker,In......
  • Ruoyi前后端分离项目部署至Tomcat上
    项目部署4.1.前端打包disaster-ui目录下为本项目的前端所在位置,在命令行窗口进入该目录,然后输入npmrunbuild:prod部署前端Vue项目,或者直接在disaster-ui/bin目录下双击build.bat文件部署前端。图4-1前端部署图4.2环境变量在MySQL可视化软件中新建flowable数据库(以......
  • Nancy 过滤加载dll
    protectedoverridevoidConfigureApplicationContainer(TinyIoCContainercontainer){List<Func<Assembly,bool>>IgnoredAssemblies=DefaultNancyBootstrapper.DefaultAutoRegisterIgnoredAssemblies.ToList();//IgnoredAs......
  • Tomcat配置SSL证书
    omcat配置SSL证书的过程涉及几个步骤,包括生成密钥库(keystore),配置Tomcat的server.xml文件,以及重启Tomcat服务器。以下是一个基本的步骤指南:步骤1:生成密钥库(Keystore)首先,你需要一个有效的SSL证书。你可以从证书颁发机构(CA)购买,或者如果你只是在内部网络中使用,你也可以自己生成一个......
  • Fastapi中Swagger UI加载缓慢的解决方案
    在国内网络经常遇到SwaggerUI加载缓慢的问题,这是由于SwaggerUI的CSS和JS代码源在国外导致的,所以我们的解决方法是更改SwaggerUI的CSS代码和JS代码源到国内的CND实现加速。这里以Fastapi框架的SwaggerUI加载缓慢举例:一、解决方法在main.py(入口代码)代码中新增如下代码:fromfa......
  • Tomcat安装与配置详细教程:从入门到精通
    Tomcat安装与配置详细教程:从入门到精通简介:本教程旨在为广大开发者提供一份Tomcat服务器的安装与配置指南。通过本教程的学习,您将能够掌握Tomcat服务器的安装步骤、环境变量的配置方法,以及验证Tomcat配置是否成功的技巧。同时,我们还将简要介绍JavaJDK的安装与配置,为Tomca......
  • 在Tomcat下部署若依框架前后端分离SpringBoot+Vue3项目
     一、后端打包在ruoyi项目的bin目录下执行package.bat打包Web工程,生成war/jar包文件。然后会在项目下生成target文件夹包含war或jar1.jar包使用命令行执行:java–jarruoyi-admin.jar或者执行脚本:ruoyi/bin/run.bat注意事项【jar包部署,需要使用nginx代理,前端项目中的代理仅......
  • 错误: 找不到或无法加载主类
    错误:找不到或无法加载主类springboot项目平时启动好的,这天突然启动异常了,只有一个服务启动正常,其他都报错,找不到或无法加载主类。问题排查:首先通过命令行运行mvninstall 显示出无法加载dataSource信息。确定数据库已经启动,并且配置也是正确的。发现是资源文件夹变成普......
  • three模型加载loader模块封装
    在three项目中需要加载很多的模型而且在很多地方需要使用loader加载模型回调的gltf上一个项目中遇到了初学three的我留下笔记简单版`import*asTHREEfrom'three';import{GLTFLoader}from'three/examples/jsm/loaders/GLTFLoader.js';constloader=newGLTFLoa......