📄 面向 java 开发人员的 ajax ajax 的 java 对象序列化.htm
字号:
align=right border=0>
<TBODY>
<TR>
<TD width=10><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width=10></TD>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR>
<TD class=v14-header-1-small>文档选项</TD></TR></TBODY></TABLE>
<TABLE class=v14-gray-table-border cellSpacing=0 cellPadding=0
border=0>
<TBODY>
<TR>
<TD class=no-padding width=150>
<TABLE cellSpacing=0 cellPadding=0 width=143
border=0><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width=8>
<FORM name=email
action=https://www.ibm.com/developerworks/secure/email-it.jsp><INPUT
type=hidden
value="如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java? Web 开发,那么您最关心的问题可能就是把数据从服务器传递给客户机。在“面向 Java 开发人员的 Ajax”系列的第二篇文章中,Philip McCarthy 介绍了 Java 对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息。"
name=body><INPUT type=hidden
value="面向 Java 开发人员的 Ajax: Ajax 的 Java 对象序列化"
name=subject><INPUT type=hidden value=cn name=lang>
<SCRIPT language=JavaScript type=text/javascript><!--document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>将此页作为电子邮件发送</b></a></p></td></tr>');//--></SCRIPT>
<NOSCRIPT>
<TBODY>
<TR vAlign=top>
<TD width=8><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width=8></TD>
<TD width=16><IMG height=16 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width=16></TD>
<TD class=small width=122>
<P><SPAN class=ast>未显示需要 JavaScript
的文档选项</SPAN></P></TD></TR></NOSCRIPT></FORM>
<TR vAlign=top>
<TD width=8><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width=8></TD>
<TD width=16><IMG height=16 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/fw_bold.gif"
width=16 vspace=3 border=0></TD>
<TD width=122>
<P><A class=smallplainlink
href="http://www.ibm.com/developerworks/community/"><B>讨论</B></A></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- 03/20/06 updated by gretchen --><BR>
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR>
<TD class=v14-header-2-small>拓展 Tomcat
应用</TD></TR></TBODY></TABLE>
<TABLE class=v14-gray-table-border cellSpacing=0 cellPadding=0
border=0>
<TBODY>
<TR>
<TD class=no-padding width=150>
<TABLE cellSpacing=0 cellPadding=0 width=143 border=0>
<TBODY>
<TR vAlign=top>
<TD width=8><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width=8></TD>
<TD><IMG height=16 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/fw_bold.gif"
width=16 vspace=3 border=0></TD>
<TD width=125>
<P><A class=smallplainlink
href="http://www.ibm.com/developerworks/cn/kickstart/webserver.html?S_TACT=105AGX52&S_CMP=simpleart">下载
IBM 开源 J2EE 应用服务器 WAS CE 新版本 V1.1</A>
</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!--END RESERVED FOR FUTURE USE INCLUDE FILES--><BR></TD></TR></TBODY></TABLE>
<P>级别: 中级</P>
<P><A
href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#author">Philip
McCarthy</A> (<A
href="mailto:philmccarthy@gmail.com?subject=Ajax 的 Java 对象序列化">mailto:philmccarthy@gmail.com?subject=Ajax
的 Java 对象序列化</A>), 软件开发顾问, 独立顾问<BR></P>
<P>2005 年 10 月 24 日</P>
<BLOCKQUOTE>如果您正在使用异步 JavaScript 和 XML(Ajax)进行 Java™ Web
开发,那么您最关心的问题可能就是把数据从服务器传递给客户机。在 <I>面向 Java 开发人员的 Ajax</I>
系列的第二篇文章中,Philip McCarthy 介绍了 Java
对象序列化的五种方式,并提供了选择最适合应用程序的数据格式和技术所需要的全部信息。</BLOCKQUOTE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
<P>在这个系列的 <A
href="http://www.ibm.com/developerworks/cn/java/j-ajax1/">第一篇文章</A>
中,我介绍了 Ajax 的构造块:</P>
<UL>
<LI>如何用 JavaScript <CODE>XMLHttpRequest</CODE> 对象从 Web
页面向服务器发送异步请求。
<LI>如何用 Java servlet 处理和响应请求(向客户机返回 XML 文档)。
<LI>如何在客户端用响应文档更新页面视图。 </LI></UL>
<P>这一次,我将继续讨论 Ajax 开发的基础知识,但是将侧重于许多 Java Web
开发人员最关心的问题:为客户机生成数据。</P>
<P>多数 Java 开发人员已经把模型-视图-控制器(MVC)模式应用在他们的 Web 应用程序上。在传统的 Web
应用程序中,视图组件由 JSP 或者其他表示技术(例如 Velocity 模板)构成。这些表示组件动态地生成全新的 HTML
页面,替代用户以前正在查看的页面,从而更新用户界面。但是,在 Java Web 应用程序使用 Ajax UI 的情况下,基于从
<CODE>XMLHttpRequest</CODE> 的响应接收到的数据,JavaScript
客户端代码对于更新用户看到的内容负有最终责任。从服务器的角度来看,视图成为它响应客户机请求而发送的数据表示。</P>
<P>这篇文章侧重于可以用来生成 Java 对象以数据为中心的视图的技术。我将演示可以把 JavaBeans 变成 XML
文档的各种方法,并且讨论每种方法的优劣。您将看到为什么 XML 并不总是最好的途径:对于简单的 Ajax
请求来说,传输纯文本更好。最后,我将介绍 JavaScript 对象标注(JSON)。JSON 允许数据以序列化的 JavaScript
对象图的形式传输,在客户端代码中处理序列化的 JavaScript 对象图极为容易。</P>
<P><A name=N1007B><SPAN class=smalltitle>关于示例</SPAN></A></P>
<P>我将使用一个示例应用程序和几个用例来演示这里讨论的技术特性和技术。图 1
显示的极为简单的数据模型可以表示示例用例。这个模型代表在线商店中的顾客帐户。顾客拥有以前订单的集合,每个订单包含几个商品。</P><BR><BR><A
name=figure1><B>图 1. 简单的对象模型</B></A><BR><IMG height=133
alt=代表顾客帐户的对象模型
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/ajaxobjects.jpg"
width=541> <BR>
<P>虽然 <CODE>XMLHttpRequest</CODE>
对于发送数据使用的格式没有做任何限制,但是对于多数目的来说,只发送传统的表单数据是适合的,所以我的讨论集中在服务器的响应上。响应也可以有基于文本的格式,但是正如它的名字表示的,<CODE>XMLHttpRequest</CODE>
具有内置的处理 XML 响应数据的能力。这使 XML 成为 Ajax 响应的默认选择,所以我们从 XML 格式开始讨论。</P><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/blue_rule.gif"
width="100%"><BR><IMG height=6 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif" width=8
border=0></TD></TR></TBODY></TABLE>
<TABLE class=no-print cellSpacing=0 cellPadding=0 align=right>
<TBODY>
<TR align=right>
<TD><IMG height=4 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width="100%"><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=center><IMG height=16 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/u_bold.gif"
width=16 border=0><BR></TD>
<TD vAlign=top align=right><A class=fbox
href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#main"><B>回页首</B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR>
<P><A name=N1009E><SPAN class=atitle>从 Java 类产生 XML</SPAN></A></P>
<P>把 Ajax 响应作为 XML 来传递有许多原因:每个支持 Ajax 的浏览器都有导航 XML
文档的方法,也有许多服务器端技术可以处理 XML 数据。通过制定一个方案,描述要交换的文档类型,在 Ajax
客户端和服务器端之间很容易定义合约,而且如果服务器端架构采用面向服务的方式,那么使用 XML 也可以允许非 Ajax
客户机使用您提供的数据。</P>
<P>我将考虑从 Java 对象产生 XML 数据的三种方法,并讨论每种方法的优劣。</P><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><IMG height=1 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/blue_rule.gif"
width="100%"><BR><IMG height=6 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif" width=8
border=0></TD></TR></TBODY></TABLE>
<TABLE class=no-print cellSpacing=0 cellPadding=0 align=right>
<TBODY>
<TR align=right>
<TD><IMG height=4 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif"
width="100%"><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=center><IMG height=16 alt=""
src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/u_bold.gif"
width=16 border=0><BR></TD>
<TD vAlign=top align=right><A class=fbox
href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#main"><B>回页首</B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR>
<P><A name=N100AA><SPAN class=atitle>自行进行序列化</SPAN></A></P>
<P>首先,可以从对象图以编程的方式生成 XML。这种方式可以简单到只是在每个 JavaBean 类中实现
<CODE>toXml()</CODE> 方法即可。然后就可以选择合适的 XML API,让每个 bean
提供表示自己状态的元素,并递归地对自己的成员调用对象图。显然,这种方式无法扩展到大量的类,因为每个类都需要专门编写自己的 XML
生成代码。从好的方面来看,这是一个实现起来简单的方式,没有额外的配置支出或者更复杂的构建过程支出,任何 JavaBean
图都可以只用几个调用就变成 XML 文档。</P>
<P>在本系列 <A
href="http://www.ibm.com/developerworks/cn/java/j-ajax1/">前一篇文章</A>
的示例代码中,我把 XML 标记字符串连接在一起,实现了 <CODE>toXml()</CODE>
方法。上次我就提到过,这是个糟糕的方法,因为它把确保标记配对、实体编码等工作的负担放在每个 <CODE>toXml()</CODE>
方法的代码中。在 Java 平台上有几个 XML API 可以替您做这些工作,这样您就可以把精力集中在 XML 的内容上。清单 1 用
JDOM API 实现了在线商店示例中表示订单的类中的 <CODE>toXml()</CODE>(请参阅 <A
href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#figure1">图
1</A>)。</P><BR><BR><A name=code1><B>清单 1. Order 类的 toXml() 的 JDOM
实现</B></A><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -