`
zhaohaolin
  • 浏览: 1012316 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tomcat 7 源码分析-1 关于读取properties及注册系统properties

阅读更多

tomcat 7 源码分析-1 关于读取properties及注册系统properties

Tomact的启动开始于Bootstrap.java,在其init()中,首先要做的就是

 

Java代码  收藏代码
  1.         setCatalinaHome();  
  2.         setCatalinaBase();  
  3. initClassLoaders();  
        setCatalinaHome();
        setCatalinaBase();
initClassLoaders();

 目的就是将tomcat启动的环境设置好,在进行classloader。

 

Java代码  收藏代码
  1. private   void  setCatalinaHome() {  
  2.   
  3.       if  (System.getProperty( "catalina.home" ) !=  null )  
  4.           return ;  
  5.       File bootstrapJar =   
  6.           new  File(System.getProperty( "user.dir" ),  "bootstrap.jar" );  
  7.       if  (bootstrapJar.exists()) {  
  8.           try  {  
  9.               System.setProperty  
  10.                   ("catalina.home" ,   
  11.                    (new  File(System.getProperty( "user.dir" ),  ".." ))  
  12.                    .getCanonicalPath());  
  13.                 
  14.           } catch  (Exception e) {  
  15.               // Ignore   
  16.               System.setProperty("catalina.home" ,  
  17.                                  System.getProperty("user.dir" ));  
  18.           }  
  19.       } else  {  
  20.           System.setProperty("catalina.home" ,  
  21.                              System.getProperty("user.dir" ));  
  22.       }  
  23.   }  
  private void setCatalinaHome() {

        if (System.getProperty("catalina.home") != null)
            return;
        File bootstrapJar = 
            new File(System.getProperty("user.dir"), "bootstrap.jar");
        if (bootstrapJar.exists()) {
            try {
                System.setProperty
                    ("catalina.home", 
                     (new File(System.getProperty("user.dir"), ".."))
                     .getCanonicalPath());
                
            } catch (Exception e) {
                // Ignore
                System.setProperty("catalina.home",
                                   System.getProperty("user.dir"));
            }
        } else {
            System.setProperty("catalina.home",
                               System.getProperty("user.dir"));
        }
    }

 判断user.dir\bootstrap.jar存在否来设置catalina.home。

 

在initClassLoaders();中调用createClassLoader。loader class之前又要读取properties,于是看String value = CatalinaProperties.getProperty(name + ".loader");

 

 

Java代码  收藏代码
  1. public   class  CatalinaProperties {  
  2.   
  3.   
  4.     // ------------------------------------------------------- Static Variables   
  5.   
  6.     private   static   final  org.apache.juli.logging.Log log=  
  7.         org.apache.juli.logging.LogFactory.getLog( CatalinaProperties.class  );  
  8.   
  9.     private   static  Properties properties =  null ;  
  10.   
  11.   
  12.     static  {  
  13.   
  14.         loadProperties();  
  15.   
  16.     }  
  17.   
  18.   
  19.     // --------------------------------------------------------- Public Methods   
  20.   
  21.   
  22.     /**  
  23.      * Return specified property value.  
  24.      */   
  25.     public   static  String getProperty(String name) {  
  26.       
  27.         return  properties.getProperty(name);  
  28.   
  29.     }  
  30.   
  31.   
  32.     /**  
  33.      * Return specified property value.  
  34.      */   
  35.     public   static  String getProperty(String name, String defaultValue) {  
  36.   
  37.         return  properties.getProperty(name, defaultValue);  
  38.   
  39.     }  
  40.   
  41.   
  42.     // --------------------------------------------------------- Public Methods   
  43.   
  44.   
  45.     /**  
  46.      * Load properties.  
  47.      */   
  48.     private   static   void  loadProperties() {  
  49.   
  50.         InputStream is = null ;  
  51.         Throwable error = null ;  
  52.   
  53.         try  {  
  54.             String configUrl = getConfigUrl();  
  55.             if  (configUrl !=  null ) {  
  56.                 is = (new  URL(configUrl)).openStream();  
  57.             }  
  58.         } catch  (Throwable t) {  
  59.             ExceptionUtils.handleThrowable(t);  
  60.         }  
  61.   
  62.         if  (is ==  null ) {  
  63.             try  {  
  64.                 File home = new  File(getCatalinaBase());  
  65.                 File conf = new  File(home,  "conf" );  
  66.                 File properties = new  File(conf,  "catalina.properties" );  
  67.                 is = new  FileInputStream(properties);  
  68.             } catch  (Throwable t) {  
  69.                 ExceptionUtils.handleThrowable(t);  
  70.             }  
  71.         }  
  72.   
  73.         if  (is ==  null ) {  
  74.             try  {  
  75.                 is = CatalinaProperties.class .getResourceAsStream  
  76.                     ("/org/apache/catalina/startup/catalina.properties" );  
  77.             } catch  (Throwable t) {  
  78.                 ExceptionUtils.handleThrowable(t);  
  79.             }  
  80.         }  
  81.   
  82.         if  (is !=  null ) {  
  83.             try  {  
  84.                 properties = new  Properties();  
  85.                 properties.load(is);  
  86.                 is.close();  
  87.             } catch  (Throwable t) {  
  88.                 error = t;  
  89.             }  
  90.         }  
  91.   
  92.         if  ((is ==  null ) || (error !=  null )) {  
  93.             // Do something   
  94.             log.warn("Failed to load catalina.properties" , error);  
  95.             // That's fine - we have reasonable defaults.   
  96.             properties=new  Properties();  
  97.         }  
  98.   
  99.         // Register the properties as system properties   
  100.         Enumeration<?> enumeration = properties.propertyNames();  
  101.         while  (enumeration.hasMoreElements()) {  
  102.             String name = (String) enumeration.nextElement();  
  103.             String value = properties.getProperty(name);  
  104.             if  (value !=  null ) {  
  105.                 System.setProperty(name, value);  
  106.             }  
  107.         }  
  108.   
  109.     }  
  110.   
  111.   
  112.     /**  
  113.      * Get the value of the catalina.home environment variable.  
  114.      */   
  115.     private   static  String getCatalinaHome() {  
  116.         return  System.getProperty( "catalina.home" ,  
  117.                                   System.getProperty("user.dir" ));  
  118.     }  
  119.       
  120.       
  121.     /**  
  122.      * Get the value of the catalina.base environment variable.  
  123.      */   
  124.     private   static  String getCatalinaBase() {  
  125.         return  System.getProperty( "catalina.base" , getCatalinaHome());  
  126.     }  
  127.   
  128.   
  129.     /**  
  130.      * Get the value of the configuration URL.  
  131.      */   
  132.     private   static  String getConfigUrl() {  
  133.         return  System.getProperty( "catalina.config" );  
  134.     }  
  135.   
  136.   
  137. }  
public class CatalinaProperties {


    // ------------------------------------------------------- Static Variables

    private static final org.apache.juli.logging.Log log=
        org.apache.juli.logging.LogFactory.getLog( CatalinaProperties.class );

    private static Properties properties = null;


    static {

        loadProperties();

    }


    // --------------------------------------------------------- Public Methods


    /**
     * Return specified property value.
     */
    public static String getProperty(String name) {
	
        return properties.getProperty(name);

    }


    /**
     * Return specified property value.
     */
    public static String getProperty(String name, String defaultValue) {

        return properties.getProperty(name, defaultValue);

    }


    // --------------------------------------------------------- Public Methods


    /**
     * Load properties.
     */
    private static void loadProperties() {

        InputStream is = null;
        Throwable error = null;

        try {
            String configUrl = getConfigUrl();
            if (configUrl != null) {
                is = (new URL(configUrl)).openStream();
            }
        } catch (Throwable t) {
            ExceptionUtils.handleThrowable(t);
        }

        if (is == null) {
            try {
                File home = new File(getCatalinaBase());
                File conf = new File(home, "conf");
                File properties = new File(conf, "catalina.properties");
                is = new FileInputStream(properties);
            } catch (Throwable t) {
                ExceptionUtils.handleThrowable(t);
            }
        }

        if (is == null) {
            try {
                is = CatalinaProperties.class.getResourceAsStream
                    ("/org/apache/catalina/startup/catalina.properties");
            } catch (Throwable t) {
                ExceptionUtils.handleThrowable(t);
            }
        }

        if (is != null) {
            try {
                properties = new Properties();
                properties.load(is);
                is.close();
            } catch (Throwable t) {
                error = t;
            }
        }

        if ((is == null) || (error != null)) {
            // Do something
            log.warn("Failed to load catalina.properties", error);
            // That's fine - we have reasonable defaults.
            properties=new Properties();
        }

        // Register the properties as system properties
        Enumeration<?> enumeration = properties.propertyNames();
        while (enumeration.hasMoreElements()) {
            String name = (String) enumeration.nextElement();
            String value = properties.getProperty(name);
            if (value != null) {
                System.setProperty(name, value);
            }
        }

    }


    /**
     * Get the value of the catalina.home environment variable.
     */
    private static String getCatalinaHome() {
        return System.getProperty("catalina.home",
                                  System.getProperty("user.dir"));
    }
    
    
    /**
     * Get the value of the catalina.base environment variable.
     */
    private static String getCatalinaBase() {
        return System.getProperty("catalina.base", getCatalinaHome());
    }


    /**
     * Get the value of the configuration URL.
     */
    private static String getConfigUrl() {
        return System.getProperty("catalina.config");
    }


}

 CatalinaProperties 的核心是静态函数loadProperties(),在这里读取真正意义上的properties并注册

分享到:
评论

相关推荐

    session 共享 tomcat-redis-session-manager 所需要的jar (绝对可用)

    cluster-redis-session-manager-3.0.jar":这是Tomcat Redis Session Manager的核心组件,实现了Tomcat的Session监听器和Manager接口,使得Tomcat能够将Session数据存储到Redis中,并在需要时从Redis中读取。...

    Tomcat基于Jenkins-Ansible的自动发布-1.pdf

    - **Tomcat**: 版本7及以上,作为应用容器。 - **Jenkins**: 版本2.107.1,用于持续集成和持续部署。 - **Linux**: CentOS 6及以上版本,作为服务器操作系统。 2. **Jenkins插件**: - **Ansible Plugin**: 执行...

    tomcat源码

    Tomcat支持多语言环境,源码中的LocalStrings.properties文件用于存储国际化文本,通过Locale对象切换不同语言版本。 总的来说,Tomcat源码的学习不仅能帮助开发者深入了解Web服务器的工作原理,还能提升解决实际...

    tomcat日志log4j配置的jar

    在Tomcat启动时,它会读取`logging.properties`并根据配置使用Log4j进行日志记录。如果需要针对特定Web应用进行更细粒度的日志控制,可以在Web应用的`WEB-INF/classes`目录下放置自己的`log4j.properties`或`log4j....

    tomcat跨域解决方案

    ### Tomcat跨域解决方案 #### 一、背景与问题描述 在现代Web开发中,由于浏览器的安全策略限制,不同源之间的资源访问会受到限制,这种现象被称为“同源策略”(Same-Origin Policy)。同源策略是为了保护用户数据...

    Domino与Tomcat的集成

    ### Domino与Tomcat的集成详解 #### 一、引言 随着互联网技术的发展,企业级应用对于Web服务的需求越来越高。Domino作为一款优秀的办公自动化工具,一直以来都以其强大的邮件处理功能和文档管理能力受到用户的青睐...

    tomcat_连接池数据库密码加密解密方法

    - 首先,从官方网站下载对应Tomcat版本的Commons DBCP源码包。 - 打开`org.apache.commons.dbcp.BasicDataSourceFactory`类,找到处理密码的部分代码: ``` value=properties.getProperty(PROP_PASSWORD); if...

    IDEA WEB项目启动不加载application.properties配置文件.docx

    "IDEA WEB项目启动不加载application.properties配置文件" 在本篇文章中,我们将讨论IDEA WEB项目启动不加载application.properties配置文件的问题。这个问题可能是由于项目中使用的SpringBoot版本不一致引起的。...

    tomcat启动原理解析

    - Tomcat会读取`conf/catalina.properties`、`conf/server.properties`等配置文件,获取服务器的默认设置。 - `webapps`目录下的每个应用都有对应的`WEB-INF/web.xml`,定义了应用的部署信息,Tomcat会逐一解析...

    Tomcat解决跨域的两个jar包java-property-utils-1.9.jar和cors-filter-1.7.jar

    1. 将`cors-filter-1.7.jar`添加到Tomcat的`lib`目录下,确保Tomcat能够加载这个库。 2. 创建一个配置文件,例如`CORSFilter.properties`,其中定义跨域策略。比如: ``` allowed.origins=http://example.com, ...

    WebFocus的IIS-Tomcat配置

    在Windows 2003操作系统环境下,为了实现WebFocus系统的部署与运行,通常会采用IIS作为Web服务器,Tomcat作为应用服务器的架构。这种配置能够有效地支持动态网页、脚本执行以及更为复杂的Web应用需求。接下来,我们...

    java web开发中获取tomcat上properties文件内容的方法

    3. 加载properties文件:通过`java.io.FileInputStream`和`java.util.Properties`类读取properties文件,并使用`load`方法加载文件中的内容。 4. 获取配置项:使用`getProperty`方法根据key值获取properties文件中...

    引用国际化资源乱码--properties edit

    它们通常使用ISO-8859-1编码,但为了支持中文等非ASCII字符,我们需要将其编码转换为UTF-8。 1. **编码问题**: - **创建阶段**:当你编辑.properties文件时,确保编辑器(如Notepad++、Eclipse、IntelliJ IDEA等...

    Linux简明教程.rar

    1.列出系统上的用户 2.另一种方法 3.推荐使用的 八、用户间通信-------------------------------------------------------------------------------------- 1.发送消息 2.接受消息和拒绝消息 九、发一封邮件--...

    ubuntu linux下apache与tomcat的整合.txt

    # 指定 mod_jk 模块需要读取的配置文件 workers.properties 的位置 JkWorkersFile /usr/local/apache/conf/workers.properties # 设置 mod_jk 日志文件的位置 JkLogFile /usr/local/apache/logs/mod_jk.log # 设置...

    Tomcat服务器配置、启动分析、Servlet文件配置

    总之,理解和掌握Tomcat服务器的配置、启动分析及Servlet文件配置是Java Web开发者的必备技能。通过学习这些内容,开发者能够有效地管理Tomcat服务器,优化应用性能,以及提供稳定、安全的Web服务。不断探索和实践,...

    如何读取webroot文件下的属性文件

    在Web开发中,属性文件通常用于存储配置信息,如数据库连接字符串、系统参数或本地化文本。这些文件通常以`.properties`为扩展名,并且位于应用程序的`WEB-INF`或`webroot`目录下,以便于访问和管理。在本文中,我们...

    tomcat启动服务运行servlet

    1. 加载服务器配置:Tomcat读取`conf/server.xml`文件,这是服务器的主要配置文件,定义了服务器的端口、连接器、上下文等。 2. 初始化:Tomcat初始化各个模块,如JMX注册、JNDI目录等。 3. 加载 Realm:Realm是...

Global site tag (gtag.js) - Google Analytics