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 
  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值