?? 面向 java 開發(fā)人員的 ajax ajax 的 java 對象序列化.htm
字號:
align=right border=0>
<TBODY>
<TR>
<TD width=10><IMG height=1 alt=""
src="面向 Java 開發(fā)人員的 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 開發(fā)人員的 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 開發(fā),那么您最關心的問題可能就是把數據從服務器傳遞給客戶機。在“面向 Java 開發(fā)人員的 Ajax”系列的第二篇文章中,Philip McCarthy 介紹了 Java 對象序列化的五種方式,并提供了選擇最適合應用程序的數據格式和技術所需要的全部信息。"
name=body><INPUT type=hidden
value="面向 Java 開發(fā)人員的 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="將此頁作為電子郵件發(fā)送" /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>將此頁作為電子郵件發(fā)送</b></a></p></td></tr>');//--></SCRIPT>
<NOSCRIPT>
<TBODY>
<TR vAlign=top>
<TD width=8><IMG height=1 alt=""
src="面向 Java 開發(fā)人員的 Ajax Ajax 的 Java 對象序列化.files/c.gif"
width=8></TD>
<TD width=16><IMG height=16 alt=""
src="面向 Java 開發(fā)人員的 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 開發(fā)人員的 Ajax Ajax 的 Java 對象序列化.files/c.gif"
width=8></TD>
<TD width=16><IMG height=16 alt=""
src="面向 Java 開發(fā)人員的 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 開發(fā)人員的 Ajax Ajax 的 Java 對象序列化.files/c.gif"
width=8></TD>
<TD><IMG height=16 alt=""
src="面向 Java 開發(fā)人員的 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>), 軟件開發(fā)顧問, 獨立顧問<BR></P>
<P>2005 年 10 月 24 日</P>
<BLOCKQUOTE>如果您正在使用異步 JavaScript 和 XML(Ajax)進行 Java? Web
開發(fā),那么您最關心的問題可能就是把數據從服務器傳遞給客戶機。在 <I>面向 Java 開發(fā)人員的 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
頁面向服務器發(fā)送異步請求。
<LI>如何用 Java servlet 處理和響應請求(向客戶機返回 XML 文檔)。
<LI>如何在客戶端用響應文檔更新頁面視圖。 </LI></UL>
<P>這一次,我將繼續(xù)討論 Ajax 開發(fā)的基礎知識,但是將側重于許多 Java Web
開發(fā)人員最關心的問題:為客戶機生成數據。</P>
<P>多數 Java 開發(fā)人員已經把模型-視圖-控制器(MVC)模式應用在他們的 Web 應用程序上。在傳統的 Web
應用程序中,視圖組件由 JSP 或者其他表示技術(例如 Velocity 模板)構成。這些表示組件動態(tài)地生成全新的 HTML
頁面,替代用戶以前正在查看的頁面,從而更新用戶界面。但是,在 Java Web 應用程序使用 Ajax UI 的情況下,基于從
<CODE>XMLHttpRequest</CODE> 的響應接收到的數據,JavaScript
客戶端代碼對于更新用戶看到的內容負有最終責任。從服務器的角度來看,視圖成為它響應客戶機請求而發(fā)送的數據表示。</P>
<P>這篇文章側重于可以用來生成 Java 對象以數據為中心的視圖的技術。我將演示可以把 JavaBeans 變成 XML
文檔的各種方法,并且討論每種方法的優(yōu)劣。您將看到為什么 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 開發(fā)人員的 Ajax Ajax 的 Java 對象序列化.files/ajaxobjects.jpg"
width=541> <BR>
<P>雖然 <CODE>XMLHttpRequest</CODE>
對于發(fā)送數據使用的格式沒有做任何限制,但是對于多數目的來說,只發(fā)送傳統的表單數據是適合的,所以我的討論集中在服務器的響應上。響應也可以有基于文本的格式,但是正如它的名字表示的,<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 開發(fā)人員的 Ajax Ajax 的 Java 對象序列化.files/blue_rule.gif"
width="100%"><BR><IMG height=6 alt=""
src="面向 Java 開發(fā)人員的 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 開發(fā)人員的 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 開發(fā)人員的 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 數據的三種方法,并討論每種方法的優(yōu)劣。</P><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><IMG height=1 alt=""
src="面向 Java 開發(fā)人員的 Ajax Ajax 的 Java 對象序列化.files/blue_rule.gif"
width="100%"><BR><IMG height=6 alt=""
src="面向 Java 開發(fā)人員的 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 開發(fā)人員的 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 開發(fā)人員的 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
提供表示自己狀態(tài)的元素,并遞歸地對自己的成員調用對象圖。顯然,這種方式無法擴展到大量的類,因為每個類都需要專門編寫自己的 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 + -