[代码阅读] ECS toString实现方法

引言

    ECS 提供了一种编程方式来生成以不同标记语言编写的文档。它设计为通过面向对象的抽象来生成所有标签。
    ECS 目前版本为1.4.2 ,支持 HTML 4.0 和 XML 。

    因为工作原因,作者粗略读了ECS的部分原代码,着重了解ECS如果通过toString方法实现HTML代码的生成。如有不足之处,请指出。

前期准备

    下载Jakarta ECS http://jakarta.apache.org/ecs

开始

    ECS 将HTML的标签都做为一个JavaBean实现,放在org.apache.ecs.html下,每个元素都有相应的getter和setter方法实现对象属性的存取。并通过toString方法将元素转化为标准的html代码。
    toString方法是如何实现的呢?我们先看看ECS主要类结构:

   

[代码阅读] <wbr>ECS <wbr>toString实现方法


    原来任何元素都是从ConcreteElement继承过来的,而ConcreteElement又继承了ElementAttributes。 ConcreteElement实现了元素addElement方法,ElementAttributes实现了元素addAttribute的方法。
    ConcreteElement和ElementAttributes都采用了hashtable的方法存取数据。我们看看它们的关键代码:

    ConcreteElement关键代码:
   
以下内容为程序代码:

        private Hashtable registry = new Hashtable(4); // keep a list of elements that need to be added to the element
       
        private Vector registryList = new Vector(2);

        ……

       
        public Element addElementToRegistry(String hashcode,Element element)
        {
            if ( hashcode == null || element == null )
                return(this);

            element.setFilterState(getFilterState());
            if(ECSDefaults.getDefaultPrettyPrint() != element.getPrettyPrint())
                element.setPrettyPrint(getPrettyPrint());
            registry.put(hashcode,element);
            if(!registryList.contains(hashcode))
                registryList.addElement(hashcode);
            return(this);
        }
        ……
   

   
    ElementAttributes 和ConcreteElement不同,hashtable的声明是在超类GenericElement中实现的。
    ElementAttributes关键代码:
   
以下内容为程序代码:

        public Element addAttribute(String s, int i)
        {
            getElementHashEntry().put(s, new Integer(i));
            return this;
        }
   

   
    GenericElement关键代码:
   
以下内容为程序代码:

        private Hashtable element;
        ……
        public GenericElement()
        {
        ……
            element = new Hashtable(4);
            ……
        }
        ……
        protected Hashtable getElementHashEntry()
        {
            return element;
        }
   

   
    元素的toString的真正实现也在GenericElement里
   
以下内容为程序代码:

        public final String toString()
        {
            StringWriter stringwriter = new StringWriter();
            String s = null;
            try
            {
                output(stringwriter);
                stringwriter.flush();
                s = stringwriter.toString();
                stringwriter.close();
            }
            catch(UnsupportedEncodingException unsupportedencodingexception)
            {
                unsupportedencodingexception.printStackTrace();
            }
            catch(IOException ioexception)
            {
                ioexception.printStackTrace();
            }
            return s;
       

转载于:https://www.cnblogs.com/vanuan/archive/2005/12/23/9576191.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示

设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示&#xff08;1.准备工作&#xff09; 原创 Sean Yu 云计算实战 2019-12-06 本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品。 主要实战的内容为&#xff1a; 将设备遥…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构

前段时间研究了Window Azure ServiceBus Messaging消息队列技术&#xff0c;搞了很多技术研究和代码验证&#xff0c;最近准备总结一下&#xff0c;分享给大家。 首先&#xff0c;Windows Azure提供了两种类型的消息队列机制&#xff1a;Azure Queues和ServiceBus Queues。 其…

Atlas应用程序调试技巧

本文为翻译文章&#xff0c;原文地址&#xff1a;http://atlas.asp.net/docs/Overview/debug.aspx “Atlas”程序由服务器端代码和客户端代码组成&#xff0c;并且&#xff0c;浏览器可能会要去异步请求一些数据。那么&#xff0c;怎样才能Debug这样的web程序呢。本文将告诉…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门

各位&#xff0c;上一篇基本概念和架构中&#xff0c;我们介绍了Window Azure ServiceBus的消息队列技术的概览。接下来&#xff0c;我们进入编程模式和详细功能介绍模式&#xff0c;一点一点把ServiceBus技术研究出来。 本章我们主要介绍ServiceBus的编程SDK编程入门。 首先…

linux octave源码安装,在Linux操作系统上安装Octave的方法

本文介绍在Ubuntu、Debian、Arch Linux、Fedora、OpenSUSE操作系统上安装Octave(也称GNU Octave)的方法&#xff0c;它还支持Flatpak方式安装。简介GNU Octave是一种用于科学和数学计算操作的解释性命令语言&#xff0c;它与Matlab兼容&#xff0c;支持各种扩展&#xff0c;允许…

linux安装静默安装was7,WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)

WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)安装之前需要准备的文件&#xff1a;C1G35ML.tar.gz&#xff1a;WAS7.0安装包C1G36ML.tar.gz&#xff1a;WAS升级工具7.0.0-WS-WASSDK-LinuxX64-FP0000031.pak 7.0.0-WS-WAS-LinuxX64-FP0000031.pak &#xff1a;7.0.0.31升级包&…

