⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jaxb.htm

📁 这是一个实现登陆的页面程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.itisedu.com/phrase/200604181429065.html -->
<HTML xmlns:xsd><HEAD><TITLE>JAXB</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1492" name=GENERATOR></HEAD>
<BODY>
<CENTER>
<H1>JAXB</H1></CENTER>
<DIV>
<P align=right><FONT face=Verdana><FONT face=Verdana><FONT face=Verdana><FONT 
color=#f70938><FONT face=黑体><A 
href="http://www.itisedu.com/phrase/200604112229525.html" 
target=_new>中科永联</A>高级技术培训中心(</FONT><FONT face=黑体>www.itisedu.com</FONT><FONT 
face=黑体>)<IMG src="JAXB.files/200641814290764.jpg" 
border=0></FONT></FONT></FONT></FONT></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <A 
href="http://www.itisedu.com/phrase/200604181429065.html" 
target=_new>JAXB</A>(Java <A 
href="http://www.itisedu.com/phrase/200604241327575.html" 
target=_new>Architecture</A> for <A 
href="http://www.itisedu.com/phrase/200604231236585.html" target=_new>XML</A> 
Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java<A 
href="http://www.itisedu.com/phrase/200603090857555.html" 
target=_new>类</A>的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java<A 
href="http://www.itisedu.com/phrase/200603090845215.html" 
target=_new>对象</A>树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML<A 
href="http://www.itisedu.com/phrase/200603061709535.html" 
target=_new>模式</A>绑定到Java表示,从而使得Java开发者在Java应用<A 
href="http://www.itisedu.com/phrase/200604232224305.html" 
target=_new>程序</A>中能方便地结合XML数据和处理函数。 </FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAX或DOM。JAXB 
隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。</FONT></P>
<P><STRONG>一、JAXB是如何提出来的?</STRONG></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
我们在产品开发和版本升级过程中经常会遇到一些问题。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·数据的兼容性差<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
在升级的版本中,如果对Java类的改动超出了对象序列化兼容性的范围,如:改变了<A 
href="http://www.itisedu.com/phrase/200603071659325.html" 
target=_new>类图</A>结构中的继承关系和层次结构,改变或增减了类成员变量数量和<A 
href="http://www.itisedu.com/phrase/200603051002565.html" 
target=_new>类型</A>等等,都会造成新老版本的数据不一致性。很有可能新版本的系统不能兼容和使用老版本系统产生的数据。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·对数据的操作性差。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于序列化所产生的数据是由<A 
href="http://www.itisedu.com/phrase/200604261007235.html" 
target=_new>JVM</A>内部机制生成的二进制数据,对其进行修改和转换有一定的困难和风险。而且二进制数据的可读性比较差。而对这些图形数据的操作是此系统不可缺少的一部分。例如,不同版本之间的数据转换,不同格式之间的转换以及系统数据的导入和导出,都需要对系统数据进行不同程度的操作。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·数据的保存量大。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
用序列化保存的数据通常包含了大量无用的信息。例如,保存一个简单的"Button",序列化会保存它所有父类对象的所有实例的成员变量,还会保存这个对象所有缺省的其他属性。而实际上,我们只要关心这个"Button"上面的文本,加上它在图面中的坐标就行了。要控制序列化保存数据量的大小需要较复杂和繁琐的设置,例如使用“transit”修饰符等等(详见参考资料)。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·<A 
href="http://www.itisedu.com/phrase/200604181646475.html" 
target=_new>JDK</A>版本的影响。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
不同的JDK的序列化实现有可能会有差异,保存数据的格式也有所不同,这就使得系统有可能被绑定在某个版本的JDK,而不能使用高版本的JDK所带来的性能上和功能上的好处! 
</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
由于存在以上的问题,需要考虑采用其他的解决方案,以保证即能够保证数据操作的灵活性,又能够使用现有的数据格式和成熟的开发工具包,减轻系统开发和维护的负担。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
“XML”成为被考虑的目标之一。显然,具有“通用数据表示”之称的XML能够带来很大的灵活性,使得数据在各个平台之间的交换,各个版本之间的升级变得非常方便;而且,在XML的开发中,Java平台已经拥有很多成熟的<A 
href="http://www.itisedu.com/phrase/200603282233345.html" 
target=_new>软件开发</A>工具和解决方案。一般来说,使用XML作为系统数据存储的格式有以下两种解决方案:</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·直接使用Java对象序列化的内部对XML的支持功能:XmlEncoder和XMLDecoder两个类。这个功能其实是对象序列化功能本身的一部分,通过使用XmlEncoder和XMLDecoder这两个类,可以使序列化的数据以XML的格式保存和恢复,而不是二进制格式。这种方式增加了对数据的可读性和可操作性。但是仍然不能灵活地按照自己的意愿和<A 
href="http://www.itisedu.com/phrase/200603101518295.html" 
target=_new>需求</A>对数据进行保存和恢复。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·自己定义XML的数据格式。这个方案使系统拥有了最大的灵活程度。一旦使用自己定义的XML格式,那么对此XML格式的<A 
href="http://www.itisedu.com/phrase/200602282323195.html" 
target=_new>文件</A>进行解析、效验以及反向解析(XML文件的生成)都需要自己去开发了!一旦版本发生更新,XML的数据格式也有可能随着改变,这些解析和效验程序都有可能需要做出相应的改动。这样会大大增加了系统开发的负担和周期!</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
JAXB正是为解决这些问题而提出来的。在允许你自己灵活定义自己的 
XML文件格式的基础上,由JAXB替你生成操作XML文件的源代码,使你的应用程序将重点放到Java对象上,而不用直接面对XML操作。这正是JAXB的目的所在。<BR></FONT></P><FONT 
face=Verdana>
<P><FONT face=Verdana><STRONG>二、JAXB的<A 
href="http://www.itisedu.com/phrase/200603122156385.html" 
target=_new>体系结构</A></STRONG></FONT></P><FONT face=Verdana>
<P align=center><IMG src="JAXB.files/2006418143057665.jpg" border=0><BR>图 1 
JAXB体系结构</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAXB的体系结构和应用过程如图1所示,一般来说包含以下几个步骤:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·根据你的应用程序所要操作的XML数据格式,撰写相应的XML Schema,有关XML 
Schema的知识,请参阅“参考资料”</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·使用JAXB 所带的编译工具(Binding Compiler),将这个XML 
Schema文件作为输入,产生一系列相关的Java <A 
href="http://www.itisedu.com/phrase/200604231359565.html" 
target=_new>Class</A>和Interface</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·在使用JAXB编译工具的时候,可以有选择性的提供一个配置文件(图1的虚线部分),来控制JAXB编译工具的一些高级属性。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·这些Java 
Class和Interface是你的应用程序操纵XML数据的主要接口和方法。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·通过JAXB对XML文档进行的操作主要包括:将符合XML 
Schema规定的XML文档解析生成一组相应的Java对象;对这些对象进行操作(修改、增加和删除对象的属性等等);然后将这些对象的内容保存到这个XML文档中。</P>
<P><FONT face=Verdana><STRONG>三、使用XML和JAXB的优势</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·简单易用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
通过上面的例子,大家可以发现所有对XML文档的操作都隐藏起来了,你的应用程序不用使用SAX或DOM接口编程去操纵XML文档,使程序量降低,错误率减少,有助于程序质量的提高。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·维护性好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
当你的产品需要更新,或是数据模型需要改变时,只需要重新定义Schema,然后让JAXB重新生成对XML文档进行操纵的类,使得你的应用程序具有很好的维护性。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·数据兼容性好。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
当你进行版本更新的时候,往往要考虑兼容性问题。由于你使用了XML作为数据交换的格式,只需要提供XSLT的模板就能将原有的数据格式自动转换成新版本的格式。除此以外,你可以将你的XML表示的图形数据文件任意转换成其他标准的CAD数据格式,一切都在你的掌握之中。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·有较好的性能。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
因为JAXB在运行时在大部分时间中都是直接操纵内存中的Java对象,只有在读取和存储文件的时候才会与XML文件进行IO操作,实质上是为XML文件做了一个缓存,因此运行时的性能很好。</FONT></P>
<P><FONT face=Verdana><STRONG>四、使用JAXB的限制</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
跟直接使用Java对象序列化相比,JAXB也有它的限制。在使用Java序列化的时候,Java对象和XML文档是直接对应起来的。例如,在画布上有一个“java.<A 
href="http://www.itisedu.com/phrase/200604251406195.html" 
target=_new>awt</A>.Button”对象,那么当你进行序列化的时候,“java.awt.Button”的所有数据被直接存储到序列化文件中;在进行图形恢复的时候,文件中的序列化数据直接就转换成“java.awt.Button”对象了。然而在使用JAXB的时候,由于JAXB没有将XML文档转换成指定的Java类的功能,在XML和应用程序中间会多一层。例如,你不能要求JAXB从XML文档数据中直接生成“java.awt.Button”对象,JAXB在大多数环境中只能生成中间进行数据传递的对象。用“java.awt.Button”作为例子,使用JAXB,你只能根据XML中的数据生成JAXB特有的“MyButton”对象,在再通过“MyButton”对象中的数据去初始化“java.awt.Button”对象。这种间接的数据传递所带来的负面影响是使用JAXB的系统会产生大量传递数据的中间对象。虽然说,由于<A 
href="http://www.itisedu.com/phrase/200604261004365.html" 
target=_new>Java虚拟机</A>自动回收内存的特点,大量中间对象的产生有可能在长时间运行的Server应用中降低系统的性能,但是这种数据传递的方法在许多系统设计中都是可行的。</FONT></P>
<P><STRONG>五、JAXB实例分析</STRONG></P><FONT face=Verdana>
<P><FONT face=Verdana><STRONG>1. 示例运行的环境和步骤</STRONG></FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
本示例运行的Java环境是JDK1.3.1以上。本示例在Jdk1.4.1运行测试通过。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·从这里(bin.zip)可以下载已经编译好的可单独运行的示例程序。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·展开此压缩文件,在bin目录下找到可执行文件rundemo.bat(for windows)或rundemo.sh。 (for 
unix)</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
·确保环境变量JAVA_HOME已经正确设置,指向你系统所安装的JDK的目录。</FONT></P>
<P><FONT face=Verdana>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·运行rundemo.bat 
或rundemo.sh,就会出现如下图所示的运行画面。</FONT></P><FONT face=Verdana>
<P><BR><STRONG>2. 示例运行的场景</STRONG></P>
<P align=center><IMG src="JAXB.files/2006418144753634.jpg" border=0></P>
<P align=center>图2&nbsp; 
demo运行场景<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
如图2所示,本示例演示了一个非常简单的场景,它允许你在画布上使用鼠标绘制大小一定的正方形或圆形。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·你的鼠标点到什么位置,就会在相应的位置上绘制图形。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·你可以通过(Color)菜单改变当前画笔的颜色:绿色或红色。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·你可以通过(Graph)菜单改变当前图形的形状:正方形或圆形。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·你还可以通过(File)菜单中的“save”或“save <A 
href="http://www.itisedu.com/phrase/200604232104015.html" 
target=_new>as</A>”子菜单将当前已经绘制的图形以XML格式保存起来。</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -