tomcat源码学习(1)
来源:互联网 发布:下载倒影软件 编辑:程序博客网 时间:2024/05/17 01:17
private static Bootstrap daemon = null; private static final File catalinaBaseFile; private static final File catalinaHomeFile; private static final Pattern PATH_PATTERN = Pattern.compile("(\".*?\")|(([^,])*)"); static { // Will always be non-null String userDir = System.getProperty("user.dir"); // Home first String home = System.getProperty(Globals.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 File(userDir, ".."); try { homeFile = f.getCanonicalFile(); } catch (IOException ioe) { homeFile = f.getAbsoluteFile(); } } } if (homeFile == null) { // Second fall-back. Use current directory File f = new File(userDir); try { homeFile = f.getCanonicalFile(); } catch (IOException ioe) { homeFile = f.getAbsoluteFile(); } } catalinaHomeFile = homeFile; System.setProperty( Globals.CATALINA_HOME_PROP, catalinaHomeFile.getPath()); // Then base String base = System.getProperty(Globals.CATALINA_BASE_PROP); if (base == null) { catalinaBaseFile = catalinaHomeFile; } else { File baseFile = new File(base); try { baseFile = baseFile.getCanonicalFile(); } catch (IOException ioe) { baseFile = baseFile.getAbsoluteFile(); } catalinaBaseFile = baseFile; } System.setProperty( Globals.CATALINA_BASE_PROP, catalinaBaseFile.getPath()); }
上篇关于JVM类加载过程即是学习tomcat源码学习过程中学习到的 http://blog.sina.com.cn/s/blog_ae63f79a0102vw94.html
我们查看bootstrap类的源码,可以发现,在类加载过程中,已经尝试从系统环境变量中获取 catalina.home和
catalina.base的值了,若获取不到则给这两个变量catalinaBaseFile,catalinaHomeFile赋值当前路径并创建两个文件。
接下来是main函数的执行,创建Bootstrap对象后,bootstrap先调用成员函数 bootstrap.init(); 在()中调用initClassLoaders中尝试从conf文件夹下的catalina.properties文件中加载属性,分别创建三个ClassLoader,即Bootstrap类中的三个成员变量:commonLoader,catalinaLoader和sharedLoader。
这里可以讨论下classloader
ClassLoader即类加载子系统,负责加载编译好的.class字节码文件,并装入内存,使JVM可以实例化或以其他方式使用加载后的类(比如说java非常常用的反射)。JVM的类加载子系统支持运行时的动态装载,动态加载有很多的优点,例如可以节省内存空间、灵活地从网络上加载类,动态加载还有一个好处是可以通过命名空间的分隔来实现类的隔离,增强了整个系统的安全性。
0 0
- tomcat源码学习(1)
- Tomcat源码学习-1-初始化
- Tomcat源码学习
- Tomcat源码学习
- Tomcat源码学习
- Tomcat源码编译学习
- Tomcat源码学习
- Tomcat源码学习
- Tomcat源码学习笔记
- tomcat源码学习一
- Tomcat源码学习
- Tomcat源码学习
- (精)tomcat 源码学习
- Tomcat源码学习
- tomcat源码学习
- Tomcat源码学习
- tomcat 源码学习
- tomcat源码学习
- HDU 1532--Drainage Ditches【最大流】
- [LeetCode]Find Minimum in Rotated Sorted Array
- 取石子游戏
- 计算机组成原理入门(二)
- 堆排序
- tomcat源码学习(1)
- NSOperationQueue、NSRunLoop和线程安全
- 循序渐进学习嵌入式linux开发---在vmware上安装ubuntu-8.10
- git 基础知识
- Mysql索引优化
- 1728 hdu 逃离迷宫(DFS)
- 一条SQL语句面试题:求选修所有课程的学生
- 韩信点兵
- Java中this的用法