仓酷云
标题:
JAVA网页编程之用Java天生XML
[打印本页]
作者:
若相依
时间:
2015-1-18 11:36
标题:
JAVA网页编程之用Java天生XML
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)xml|天生xml一样平常情形下,我们只需一提到XML,年夜多半成绩城市会合到剖析XML和XML布局等方面。在这类手艺范畴,W3C提出了DOM和SAX标准用来剖析数据,Sun供应了JavaXMLPack,而Apache则推出了Xerces和Xalan。但是,几近没有甚么存眷的眼光投射到输入XML这一成绩下去。把JavaBeans和Swing组件酿成XML的项目倒有一些,但年夜多半情形下,开辟职员只不外但愿能用定制的格局输入数据布局,这个义务实在不难。
本文出格切磋了经由过程Java创立XML文档的一些办法。我会详细提到好几种用Java创立XML文档的计划。它们都各自具有分歧的长处,有些很复杂,有些则会依附于某些壮大的类库。上面我就从最复杂的办法提及。
利用StringBuffer类
最复杂、同时也是最经常使用的XML文档创立办法就是本人下手。你能够接纳StringBuffer类大概某些Writer类。其长处是你不必要用到其他库,并且也不必创立过剩的对象。但是,这一举动同时也带来了良多弱点。首当其冲的就是没法包管XML的格局准确性。字符在置进String对象的时分必需细心思索。你得出格当心XML实体的呈现,好比用<代替<等。清单A对此举例申明。
程序清单A的输入了局是:
<personname="JonSmith"age="21"/>
在这个复杂的例子里,假如人名很乖僻,好比Jon"TheCat"Smith,那末输入格局就出成绩了。这段代码在猎取名字的时分没有处置引号,了局输入的代码就成了上面如许子,明显这类暗示是毛病的:
<personname="Jon"TheCat"Smith"age="21"/>
在浏览源代码的时分很难跟踪埋没在Java内的XML。想反,这类开辟措施中约莫1半摆布的毛病都回结为没有关闭的标签和毛病的引号处置,简而言之就构成了有效的XML。
更了了和复杂的办法:DOM
第2个举措就是DOM,也就是所谓的文档对象形式(DocumentObjectModel)。在给定对象布局以后,你能够把它转换为某种格局的XML对象布局,然后输入了局。可用的布局范例良多,局限包含JakartaElementConstructionKit(ECS)项目标XML类到完整恪守DOM标准的剖析器等,好比Xerces,一般,版本越小输入XML的办法就越复杂。清单B就是一个接纳ECS的例子。
清单B提出了一种输入数据的简明举措。现实上,你能够把两个输入行兼并为一个,办法是把output办法附在新的XMLDocument以后。这是一种接纳ECS的有类语法形式,用起来便利之极。不外,这类办法不克不及很好地针对职员的岁数复制if-null回护。为了完成这类回护,你必需接纳清单C中的代码。
ECS体现出了好几种长处,你不用制止引号字符(")。你也不必要完整关闭标签,对象会为你做这些事情的,任何XML字符,好比<大概>都被<和>取代,ECS可谓最复杂的DOM办法。而用W3C的DOM、JDOM大概Dom4J来处置这类作风的代码则更加庞大一些,固然,W3C的DOM仍旧具有自力剖析的长处。
接纳ECS输入XML的弱点包含了对象所引出的成绩。你必需在写出内容之前创建对象。如许做在年夜多半情形下仍是不错的,可你在输入年夜型XML文件的时分则不但愿创建这类XML布局。一样的成绩对其他年夜多半DOM办法也存在。
比起复杂地接纳Writers大概StringBuffer类而言,ECS相称靠近于一种标志。它的体积对照年夜,但只要很小一部分才用来输入XML。最年夜的成绩是它的举动余地不年夜。它击败了其他同范例的计划,由于其他范例更年夜、更粗笨并且更庞大。
SAX
SAX(SimpleAPIforXML)能够替换DOM作风的XML剖析。它由一系列事务大概代码在剖析XML文件时所挪用的回调函数构成。在你把了局间接输入到Strings的情形下它其实不能派多年夜的用处。可是,它能够用在直接的、更加庞大的体例下。
输入Strings的代码能够取代输入SAX事务。这一招可比仅仅输入Strings要高多了,它能够到场到一个复杂的基类由其把SAX事务转换为XML。
让我们看看上面的例子,这个例子中利用了以下几个类:
•Person:营业对象,先前已举行了申明
•PersonInputSource:回收Person对象
•PersonXMLReader:晓得怎样把PersonInputSource转换为SAX事务
•XMLPrettyPrinter:把SAX事务转换为XML的ContentHandler
个中最主要的代码在PersonXMLReader内,如清单D所示。
清单D中的代码申明了Person对象是怎样被转换为一系列SAX事务的。但这可不是个最复杂的活。用SAX把Person转换为XML是经由过程清单E中的代码完成的。
接纳SAX明显让你把握了壮大的盘算才能,由于你能够在XML上附带SAX剖析器而没有接纳XMLPrettyPrinter。可是,在增添处置器的时分也会增添庞大性;SAX是一种更庞大的观点。在多半情形下,复杂的办法常常效果最好。
一旦基础组件编写出来(XMLPrettyPrinter是一个基础InputSource,一个XMLParser对象),发生事务就是大事一桩了。输入新的XML布局只必要parse办法和拔出组件便可。
环绕SAX事务创建XML还不是一个快速、便当的措施。
接纳XmlWriter类
最初我提出个本人的计划,这就是XmlWriter类。我的思绪是接纳一种界于太复杂和太庞大之间的手艺来输入XML。
主要的计划需求以下:
•封装java.io.Writer
•供应Writer类的API
•尽量地处置XML
•制止创建年夜型对象布局
•同意ECS链式作风
完成以上的这些需求可让XML写成两种作风。起首,它能够用java.lang.Writer代码写出来,如清单F所示。
其次,它能够用链式办法的编码作风写成,这倒和ECS相似,由于每一个write办法都前往XmlWriter本身。清单G给出了如许的例子。
从功能角度上看,XmlWriter具有必定的明显上风,它几近没有创立其他对象。具有相称的功效性,能够处置基础的XML片断(但没有正文、缩排大概文档范例)。最主要的是,用起来很复杂。
其负面成绩已提到过了,它不克不及处置正文、缩排大概文档范例。而ECS在XML对象写出本身时能够关闭标签,XmlWriter必要你挪用endEntity办法。假如实体没有停止就挪用该办法就会扔出XmlWritingException。最初,另有一个close办法。它其实不关闭writer对象,但会完成任何编写中的XML。也许最主要的是,它会在实体没有停止的情形下扔出XmlWritingException。
小结
发生XML办法有好几种办法。XmlWriter其实不必定是最好的XML创立工具,可是这类办法弥补了太复杂、太粗笨以致太庞大之间的鸿沟。
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net,
作者:
爱飞
时间:
2015-1-21 11:00
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
金色的骷髅
时间:
2015-1-26 21:00
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
海妖
时间:
2015-1-29 10:47
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
谁可相欹
时间:
2015-1-31 15:59
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
admin
时间:
2015-1-31 17:07
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
第二个灵魂
时间:
2015-2-3 12:13
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者:
精灵巫婆
时间:
2015-2-6 16:48
是一种为 Internet发展的计算机语言
作者:
山那边是海
时间:
2015-2-6 21:12
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
小魔女
时间:
2015-2-9 07:32
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
蒙在股里
时间:
2015-2-24 23:51
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
莫相离
时间:
2015-3-7 14:24
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
再见西城
时间:
2015-3-10 22:01
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
老尸
时间:
2015-3-11 15:50
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
乐观
时间:
2015-3-15 07:44
是一种为 Internet发展的计算机语言
作者:
小女巫
时间:
2015-3-17 11:08
是一种使用者不需花费很多时间学习的语言
作者:
若天明
时间:
2015-3-20 04:20
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
不帅
时间:
2015-3-31 18:05
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
分手快乐
时间:
2015-4-16 08:11
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者:
小妖女
时间:
2015-4-21 06:08
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
简单生活
时间:
2015-5-6 17:54
是一种语言,用以产生「小应用程序(Applet(s))
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2