【转】Azure云存储及存储账户概述***

本文介绍下Azure云存储及存储账户。 1、什么是微软Azure云存储 微软Azure云存储是微软提供的云端数据存储服务&#xff0c;是一种可伸缩、持久化的数据存储服务&#xff0c;可以在Internet上被访问并按实际存储容量收费。它也可以被REST API访问&#xff0c;可以保存Azure云端…

插入法排序c语言程序,插入排序算法及C语言实现

插入排序算法是所有排序方法中最简单的一种算法&#xff0c;其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中&#xff0c;最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种&#xff0c;采用的方法是&#xff1a;在添加新的记录时&a…

【转】Microsoft Azure存储服务:存储账户****

在正式使用 Microsoft Azure 存储服务之前&#xff0c;你至少需要有一个 Azure 订阅并创建「存储账户」。Azure 订阅账户可以访问和使用各种 Azure 服务&#xff0c;在有了 Azure 订阅之后便可以开始创建「存储账户」并开始使用前面存储类型与访问中曾介绍过的 blobs、表&#…

【转】Azure Logic App Demo

使用Azure Logic App Azure Function 完成简单的业务流程 什么是Logic App Azure 逻辑应用提供了&#xff0c;用于在云中简化并实现可缩放的集成和工作流的方式。 它提供了可视化设计器&#xff0c;用于为流程建模并将流程作为一系列步骤&#xff08;称为工作流&#xff09;…

【转】Azure应用部署方式对比

如图 azure环境应用托管方式对比 1. app service serverless azure的app service支持几乎所有语言开发的web app&#xff0c;既可以手动使用publish profile部署&#xff0c;也可以使用vsts创建一个&#xff08;CDCI&#xff09;持续集成。都非常方便。 而azure的function app…

c语言哪个方法称为程序大门,学会这8个经典小程序,就相当于跨入了C语言大门...

描述【程序1】题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;1.程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2.程序源代码&#x…

【转】无服务计算(Serverless Computing)核心知识

Serverless Computing概念 云原生计算基金会CNCF&#xff08;Cloud Native Computing Foundation, CNCF&#xff09;Serverless Whitepaper v1.0对无服务器计算作了如下定义&#xff1a; Serverless computing refers to the concept of building and running applications tha…

c语言中指数优化,西藏东财中证医药卫生指数C净值下跌1.96% 请保持关注

来源&#xff1a;金融界基金作者&#xff1a;机器君金融界基金08月07日讯 西藏东财中证医药卫生指数型发起式证券投资基金(简称&#xff1a;西藏东财中证医药卫生指数C&#xff0c;代码008552)公布最新净值&#xff0c;下跌1.96%。本基金单位净值为1.397元&#xff0c;累计净值…

PE文件结构详解(一)基本概念

&#xff08;一&#xff09;基本概念 PE&#xff08;Portable Execute&#xff09;文件是Windows下可执行文件的总称&#xff0c;常见的有DLL&#xff0c;EXE&#xff0c;OCX&#xff0c;SYS等&#xff0c;事实上&#xff0c;一个文件是否是PE文件与其扩展名无关&#xff0c;P…

【转】.NET平台开发Mongo基础知识

NoSQL简介 NoSQL相关的技术最近越来越受欢迎&#xff0c;Mongo本身就是基于NoSQL实现的。关于NoSQL你需要了解 什么是NoSQLNoSQL和传统的关系型数据库有什么区别NoSQL的优缺点 这几个问题下面的文章有所介绍&#xff1a; http://www.runoob.com/mongodb/nosql.html http://…

android studio如何编译测试,Android Studio 进行单元测试完整教程

前言为了这个AndroidStudio的单元测试&#xff0c;从下午搞到晚上才搞明白咋操作。我学一个新知识总是那么坎坷&#xff0c;经历无数的错误路径&#xff0c;才可能找到正确的路在哪儿。我的AndroidStudio我的AndroidStudio是1.5.1版本&#xff0c;但是进行单元测试应该很早的版…

android 对话框白色样式,Android 对话框(Dialog)样式大全以及简单实现

下面是几种对话框的效果图一&#xff1a;图二&#xff1a;图三&#xff1a;图四&#xff1a;图五&#xff1a;图六&#xff1a;图七&#xff1a;图1效果&#xff1a;该效果是当按返回按钮时弹出一个提示&#xff0c;来确保无误操作&#xff0c;采用常见的对话框样式。代码&…

【转】ABP源码分析二十一:Feature

Feature是什么&#xff1f;Feature就是对function分类的方法&#xff0c;其与function的关系就比如Role和User的关系一样。 ABP中Feature具有以下属性&#xff1a; 其中最重要的属性是name&#xff0c;用以表示feature的Identity,一个feature拥有一个name. 一个Feature可以有一…

android虚拟电话号码,为何安卓手机坚持虚拟按键?这才是原因

关于屏内虚拟按键设计的好坏&#xff0c;一直都存在很大的争议。围绕着屏内虚拟按键&#xff0c;支持者与反对者之间进行了长期的争论&#xff0c;至今仍未分出胜负。然而&#xff0c;当多功能前置指纹按键开始普及的时候&#xff0c;屏内虚拟按键似乎正在逐步走向边缘化。不过…