`
smartvessel
  • 浏览: 82046 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

        setCatalinaHome();
        setCatalinaBase();
initClassLoaders();

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

  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");

 

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)。同源策略是为了保护用户数据...

    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_连接池数据库密码加密解密方法

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

    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`目录下,以便于访问和管理。在本文中,我们...

    cors-filter-2.5 + java-property-utils-1.9.1.zip

    总结来说,这个压缩包提供了一个处理跨域请求的Filter实现,结合了对Java属性文件的读取工具,以便于在Tomcat服务器上配置和管理CORS策略。开发者可以利用这些工具轻松地控制跨域访问,提升Web应用的交互性。

Global site tag (gtag.js) - Google Analytics