在这个由四部分组成的系列文章的第一部分,我们将弄清什么是数据绑定,与在 java 应用程序中处理 xml 数据的其它方法相比它有什么优势,以及如何开始使用它。这一部分将考查为什么使用数据绑定,以及如何为各种约束建立模型,使 xml 文档能转换成 java 对象。 同时还涵盖用于生成数据绑定类的输入和输出。
您希望在您的 java 应用程序中使用 xml 吗?那么好,同成千上万的其他人一起上这条船吧。当您深入了解 xml 以后,也许您会发现 dom 和 sax api(请参阅参考资料)不过是唬人的东西。您可能认为肯定存在某种简单方法可以取得 xml 文档,并通过 java 应用程序访问它,对吗?不必通过回调或复杂的树状结构,而是使用像 setowner(stringowner) 和 int getnumorders() 这样的方法,对吗?如果您曾经沿着这一思路考虑问题,那么数据绑定就是您要寻找的解决方案。
分析各种选择
当今各种 xml 和 xml 主义正泛滥成灾(xsl、rdf、命名空间、rss、xml schema、xslt...),您可能认为现在会有很多方法去访问 java 应用程序中的 xml 数据。令人惊讶的是,如果您寻根究底,实际只存在三种访问 xml 数据的方法。没错 -- 只有三种方法,其中的一种还是最近随一种新的 java api 才出现的。
应该这样来看待这一问题:选择范围小使您更易于选出适合于您的方法。
回调
回调是作为一种事件驱动模型工作的。当分析 xml 文档时,某些事件 -- 如文档的起始和某个元素中的字符数据的起始 -- 将触发回调方法。通过使用执行逻辑所需的数据,您可以实现这些事件的 java 代码。要弄清这种方法不能全靠直觉;开发人员通常要花费一段时间来理解和掌握回调模型的使用。sax,用于 xml 的一种简单 api,是这种 xml 使用方法的事实上的标准。
树
更常见、更流行的是这种 api,它们取得一个 xml 文档,然后创建数据的树状结构。xml 文档成为树首,充当一种容器。它有若干子级,如根元素。根元素又有其附加的子级,依此类推,直到(在某种意义上)获得 xml 数据的一幅图为止。因为几乎每个大学生在某个阶段肯定都处理过树状结构,所以这就可用作表示 xml 数据的一种非常直观的方法。
用于 xml 文档树状表示的最流行的 api 就是 w3c 的推荐标准,即文档对象模型 (dom)。一种更新的 api,jdom (这不是首字母缩写词)最近也正一直在推广并流行开来。(虽然这个方案是我和 jason hunter 建立的,但我还得说实话。)另外,dom 和 jdom 都是 spinnaker 方案设计的基本要求,spinnaker 是一种新的 xml 分析器,它作为 apache xml 方案的一部分正在开发之中。
虽然树状 api 看起来比事件驱动的 sax 更易于使用,但它们并不总是合适的。非常大的文档可能需要大量的内存(尤其是使用 dom 时);当对树结构执行转换 (xslt) 时,系统可能停止运转甚至彻底崩溃。虽然更新的 api(如 jdom)能处理这些问题,但如果您必须处理极大量的数据,它们仍将是一个问题。并且,有时开发人员宁愿将 xml 文档中的数据建模为一个简单的带有值的读写方法的 java 对象,而不用树状模型工作。例如,开发人员会宁愿不去访问名为 skunumber 的子节点并设置该节点的文本值,而只想调用 setskunumber("mysku") 并继续进行。
| 术语解释 数据绑定:从 java 应用程序内部访问 xml 数据的一种新方法,使用仍在开发中的一种 api,jsr-031。 jsr-031: sun 仍在开发中的一种新的 java 规范请求,设计用于将 xml 文档编译成一个或多个 java 类,而在 java 应用程序中可以方便地使用这些 java 类。 打包:将 java 对象转换为 xml 表示,拥有当前值。 解包:根据 xml 对象创建 java 对象,通常是根据打包生成一个 java 对象。 |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器