Tomcat Bootstrap init()

Tomcat Bootstrap

/**  
 * Bootstrap 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 * @author Remy Maucherat */
public final class Bootstrap {
   

}

这段文字描述了Tomcat启动时Catalina引导加载器的作用,我来翻译并解析一下:

这是Catalina的引导加载器。该应用程序构建一个类加载器,用于加载Catalina内部类(通过累积"catalina.home"下"server"目录中找到的所有JAR文件),并启动容器的常规执行。采用这种迂回的方式,目的是将Catalina内部类(以及它们依赖的任何其他类,比如XML解析器)排除在系统类路径之外,因此不会被应用程序级别的类可见。

解析:

  1. Catalina是Tomcat服务器的核心组件,负责加载和管理Servlet、JSP等Web应用程序。
  2. 在启动过程中,Catalina需要加载自身的内部类,如容器类、加载器类等。
  3. 为了避免这些内部类与Web应用程序的类发生冲突,Catalina使用了一个专门的引导加载器。
  4. 这个引导加载器会扫描catalina.home/server目录下的所有JAR文件,将它们构建为一个单独的类加载器。
  5. 通过这种方式,Catalina内部类被加载到一个独立的类加载器中,与Web应用程序的类加载器相隔离。
  6. 这样做的目的是防止Catalina内部类污染Web应用程序的类加载环境,也防止Web应用程序的类影响Catalina的运行。
  7. 这种"绕圈"的加载方式保证了Catalina内部类与应用程序类的相互隔离,提高了安全性和稳定性。

总的来说,Catalina引导加载器采用了一种巧妙的设计,使Tomcat服务器的内核组件与部署的Web应用程序相互独立,从而确保整个系统的稳定运行。这种设计思路也体现了Java类加载器的强大功能和灵活性。

catalinaBaseFile 和 catalinaHomeFile

private static final File catalinaBaseFile;  
private static final File catalinaHomeFile;
static {
     
    // Will always be non-null  
    String userDir = System.getProperty("user.dir");  
  
    // Home first  
    String home = System.getProperty(Constants.CATALINA_HOME_PROP);  
    File homeFile = null;  
  
    if (home != null) {
     
        File f = new File(home);  
        try {
     
            homeFile = f.getCanonicalFile();  
        } catch (IOException ioe) {
     
            homeFile = f.getAbsoluteFile();  
        }  
    }  
  
    if (homeFile == null) {
     
        // First fall-back. See if current directory is a bin directory  
        // in a normal Tomcat install        File bootstrapJar = new File(userDir, "bootstrap.jar");  
  
        if (bootstrapJar.exists()) {
     
            File f = new 

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 08:04:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 08:04:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 08:04:05       82 阅读
  4. Python语言-面向对象

    2024-04-30 08:04:05       91 阅读

热门阅读

  1. CAPM模型特点

    2024-04-30 08:04:05       35 阅读
  2. Google云平台(Google Cloud Platform,简称GCP)

    2024-04-30 08:04:05       78 阅读
  3. Spring Boot面试知识点总结(经典15问)

    2024-04-30 08:04:05       37 阅读
  4. 2024.4.29力扣每日一题——将矩阵按对角线排序

    2024-04-30 08:04:05       31 阅读
  5. Selenium的基本使用

    2024-04-30 08:04:05       30 阅读
  6. 基本排序算法

    2024-04-30 08:04:05       33 阅读
  7. WebRTC中获取当前采集设备的deviceId

    2024-04-30 08:04:05       25 阅读
  8. 【ARM Cache 系列文章 12 – Cache Tag与 物理地址】

    2024-04-30 08:04:05       23 阅读