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

杂记(1)

阅读更多

J ive 2.5

从index.jsp

<% String title = JiveGlobals.getJiveProperty("websiteconf.name"); %>

看jdom解析过程

 

jiveGlobals.getJiveProperty(String name)

 

    public static String getJiveProperty(String name) {

        loadProperties(); 
        return properties.getProperty(name);//XMLProperties

    }

    private synchronized static void loadProperties() {

            // If jiveHome is still null, no outside process has set it and

            // we have to attempt to load the value from jive_init.properties,

            // which must be in the classpath.

            if (jiveHome == null) {

                jiveHome = new InitPropLoader().getJiveHome(); //本类中方法,主要是jiveHome的路径

            }

            //Create a manager with the full path to the xml config file.
            //XMLProperties是自己写的类

            properties = new XMLProperties(jiveHome + File.separator +

                    JIVE_CONFIG_FILENAME); 
            //JIVE_CONFIG_FILENAME = "jive_config.xml";

    }

class InitPropLoader {

    public String getJiveHome() {
        String jiveHome = null;
        Properties initProps = new Properties();
        InputStream in = null;
        try {
            in = getClass().getResourceAsStream("/jive_init.properties");
            initProps.load(in);
        }
        catch (Exception e) {
            System.err.println("Error reading Jive properties "
                + "in JiveGlobals");
            e.printStackTrace();
        }
        finally {
            try {
                if (in != null) { in.close(); }
            } catch (Exception e) {}
        }
        if (initProps != null) {
        //用指定的键在此属性列表中搜索属性
            jiveHome = initProps.getProperty("jiveHome"); //Property中的方法
            if (jiveHome != null) {
                jiveHome = jiveHome.trim(); //string 到修剪方法
                //Remove trailing slashes.
                //linux 的/  windows "\\"
                while (jiveHome.endsWith("/") || jiveHome.endsWith("\\")) {
                    jiveHome = jiveHome.substring(0, jiveHome.length()-1);
                }
            }
        }
        return jiveHome;
    }
}

 

 

XMLProperties.java

    public XMLProperties(String file) {

        this.file = new File(file);

        try {

            SAXBuilder builder = new SAXBuilder();

            // Strip formatting

            DataUnformatFilter format = new DataUnformatFilter();

            builder.setXMLFilter(format);

            doc = builder.build(new File(file));

        }

        catch (Exception e) {

            System.err.println("Error creating XML parser in "

                + "PropertyManager.java");

            e.printStackTrace();

        }

    }

       public String getProperty(String name) {

        if (propertyCache.containsKey(name)) { //propertyCache是 HashMap

            return (String)propertyCache.get(name);

        }


        String[] propName = parsePropertyName(name); //parsePropertyName本类中方法
        //是一个将websiteconfig.name 字符串去掉"."号到方法

        // Search for this property by traversing down the XML heirarchy.

        Element element = doc.getRootElement();

        for (int i = 0; i < propName.length; i++) {

            element = element.getChild(propName[i]); //最终将是得到name了,前一个
            //websiteconf会被覆盖掉了吧? 2011-2-15

            if (element == null) {

                // This node doesn't match this part of the property name which

                // indicates this property doesn't exist so return null.

                return null;

            }

        }

        // At this point, we found a matching property, so return its value.

        // Empty strings are returned as null.

        String value = element.getText();

        if ("".equals(value)) {

            return null;

        }

        else {

            // Add to cache so that getting property next time is fast.

            value = value.trim();

            propertyCache.put(name, value); //此处有什么作用?2011-2-15

            return value;

        }

    }

    private String[] parsePropertyName(String name) {

        // Figure out the number of parts of the name (this becomes the size

        // of the resulting array).

        int size = 1;

        for (int i=0; i<name.length(); i++) {

            if (name.charAt(i) == '.') {

                size++;

            }

        }

        String[] propName = new String[size]; 
        // Use a StringTokenizer to tokenize the property name.
        StringTokenizer tokenizer = new StringTokenizer(name, "."); //利用提供了分割符到构造方法

        int i = 0;

        while (tokenizer.hasMoreTokens()) { //判断是否还有分割符

            propName[i] = tokenizer.nextToken(); //返回从当前位置到下一个分隔符的字符串

            i++;

        }

        return propName; 
    }
 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    面试杂记1

    1. **资源转化**:首先,aapt工具会处理资源文件,生成对应的R文件和资源文件。 2. **AIDL转换**:adil工具将aidl接口转换为Java接口。 3. **Java编译**:Java Compiler将R文件、Java源代码、aidl转换的Java接口...

    oracle杂记.doc

    oracle杂记.doc 这是我个人的总结。 主要是oracle的编程以及体系结构的理解。

    第14章 Pythonic与Python杂记.mp4

    第14章 Pythonic与Python杂记.mp4

    计算机杂记

    ### 计算机基础知识知识点概览 ...它使用一系列的元素来构建页面结构和内容,如段落、链接、图片等。 - **特点**: - 结构清晰:通过标签来定义网页的不同组成部分。 - 跨平台性:可以在不同的操作系统和浏览器上...

    oracle 9i杂记

    《Oracle 9i杂记——探索PLSQL的世界》 Oracle 9i,作为Oracle数据库的一个重要版本,引入了许多新特性和改进,其中PL/SQL(Procedural Language/Structured Query Language)是其核心组成部分,是一种结合了SQL和...

    李特伍德 一个数学家的杂记.pdf

    李特伍德的《一个数学家的杂记》是一本收录了作者关于数学、教育以及个人观点文章的集合。这本杂记以数学为主题,涉及的内容包括几何、概率论、数论以及历史上的数学发现等。李特伍德在书中讨论了数学知识与日常生活...

    yangbinfx的博客文章-ruby部分备份

    10. **ruby杂记1**:这部分可能包含了一些零散的Ruby编程技巧、最佳实践或者作者在开发过程中遇到的问题及其解决方案。 11. **Ruby-Rake简介**:Rake是Ruby的构建工具,类似于Java的Ant或Python的setup.py,用于...

    杂记:一家大鱼及其他

    杂记中所讲述的内容和描绘的场景,实际上蕴含了丰富的中国农村生活细节和风土人情,以及人性的细腻观察。以下是对这些内容的知识点解读: 首先,杂记中提到了家庭中烹饪的场景,特别强调了“蒸菜疙瘩”的制作过程。...

    PD杂记体育ii已同居ikyht

    1. **生成数据库脚本**:通过Database &gt; Generate Database &gt; Generate Script,用户可以导出数据库表结构的SQL脚本。在创建脚本时,可以定制名称规则,例如使用中文或英文名称以提高查询和编程的便利性。 2. **...

    installshield安装制作杂记

    installshield安装制作杂记 installshield x

    14.6 None|Pythonic与Python杂记|Python3.8入门 & 进阶 & 原生爬虫实战完全解读

    14.6_None|Pythonic与Python杂记|Python3.8入门_&_进阶_&_原生爬虫实战完全解读

    反爬杂记日常记录十一字

    反爬杂记日常记录十一字

    爬虫杂记日常记录十一字

    爬虫杂记日常记录十一字

    个人笔记美食杂记生活等

    个人笔记美食杂记生活等

    51单片机C语言学习杂记

    《51单片机C语言学习杂记》 在单片机的世界里,51系列因其结构简单、应用广泛而成为初学者的首选。学习51单片机,需要掌握编程语言,通常有两种选择——汇编语言和C语言。汇编语言虽然能够生成高效的机器代码,但...

    狱中杂记教学设计.pdf

    狱中杂记教学设计.pdf

    单片机C语言学习杂记

    ### 单片机C语言学习杂记 #### 一、单片机与C语言简介 在电子技术领域,单片机是一种集成了微处理器、存储器以及多种输入输出接口的微型计算机系统。51单片机是基于MCS-51架构的一种广泛使用的单片机型。由于其...

    51单片机P89V51学习杂记.rar

    《51单片机P89V51学习杂记》是针对电子工程初学者以及对51单片机有兴趣的开发者提供的一份宝贵资源。这份压缩包包含了关于51单片机及其应用的深入学习材料,特别是侧重于P89V51型号的单片机。下面将对其中的主要知识...

    互联网杂记(六).docx

    互联网杂记(六).docx

Global site tag (gtag.js) - Google Analytics