﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;b&gt;一路北漂来&lt;/b&gt;-随笔分类-Java EE 表现层及容器</title><link>http://www.blogjava.net/rosen/category/2686.html</link><description>下一阶段：敏捷推进、单元测试</description><language>zh-cn</language><lastBuildDate>Wed, 24 Mar 2010 06:19:19 GMT</lastBuildDate><pubDate>Wed, 24 Mar 2010 06:19:19 GMT</pubDate><ttl>60</ttl><item><title>BlazeDS由http切换https注意事项</title><link>http://www.blogjava.net/rosen/archive/2010/03/24/316405.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 24 Mar 2010 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2010/03/24/316405.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/316405.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2010/03/24/316405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/316405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/316405.html</trackback:ping><description><![CDATA[这段时间准备发布产品，预览版已在用户那里部署。昨天接到一电话，说在https环境下，只要点击到和Flex有关的东西就老报错，然后权限消失，得重新登录。<br />
得知这一问题后自己切换到https下观察，果然如此，而且只要是走BalzeDS AMF通道就必然报错且servelt session丢失。直观感觉应该是通道问题，随后开打BlazeDS配置文件，翻到services-config.xml文件时，发现了my-secure-amf通道，那么顺理成章的应该走这个。遂在Flex那里修改了AMFChannel对象的uri属性（要实现通道切换方法很多，这只是一种方式），由于需要统一通道，所以在修改AMFChannel的uri后还是不能解决问题，经过排查这里必须采用SecureAMFChannel对象才行，最后问题解决。那么要支持两种协议，就需要在flex中进行协议判定，通过不同的协议来切换不同的通道了。代码如下：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;处理协议<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;function&nbsp;init(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;surl:String&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ExternalInterface.call(</span><span style="color: #000000;">"</span><span style="color: #000000;">eval</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">window.location.href</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cs:ChannelSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ChannelSet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;c:Channel&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(URLUtil.getProtocol(surl)</span><span style="color: #000000;">==</span><span style="color: #000000;">"</span><span style="color: #000000;">https</span><span style="color: #000000;">"</span><span style="color: #000000;">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SecureAMFChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.uri</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/SSS/messagebroker/amfsecure</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AMFChannel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.uri</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/SSS/messagebroker/amf</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.addChannel(c);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remote.channelSet</span><span style="color: #000000;">=</span><span style="color: #000000;">cs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<span style="color: black; font-family: Arial;"><strong>
<font color="#ff0000" size="2">请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</font>
</strong>
<a href="../../rosen/archive/2009/10/archive/2009/09/archive/2009/07/archive/2009/06/archive/2009/04/archive/2009/03/archive/2009/02/archive/2008/12/archive/2008/rosen">
<font color="#ff0000" face="宋体" size="2">
<strong>http://www.blogjava.net/rosen</strong></font></a></span><br />
<img src ="http://www.blogjava.net/rosen/aggbug/316405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2010-03-24 10:27 <a href="http://www.blogjava.net/rosen/archive/2010/03/24/316405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML DOM、内置对象总结</title><link>http://www.blogjava.net/rosen/archive/2009/09/13/294921.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Sun, 13 Sep 2009 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2009/09/13/294921.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/294921.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2009/09/13/294921.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/294921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/294921.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 12" />
<meta name="Originator" content="Microsoft Word 12" />
<link rel="File-List" href="file:///C:%5CUsers%5Crosen%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" />
<link rel="Edit-Time-Data" href="file:///C:%5CUsers%5Crosen%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_editdata.mso" /><!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="chmetcnv"></o:smarttagtype>
<link rel="themeData" href="file:///C:%5CUsers%5Crosen%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" />
<link rel="colorSchemeMapping" href="file:///C:%5CUsers%5Crosen%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math" />
<m:brkBin m:val="before" />
<m:brkBinSub m:val="&#45;-" />
<m:smallFrac m:val="off" />
<m:dispDef/>
<m:lMargin m:val="0" />
<m:rMargin m:val="0" />
<m:defJc m:val="centerGroup" />
<m:wrapIndent m:val="1440" />
<m:intLim m:val="subSup" />
<m:naryLim m:val="undOvr" />
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267">
<w:LsdException locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal" />
<w:LsdException locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 2" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 3" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 4" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 5" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 6" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 7" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 8" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 9" />
<w:LsdException locked="false" priority="39" name="toc 1" />
<w:LsdException locked="false" priority="39" name="toc 2" />
<w:LsdException locked="false" priority="39" name="toc 3" />
<w:LsdException locked="false" priority="39" name="toc 4" />
<w:LsdException locked="false" priority="39" name="toc 5" />
<w:LsdException locked="false" priority="39" name="toc 6" />
<w:LsdException locked="false" priority="39" name="toc 7" />
<w:LsdException locked="false" priority="39" name="toc 8" />
<w:LsdException locked="false" priority="39" name="toc 9" />
<w:LsdException locked="false" priority="35" qformat="true" name="caption" />
<w:LsdException locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title" />
<w:LsdException locked="false" priority="0" name="Default Paragraph Font" />
<w:LsdException locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle" />
<w:LsdException locked="false" priority="0" name="Hyperlink" />
<w:LsdException locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong" />
<w:LsdException locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis" />
<w:LsdException locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid" />
<w:LsdException locked="false" unhidewhenused="false" name="Placeholder Text" />
<w:LsdException locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1" />
<w:LsdException locked="false" unhidewhenused="false" name="Revision" />
<w:LsdException locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph" />
<w:LsdException locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote" />
<w:LsdException locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6" />
<w:LsdException locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis" />
<w:LsdException locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis" />
<w:LsdException locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference" />
<w:LsdException locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference" />
<w:LsdException locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title" />
<w:LsdException locked="false" priority="37" name="Bibliography" />
<w:LsdException locked="false" priority="39" qformat="true" name="TOC Heading" />
</w:LatentStyles>
</xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!-- /* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 680460288 22 0 262145 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-1610611985 1107304683 0 0 415 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 680460288 22 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman","serif";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
a:link, span.MsoHyperlink
{mso-style-unhide:no;
color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-noshow:yes;
mso-style-priority:99;
color:purple;
mso-themecolor:followedhyperlink;
text-decoration:underline;
text-underline:single;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:10.0pt;
mso-ansi-font-size:10.0pt;
mso-bidi-font-size:10.0pt;
mso-ascii-font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-hansi-font-family:"Times New Roman";
mso-font-kerning:0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:696124811;
mso-list-template-ids:-1281566802;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
</style>
<![endif]-->
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">写作本文的目的是为了能让自己对基础的概念更加熟悉，尽管近期都在关注<span lang="EN-US">Flex</span>领域，不过得承认，<span lang="EN-US">HTML</span>和<span lang="EN-US">JavaScript</span>方面的能力很重要，并不是所有的开发者都认同我的说辞：&#8220;复杂的业务我倾向用<span lang="EN-US">Flex</span>实现。&#8221;——rosen jiang<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; font-family: 宋体;">什么是<span lang="EN-US">DOM</span>？<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">从我参加工作开始嘴上就老是挂着<span lang="EN-US">DOM</span>，起先认为<span lang="EN-US">DOM</span>只是针对<span lang="EN-US">XML</span>领域，后来才知道<span lang="EN-US">HTML</span>也是一种<span lang="EN-US">DOM</span>结构。<span lang="EN-US">W<st1:chmetcnv unitname="C" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">3C</st1:chmetcnv></span>多<span lang="EN-US">DOM</span>的<span lang="EN-US"><a href="http://www.w3.org/DOM"><span lang="EN-US"><span lang="EN-US">解释</span></span></a></span>是：文档对象模型<span lang="EN-US">(DOM)</span>是一种平台、语言无关的接口，允许程序和脚本动态访问和更新其内容、结构和样式。处理后的文档可以再次处理，并且处理的结果可以重新呈现在页面上。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; font-family: 宋体;">什么是文档<span lang="EN-US">(Ducument)</span>？<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">文档就是一段合法的<span lang="EN-US">XML</span>串或一段<span lang="EN-US">HTML</span>，在概念上文档应该有根以便能访问到里面的数据。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM</span></strong><strong><span style="font-size: 12pt; font-family: 宋体;">的级别<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM
Level 1</span><span style="font-size: 12pt; font-family: 宋体;">，<span lang="EN-US">DOM
Level 1</span>第一版又分成<span lang="EN-US"><a href="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html">DOM
Level 1 Core</a></span>和<span lang="EN-US"><a href="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html">DOM
Level 1 HTML</a></span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM Level 1 Core</span><span style="font-size: 12pt; font-family: 宋体;">定义了一组最基本的访问和操作文档的对象和接口，是一种满足所有软件开发者和<span lang="EN-US">web</span>脚本开发者访问和操作<span lang="EN-US">HTML</span>、<span lang="EN-US">XML</span>的功能性规范。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM Level 1 HTML</span><span style="font-size: 12pt; font-family: 宋体;">继承了<span lang="EN-US">DOM Level 1 Core</span>，主要描述<span lang="EN-US">HTML</span>文档方面的对象和方法。一般来说，<span lang="EN-US">DOM Level 1 HTML</span>要能实现维护结构化的文档、元素和属性。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM
Level 2</span><span style="font-size: 12pt; font-family: 宋体;">，<span lang="EN-US">DOM
Level 2</span>又分成<span lang="EN-US"><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html">DOM
Level 2 Core</a></span>、<span lang="EN-US"><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113/views.html">DOM
Level 2 Views</a></span>、<span lang="EN-US"><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html">DOM
Level 2 Events</a></span>、<span lang="EN-US"><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/">DOM Level 2 Style</a></span>、<span lang="EN-US"><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/">DOM
Level 2 Traversal and Range Specification</a></span>、<span lang="EN-US"><a href="http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html">DOM
Level 2 HTML</a></span>。在这里我只关注<span lang="EN-US">Core</span>和<span lang="EN-US">HTML</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>DOM Level 2 Core</span><span style="font-size: 12pt; font-family: 宋体;">和<span lang="EN-US">Level 1</span>的定义一样，并基于<span lang="EN-US">Level 1</span>构建。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM Level 2 HTML</span><span style="font-size: 12pt; font-family: 宋体;">基于<span lang="EN-US">DOM Level 2 Core</span>构建，且不与<span lang="EN-US">DOM Level 1 HTML</span>兼容，<span lang="EN-US">DOM Level 2 HTML</span>也是目前<span lang="EN-US">HTML 4.01</span>和<span lang="EN-US">XHTML 1.0</span>所采用的级别。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DOM
Level 3</span><span style="font-size: 12pt; font-family: 宋体;">，在这里就不多描述了，目前还没有<span lang="EN-US">DOM Level 3 HTML</span>规范，我看<span lang="EN-US">DOM Level 3 Core</span>的描述还是针对<span lang="EN-US">HTML 4.01</span>的，难道是在等传说中的<span lang="EN-US">HTML 5</span>？对于<span lang="EN-US">HTML 5</span>的相互争论是可以的，奉劝各大浏览器厂商不要把头打破了。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: 21pt;"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:201.75pt;
height:180pt'>
<v:imagedata src="file:///C:\Users\rosen\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="我的" />
</v:shape><![endif]--><!--[if !vml]-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.blogjava.net/images/blogjava_net/rosen/20090913.png" alt="" border="0" /><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">HTML
DOM</span><span style="font-size: 12pt; font-family: 宋体;">对象包括所有的标签，例如<span lang="EN-US">&lt;a&gt;</span>就是一个<span lang="EN-US">DOM</span>对象，<span lang="EN-US">HTML</span>中的<span lang="EN-US">&lt;a&gt;</span>标签（元素）实际上是实现了<span lang="EN-US">DOM Level 2 HTML</span>的<span lang="EN-US"><a href="http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-48250443">HTMLAnchorElement</a></span>接口，再比如<span lang="EN-US">&lt;div&gt;</span>标签（分组元素）实现了<span lang="EN-US"><a href="http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-22445964">HTMLDivElement</a></span>接口。既然<span lang="EN-US">DOM Level 2 HTML</span>和<span lang="EN-US">HTML 4.01</span>关系紧密，那么可以存在：<span lang="EN-US">document.createElement(&#8220;div&#8221;)</span>来创建<span lang="EN-US">DIV</span>对象。可参考<span lang="EN-US"><a href="http://www.w3.org/TR/html401/">HTML 4.01<span lang="EN-US"><span lang="EN-US">规范</span></span></a></span>来找寻其支持的元素。对于<span lang="EN-US">span</span>这样的分组元素在<span lang="EN-US">DOM Level 2 HTML</span>中是实现了<span lang="EN-US">HTMLElement</span>接口，与<span lang="EN-US">span</span>一样实现<span lang="EN-US">HTMLElement</span>接口的元素是：<span lang="EN-US"><o:p></o:p></span></span></p>
<ul type="disc">
    <li class="MsoNormal" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">特殊<span lang="EN-US">: SUB,
    SUP, SPAN, BDO<o:p></o:p></span></span></li>
    <li class="MsoNormal" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">字体<span lang="EN-US">: TT, I,
    B, U, S, STRIKE, BIG, SMALL<o:p></o:p></span></span></li>
    <li class="MsoNormal" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">表达<span lang="EN-US">: EM,
    STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ACRONYM, ABBR<o:p></o:p></span></span></li>
    <li class="MsoNormal" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;">列表<span lang="EN-US">: DD, DT<o:p></o:p></span></span></li>
    <li class="MsoNormal" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">NOFRAMES,
    NOSCRIPT<o:p></o:p></span></li>
    <li class="MsoNormal" style="text-align: left;"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">ADDRESS,
    CENTER<o:p></o:p></span></li>
</ul>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">这里面最特殊的<span lang="EN-US">DOM</span>对象是<span lang="EN-US">document</span>，它实现了<span lang="EN-US"><a href="http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-26809268">HTMLDocument</a></span>接口且没有对应的<span lang="EN-US">HTML</span>标签，<span lang="EN-US">HTMLDocument</span>是整个<span lang="EN-US">HTML</span>层次的根并能处理<span lang="EN-US">HTML</span>的所有内容。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">除了内置与<span lang="EN-US">HTML</span>对应的对象外，<span lang="EN-US">HTML DOM</span>（浏览器）中还内置了<span lang="EN-US">JavaScript</span>对象，他们是：</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Window</span><span style="font-size: 12pt; font-family: 宋体;">、<span lang="EN-US">Navigator</span>、<span lang="EN-US">Screen</span>、<span lang="EN-US">History</span>、<span lang="EN-US">Location</span>，可阅读<span lang="EN-US"><a href="http://www.w3school.com.cn/htmldom/htmldom_reference.asp">HTML DOM <span lang="EN-US"><span lang="EN-US">参考手册</span></span></a></span>，里面解释得很清楚。需要说明的是：<span lang="EN-US">Window </span>对象表示一个浏览器窗口或一个框架。在客户端<span lang="EN-US"> JavaScript </span>中，<span lang="EN-US">Window </span>对象是全局对象，所有的表达式都在当前的环境中计算。也就是说，要引用当前窗口根本不需要特殊的语法，可以把那个窗口的属性作为全局变量来使用。例如，可以只写<span lang="EN-US"> document</span>，而不必写<span lang="EN-US"> window.document</span>，还有用得最多的<span lang="EN-US">alert()</span>方法，也不用写<span lang="EN-US">Window.alert()</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">总结完毕。</span></p>
<p class="MsoNormal"><br />
</p>
<p class="MsoNormal"><span style="color: black; font-family: Arial;" lang="EN-US"><strong>
<font color="#ff0000" size="2">请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</font>
</strong>
<a href="../archive/2009/07/archive/2009/06/archive/2009/04/archive/2009/03/archive/2009/02/archive/2008/12/archive/2008/rosen">
<font color="#ff0000" size="2" face="宋体">
<strong>http://www.blogjava.net/rosen</strong></font></a></span><br />
<span style="font-size: 12pt; font-family: 宋体;"><span lang="EN-US"><o:p></o:p></span></span></p>
<img src ="http://www.blogjava.net/rosen/aggbug/294921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2009-09-13 11:02 <a href="http://www.blogjava.net/rosen/archive/2009/09/13/294921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Flex对象透明映射最佳实践</title><link>http://www.blogjava.net/rosen/archive/2009/07/10/286305.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 10 Jul 2009 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2009/07/10/286305.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/286305.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2009/07/10/286305.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/286305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/286305.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在我之前的两篇文章Flex3性能提示、Ajax轮询以及Comet模式—写在Servlet3.0发布之前中。我反复提到AdobeBlazeDS这个开源产品，假设某天，你在看了Flex3性能提示之后放弃了Flex+Servlet+XML方案，那么如何进行下一步？本文试图用简单的表述来实践一回Java到Flex之间的对象透明传递，所谓透明本人理解为不需要人工的（反）序列化。在阅读本文...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2009/07/10/286305.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/286305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2009-07-10 18:44 <a href="http://www.blogjava.net/rosen/archive/2009/07/10/286305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex如何迎接HTML5的挑战</title><link>http://www.blogjava.net/rosen/archive/2009/06/25/284071.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Thu, 25 Jun 2009 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2009/06/25/284071.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/284071.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2009/06/25/284071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/284071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/284071.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近业界对																						HTML5																				展开了大量的讨论。以																						GoogleWave																				为代表的产品，已经实现了																						HTML5			...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2009/06/25/284071.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/284071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2009-06-25 10:20 <a href="http://www.blogjava.net/rosen/archive/2009/06/25/284071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>恶战怪异文件名下载</title><link>http://www.blogjava.net/rosen/archive/2009/03/25/261886.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 25 Mar 2009 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2009/03/25/261886.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/261886.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2009/03/25/261886.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/261886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/261886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 恶战怪异文件名下载&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2009/03/25/261886.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/261886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2009-03-25 16:16 <a href="http://www.blogjava.net/rosen/archive/2009/03/25/261886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex3 性能提示</title><link>http://www.blogjava.net/rosen/archive/2008/12/23/247983.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Tue, 23 Dec 2008 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2008/12/23/247983.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/247983.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2008/12/23/247983.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/247983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/247983.html</trackback:ping><description><![CDATA[
		<style type="text/css">
				<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
		A:link { so-language: zxx }
	-->
		</style>
		<p style="margin-bottom: 0cm;">最近一直在使用 <font face="Times New Roman, serif">Flex3
</font>对原有项目进行重构和 <font face="Times New Roman, serif">bug
</font>修改。遇到不少性能问题，分析发现由于 <font face="Times New Roman, serif">Flex
</font>在和 <font face="Times New Roman, serif">Servlet </font>交互时使用了大量的
<font face="Times New Roman, serif">XML </font>作为传输格式，导致某些功能在处理
<font face="Times New Roman, serif">XML </font>时非常的慢，甚至还
<font face="Times New Roman, serif">Error #1502: A script has
executed for longer than 15 seconds</font>。让人痛不欲生！</p>
		<p style="margin-bottom: 0cm;">和 <font face="Times New Roman, serif">RIA
Meeting </font>组织者 <font face="Times New Roman, serif">lwz7512
</font>交流后，他建议使用 <font face="Times New Roman, serif">BlazeDS
</font>来代替 <font face="Times New Roman, serif">XML </font>操作。随着对
<font face="Times New Roman, serif">BlazeDS </font>的渐渐了解，的确能解决不少性能问题。<font face="Times New Roman, serif">Adobe
</font>的 <font face="Times New Roman, serif">Flex </font>技术传道士
<font face="Times New Roman, serif">James Ward </font>在 <font face="Times New Roman, serif"><a href="http://www.jamesward.com/blog/2007/12/12/blazebench-why-you-want-amf-and-blazeds/">BlazeBench:
Why you want AMF and BlazeDS</a></font>一文中详细比较了利用
<font face="Times New Roman, serif">BlazeDS </font>所带来的性能提升，下图是
<font face="Times New Roman, serif">James Ward </font>写的性能测试工具。</p>
		<p style="margin-bottom: 0cm;">
				<img src="http://www.jamesward.org/wordpress/wp-content/uploads/2007/12/blazebench.jpg" />
		</p>
		<p style="margin-bottom: 0cm;">
		</p>
		<style type="text/css">
				<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
		A:link { so-language: zxx }
	-->
		</style>
		<p style="margin-bottom: 0cm;">通过上面的测试数据发现，正如
<font face="Times New Roman, serif">BlazeDS </font>官方网站所提到的：在使用
<font face="Times New Roman, serif">AMF3 </font>作为传输协议后，<font face="Times New Roman, serif">Flex
</font>和后台交互的性能大约提高了<font face="Times New Roman, serif">10</font>倍。面对这一结果，想必大家很兴奋，看来是时候用
<font face="Times New Roman, serif">BlazeDS </font>来替换 <font face="Times New Roman, serif">XML
</font>了。不过问题并不是这么容易就解决了，由于
<font face="Times New Roman, serif">BlazeDS </font>在
<font face="Times New Roman, serif">2007</font>年<font face="Times New Roman, serif">12</font>月<font face="Times New Roman, serif">12</font>日才正式开源发布，而在这之前项目都是以
<font face="Times New Roman, serif">XML </font>作为传输格式（当然也没用<font face="Times New Roman, serif">GraniteDS</font>），并且
<font face="Times New Roman, serif">Flex </font>代码中处处可见对
<font face="Times New Roman, serif">XML </font>的操作，要对这样的代码进行重构<font face="Times New Roman, serif">......</font>难。</p>
		<p style="margin-bottom: 0cm;">要解决 <font face="Times New Roman, serif">XML
</font>处理的性能问题。就应该好好的利用 <font face="Times New Roman, serif">E4X</font>，尽量避免在解析
<font face="Times New Roman, serif">XML
</font>的过程中使用循环。这里介绍几篇文章让大家了解下<a href="http://www.ibm.com/developerworks/cn/xml/x-javascript4x/index.html">《</a><font face="Times New Roman, serif"><a href="http://www.ibm.com/developerworks/cn/xml/x-javascript4x/index.html"><span style="font-weight: normal;">E4X</span></a></font><a href="http://www.ibm.com/developerworks/cn/xml/x-javascript4x/index.html"><span style="font-weight: normal;">：出色的
</span><font face="Times New Roman, serif"><span style="font-weight: normal;">JavaScript</span></font></a><a href="http://www.ibm.com/developerworks/cn/xml/x-javascript4x/index.html">》</a><span lang="zh-CN">、</span><a href="http://www.w3school.com.cn/e4x/index.asp">《<font face="Times New Roman, serif">E4X
</font></a><a href="http://www.w3school.com.cn/e4x/index.asp">教程》</a><span lang="zh-CN">、</span><a href="http://blog.eshangrao.com/2006/01/04/164/">《<font face="Times New Roman, serif">AS3</font></a><a href="http://blog.eshangrao.com/2006/01/04/164/">中新的<font face="Times New Roman, serif">XML</font></a><a href="http://blog.eshangrao.com/2006/01/04/164/">处理方法
– <font face="Times New Roman, serif">E4X</font></a><a href="http://blog.eshangrao.com/2006/01/04/164/">》</a><span lang="zh-CN">。</span><font face="Times New Roman, serif">E4X</font><span lang="zh-CN">给我最大的便利就是</span><font face="Times New Roman, serif">..</font><span lang="zh-CN">运算符。思考下面的</span><font face="Times New Roman, serif">XML</font><span lang="zh-CN">：</span></p>
		<p style="margin-bottom: 0cm;">
				<span lang="zh-CN">
				</span>
				<span lang="zh-CN">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<span style="color: rgb(0, 0, 0);">var myXML:XML =<br />                </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">groups </span>
								<span style="color: rgb(255, 0, 0);">name</span>
								<span style="color: rgb(0, 0, 255);">="大组"</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">group </span>
								<span style="color: rgb(255, 0, 0);">name</span>
								<span style="color: rgb(0, 0, 255);">="小牛组"</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                        </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">person </span>
								<span style="color: rgb(255, 0, 0);">fullname</span>
								<span style="color: rgb(0, 0, 255);">="rosenjiang"</span>
								<span style="color: rgb(0, 0, 255);">/&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                        </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">person </span>
								<span style="color: rgb(255, 0, 0);">fullname</span>
								<span style="color: rgb(0, 0, 255);">="abc"</span>
								<span style="color: rgb(0, 0, 255);">/&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;/</span>
								<span style="color: rgb(128, 0, 0);">group</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">group </span>
								<span style="color: rgb(255, 0, 0);">name</span>
								<span style="color: rgb(0, 0, 255);">="柴鸡组"</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                        </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">person </span>
								<span style="color: rgb(255, 0, 0);">fullname</span>
								<span style="color: rgb(0, 0, 255);">="rosenjiang"</span>
								<span style="color: rgb(0, 0, 255);">/&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;/</span>
								<span style="color: rgb(128, 0, 0);">group</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">group </span>
								<span style="color: rgb(255, 0, 0);">name</span>
								<span style="color: rgb(0, 0, 255);">="柴鸭组"</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                        </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">person </span>
								<span style="color: rgb(255, 0, 0);">fullname</span>
								<span style="color: rgb(0, 0, 255);">="rosenjiang"</span>
								<span style="color: rgb(0, 0, 255);">/&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                        </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">person </span>
								<span style="color: rgb(255, 0, 0);">fullname</span>
								<span style="color: rgb(0, 0, 255);">="rosen jiang"</span>
								<span style="color: rgb(0, 0, 255);">/&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;/</span>
								<span style="color: rgb(128, 0, 0);">group</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">group </span>
								<span style="color: rgb(255, 0, 0);">name</span>
								<span style="color: rgb(0, 0, 255);">="独立大队"</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                        </span>
								<span style="color: rgb(0, 0, 255);">&lt;</span>
								<span style="color: rgb(128, 0, 0);">person </span>
								<span style="color: rgb(255, 0, 0);">fullname</span>
								<span style="color: rgb(0, 0, 255);">="rosenjiang"</span>
								<span style="color: rgb(0, 0, 255);">/&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                    </span>
								<span style="color: rgb(0, 0, 255);">&lt;/</span>
								<span style="color: rgb(128, 0, 0);">group</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                   </span>
								<span style="color: rgb(0, 0, 255);">&lt;/</span>
								<span style="color: rgb(128, 0, 0);">groups</span>
								<span style="color: rgb(0, 0, 255);">&gt;</span>
								<span style="color: rgb(0, 0, 0);">;</span>
						</div>
				</span>
		</p>
		<p style="margin-bottom: 0cm;">
		</p>
		<style type="text/css">
				<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
	-->
		</style>
		<p style="margin-bottom: 0cm;" lang="zh-CN">要得到所有属性<font face="Times New Roman, serif">fullname</font>是”<font face="Times New Roman, serif">rosenjiang”</font>的<font face="Times New Roman, serif">person</font>节点的个数怎么做？在没详细了解
<font face="Times New Roman, serif">E4X </font>之前，我会用
<font face="Times New Roman, serif">myXML.group </font>操作得到
<font face="Times New Roman, serif">group </font>的 <font face="Times New Roman, serif">XMLList
</font>集合，然后再用循环去找寻每个 <font face="Times New Roman, serif">group
</font>中 <font face="Times New Roman, serif">person </font>节点属性
<font face="Times New Roman, serif">fullname </font>为”<font face="Times New Roman, serif">rosenjiang”</font>的数据：</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 0);">               function on_click():</span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);">{<br />                   var list:XMLList </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> myXML.group;<br />                   var count:</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">;<br />                   </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);">(var i:</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">; i</span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);">list.length(); i</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">){<br />                       var persons:XMLList </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> list[i].person;<br />                       </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);">(persons.length() </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
				<span style="color: rgb(0, 0, 0);"> persons.@fullname </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">rosenjiang</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">){<br />                           count </span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">;<br />                       }</span>
				<span style="color: rgb(0, 0, 255);">else</span>
				<span style="color: rgb(0, 0, 0);">{<br />                           </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);">(var j:</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">; j</span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);">persons.length(); j</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">){<br />                               </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);">(persons[j].@fullname </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">rosenjiang</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">){<br />                                   count </span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">;<br />                               }<br />                           }<br />                       }<br />                   }<br />                   Alert.show(count</span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">个</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">);<br />               }</span>
		</div>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<style type="text/css">
				<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
	-->
		</style>
		<p style="margin-bottom: 0cm;" lang="zh-CN">上面的写法的确很傻，下面是改进之后的代码，关键部分只有一行：</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 0);">               function on_click():</span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);">{<br />                   var list:XMLList </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> myXML..person.(@fullname </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">rosenjiang</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">);<br />                   Alert.show(list.length()</span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">个</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">);<br />               }</span>
		</div>
		<p style="margin-bottom: 0cm;" lang="zh-CN">通过合理使用 <font face="Times New Roman, serif">E4X
</font>语法，顺利的避免了循环带来的性能问题。过了几天，来个新的需求，需要统计出在这个
<font face="Times New Roman, serif">XML </font>中有几个不同姓名的
<font face="Times New Roman, serif">person</font>。思考片刻，我可不可以用眼睛数出来啊？这里有
<font face="Times New Roman, serif">3 </font>个<font face="Times New Roman, serif">......
   </font>好吧，看来又是循环问题，第一个想到的是用两个嵌套
<font face="Times New Roman, serif">for </font>循环来进行排除处理，这是最直观的想法<font face="Times New Roman, serif">......</font></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<style type="text/css">
				<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
	-->
		</style>
		<p style="margin-bottom: 0cm;" lang="zh-CN">下面我介绍下如何用
<font face="Times New Roman, serif">ArrayCollection </font>并只使用一个循环来计算个数。由于
<font face="Times New Roman, serif">Flex </font>里面不支持 <font face="Times New Roman, serif">Map
</font>类型，而我 <font face="Times New Roman, serif">Google
</font>了一圈，且 <font face="Times New Roman, serif">RIACN
</font>论坛上网友的 <font face="Times New Roman, serif">Map
</font>实现性能都不行，遂打算用 <font face="Times New Roman, serif">ArrayCollection
</font>模拟 <font face="Times New Roman, serif">Map </font>进行操作：</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 0);">               </span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> mx.collections.</span>
				<span style="color: rgb(0, 0, 0);">*</span>
				<span style="color: rgb(0, 0, 0);">;<br />               function on_click():</span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);">{<br />                   var list:XMLList </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> myXML..person;<br />                   var ac:ArrayCollection </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> ArrayCollection();<br />                </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> each (var item:XML in list){<br />                    var fullname:String </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> item.@fullname;<br />                    </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);">(ac.getItemIndex(fullname) </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">){<br />                        ac.addItem(fullname);<br />                    }<br />                }<br />                   Alert.show(ac.length</span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">个</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">);<br />               }</span>
		</div>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<style type="text/css">
				<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
	-->
		</style>
		<p style="margin-bottom: 0cm;" lang="zh-CN">上面代码没什么过多解释，思路是取出一个
<font face="Times New Roman, serif">fullname </font>放进
<font face="Times New Roman, serif">ArrayCollection</font>，然后判定下一个
<font face="Times New Roman, serif">fullname </font>是否存在于
<font face="Times New Roman, serif">ArrayCollection
</font>中，如果存在就跳过，不存在就放进去再取下一个。另外我发现，使用
<font face="Times New Roman, serif">for each </font>比单纯的使用
<font face="Times New Roman, serif">for </font>性能要高一点点。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">做了以上的努力后，性能还是低下！怎么办？看来没什么办法了，和你的
<font face="Times New Roman, serif">boss
</font>谈谈吧，考虑下进行大刀阔斧重构的可能性。或者能否在超时后给用户一个提示，让他操作的数据量少点，需要做的是捕获超时异常，既
<font face="Times New Roman, serif">ScriptTimeoutError</font>，请参阅<a target="_blank" href="http://www.cs.vu.nl/%7Eeliens/pim/assets/flex3/langref/flash/errors/ScriptTimeoutError.html"><font face="Times New Roman, serif">http://www.cs.vu.nl/~eliens/pim/assets/flex3/langref/flash/errors/ScriptTimeoutError.html</font></a>，进行
<font face="Times New Roman, serif">try catch </font>。 <font face="Times New Roman, serif">Good
luck</font>！</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<br />
		</p>
		<span style="color: black; font-family: Arial;" lang="EN-US">
				<strong>
						<font color="#ff0000" size="2">请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</font>
				</strong>
				<a href="../archive/2008/rosen">
						<font color="#ff0000" size="2" face="宋体">
								<strong>http://www.blogjava.net/rosen</strong>
						</font>
				</a>
		</span>
		<p>
		</p>
<img src ="http://www.blogjava.net/rosen/aggbug/247983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2008-12-23 23:27 <a href="http://www.blogjava.net/rosen/archive/2008/12/23/247983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用 JSON-RPC-Java 构建下一代 Web 应用程序（翻译）</title><link>http://www.blogjava.net/rosen/archive/2007/05/07/115695.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Mon, 07 May 2007 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2007/05/07/115695.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/115695.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2007/05/07/115695.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/115695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/115695.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 利用 JSON-RPC-Java 构建下一代 Web 应用程序&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2007/05/07/115695.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/115695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2007-05-07 14:23 <a href="http://www.blogjava.net/rosen/archive/2007/05/07/115695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>切断 OpenLaszlo 与 XML 数据间的耦合（翻译）</title><link>http://www.blogjava.net/rosen/archive/2007/04/07/109145.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Sat, 07 Apr 2007 12:54:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2007/04/07/109145.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/109145.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2007/04/07/109145.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/109145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/109145.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在下次的与db4o 结合时，再也不需要 XStream 了:)，现在我们一起享受没有 xml 的 OpenLaszlo 吧！<br>原文地址：http://www.theserverside.com/tt/articles/article.tss?l=LaszloWithoutXML&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2007/04/07/109145.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/109145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2007-04-07 20:54 <a href="http://www.blogjava.net/rosen/archive/2007/04/07/109145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迎接 RIA 时代的来临(下) </title><link>http://www.blogjava.net/rosen/archive/2005/08/12/9904.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 12 Aug 2005 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/08/12/9904.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/9904.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/08/12/9904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/9904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/9904.html</trackback:ping><description><![CDATA[<P><STRONG><FONT size=4>RIA方案—基于Flash的Flex</FONT></STRONG><BR><STRONG></STRONG></P>
<P><FONT size=3><STRONG>Flex简介<BR></STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macromedia公司被公认为新兴的RIA市场的领导者。今天98%的浏览器上都使用Macromedia Flash客户端软件，因此几乎每个人都可以使用基于Flash的RIA。Macromedia Flex是Macromedia的新服务器产品，它使企业应用程序开发人员能够全面访问RIA的功能。Flex具有基于标准的架构，与当前企业开发人员的工具、方法和设计模式互补。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;Flex应用程序与传统的HTML应用程序的主要区别在于Flex应用程序处理最适合在客户端运行，如字段校验、数据格式、分类、过滤、工具提示、合成视频、行为及效果等。Flex 可使开发人员更好地交付应用程序，这种应用程序使用户可以迅速反应、在不同状态与显示间流畅过渡，并提供毫无中断的连续的工作流。</FONT></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG alt="" src="http://blog.csdn.net/images/blog_csdn_net/rosen/68948/r_Flex%20应用程序框架.jpg"></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT size=2>&nbsp;<STRONG>Flex 应用程序框架</STRONG></FONT></P>
<P><FONT size=3>&nbsp; 如上图所示，Flex应用程序框架由MXML、ActionScript 2.0及Flex类库构成。开发人员利用 MXML及ActionScript 2.0编写Flex应用程序。利用MXML定义应用程序用户界面元素，利用ActionScript 2.0定义客户逻辑与程序控制。Flex类库中包括Flex组件、管理器及行为等。利用基于Flex 组件的开发模型，开发人员可在程序中加入预建的组件、创建新组件或是将预建的组件加入复合组件中。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里重点介绍一下MXML。与HTML一样，都是标记语言，它描述了反映内容与功能的用户界面。与HTML不同的是，MXML 可对表示层逻辑与用户界面和服务器端数据绑定提供声明抽象。MXML可将表示与业务逻辑的问题彻底分开，以实现最大程度地提高开发人员的生产率及应用程序的重复使用率。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>Flex的不足</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;目前Macromedia最新推出了Flex 1.0 Updater，但它代号为“Brady”的IDE还没有正式推出，目前还在进行Beta 3测试。抛开IDE不说，笔者认为Flex目前还很不成熟，还不利于在实际项目中使用。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;例如，Flex自带的ZipCodeValidator，里面只提供了美国和加拿大的邮编规则，没有其他选择，也无法个性化它。看来只有自己来定义Validator了，但这样一来，和在JS中写正则表达式有什么区别（代码量和JS差不多）？用户需要的是国际化的ZipCodeValidator，这样才能提高工作效率。</FONT></P>
<P><FONT size=3><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;<FONT face=宋体>一句话概括</FONT></STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在的Flex才是1.0版本，很多地方都不完善，只好自定义才能完成特定的要求。期待着Brady以及Flex后续版本的推出！<BR></FONT></P>
<P><FONT size=4><STRONG><BR>RIA方案—基于JS的Bindows</STRONG></FONT></P>
<P><FONT size=3><STRONG>Bindows简介</STRONG><BR>&nbsp;&nbsp;&nbsp; “Bindows把JavaScript发挥到了第九层！”——网友这样评价Bindows。</FONT></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG alt="" src="http://www.bindows.net/images/screenshots.png"></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<FONT size=2><STRONG>运行中的<SPAN lang=EN>Bindows</SPAN></STRONG></FONT></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;</FONT><FONT size=3>的确如此，Erik等编写这个框架已经将JavaScript的OOP和基于IE6的DHTML发挥到极点！Bindows 0.93发布的时候已经将IE内置的功能开发得淋漓尽致了，包括Filter、XMLHTTP、Web Service、VML。JavaScript用于客户端界面的显示和处理，XMLHTTP用于客户端与服务器的信息传输。JavaScript在客户端的表现力不容置疑，看看</FONT><A href="http://www.bindows.net/"><FONT color=#000080 size=3>www.bindows.net</FONT></A><FONT size=3>所表示出来的能力，利用JavaScript几乎可以实现Windows应用程序所能干的大部分事情，XMLHTTP一直以来常被用于实现“无刷新”的Web页面，它和JavaScript配合，可以完成数据从服务器和客户端的传输。<BR>&nbsp;&nbsp;&nbsp; <BR><STRONG>&nbsp;&nbsp;&nbsp; Bindows的不足</STRONG><BR>&nbsp;&nbsp;&nbsp; Erik喜欢那种一次全部载入的方式来实现脚本库，使用过Bindows会发现，在窗口的加载期，需要一个漫长的等待过程，甚至浏览器的进程会产生无响应的情况。按照V0.93，脚本文件的大小是600多K，在一个普通的Web应用中，我们更多时候不会用到Bindows的全部功能，这点Bindows根本没有遵循“用多少去多少”的准则。另外，过多的JS会使CPU占用率陡然增加，产生潜在问题。</FONT></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3>&nbsp;&nbsp;&nbsp; 内部大量利用了IE6的技术，没有考虑到非微软平台的浏览器，限制了Bindows的流行。在图表方面，大量采用了VML技术，在IE5，IE5.5这两个版本，VML引擎不是那么的成熟，很多地方的显示不够流畅，会受到带宽和硬件的限制，过分绚丽的图形最终会给用户带来崩溃。“图形方面我是采用VML的，当初太偏执，如果使用SVG来实现可能好许多的，也就是那段日子，我花了非常多的时间去折腾web方面开发。”——有网友这样说。</FONT></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3><STRONG>&nbsp;&nbsp;一句话概括</STRONG><BR>&nbsp;&nbsp;&nbsp; 在技术的角度上，从Bindows是可以学到不少东西的，但好像它的学术价值大于它的商业价值。</FONT></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><STRONG><FONT size=4><BR>后 记</FONT></STRONG></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3><FONT size=3>&nbsp;&nbsp;&nbsp; 兴奋归兴奋，冷静下来仔细想想，运用RIA改造现有B/S模式还为时尚早。制约我们的首先是网络环境和硬件环境的不完善性，我想没有哪个用户愿意花大量的时间来等待想要看见的“花哨”页面，更不愿意等来的东西使自己的机器不堪重负，而换来的只是一些良好体验吧？市场决定一切，而不是任何的新技术！其次，目前RIA的解决方案也不成熟，笔者看好Flex，可惜还需要长时间的等待才有结果。当然，还有很多RIA的方案，感觉MS的Smart Client + Web Service来头不小。</FONT></FONT></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3><FONT size=3>&nbsp;&nbsp;&nbsp; 本文叫“迎接RIA时代的来临”，笔者充满了对RIA的美好憧憬，期待着有一天能够在RIA的环境中进行虚拟现实的交互式体验！</FONT></FONT></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3></FONT></SPAN></SPAN>&nbsp;</P>
<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3><FONT size=3><STRONG>鸣 谢：<A href="http://www.riacn.com/"><FONT color=#1169ee>RIA中国</FONT></A></STRONG> 没有他们，我想今天也不会对RIA有如此的认识！！！<BR><BR></FONT></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: BookmanOldStyle; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><SPAN lang=EN><FONT size=3><FONT size=3><FONT size=2><STRONG><BR>参考文献:<BR></STRONG></FONT><BR><A href="http://www.macromedia.com/go/flex_tech_wp_cn"><FONT color=#1169ee size=2>Flex 白皮书</FONT></A><BR><A href="http://download.macromedia.com/pub/solutions/downloads/business/idc_impact_of_rias_cn.pdf"><FONT color=#1169ee size=2>IDC--RIA白皮书</FONT></A><BR><A href="http://www.csdn.net/Develop/Read_Article.asp?Id=27574"><FONT color=#1169ee size=2>回归C/S?解释Bindows</FONT></A><BR><A href="http://www.csdn.net/Develop/Read_Article.asp?Id=26248"><FONT color=#1169ee size=2>迎接Client/Server模式的回归</FONT></A><BR><A href="http://www.csdn.net/Develop/Read_Article.asp?Id=26374"><FONT color=#1169ee size=2>Flex: RIA 的先驱，无坚不摧的银弹？</FONT></A><BR><A href="http://blog.joycode.com/kaneboy/posts/18142.aspx"><FONT color=#1169ee size=2>Return of Rich Client</FONT></A><BR><BR><BR><STRONG><FONT color=#ff0000 size=2>请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</FONT></STRONG><A href="http://www.blogjava.net/rosen"><FONT color=#ff0000 size=2><STRONG>http://www.blogjava.net/rosen</STRONG></FONT></A></FONT></FONT></SPAN></SPAN></P><img src ="http://www.blogjava.net/rosen/aggbug/9904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-08-12 11:12 <a href="http://www.blogjava.net/rosen/archive/2005/08/12/9904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迎接 RIA 时代的来临(上) </title><link>http://www.blogjava.net/rosen/archive/2005/08/12/9903.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 12 Aug 2005 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/08/12/9903.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/9903.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/08/12/9903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/9903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/9903.html</trackback:ping><description><![CDATA[<P><FONT size=4><STRONG>前 言</STRONG></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;看了几篇关于“回归C/S”的文章，作为一名多年开发B/S的程序员，不免热血沸腾，深受鼓舞！曾经，我是B/S结构的忠实拥护者，同时也为了所谓的“零部署”陷入过技术泥潭。正当为B/S烦愁的时候，RIA走进了我的视线… …</FONT></P>
<P><FONT size=4><STRONG>什么是RIA</STRONG></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;Internet已经日益成为应用程序开发的默认平台。用户对应用程序复杂性要求日增，但现在的Web应用程序对完成复杂应用方面却始终跟不上步伐。用户与今天中等复杂程度的Web应用程序交互时，其体验并不能令人满意。Web模型是基于页面的模型，缺少客户端智能机制。而且，它几乎无法完成复杂的用户交互（如传统的C/S应用程序和桌面应用程序中的用户交互）。这样的技术使得Web应用程序难以使用，支持成本高，并且在很多方面无法发挥效应。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;为了提高用户体验，出现了一种新类型的Internet应用程序。那就是Rich Internet Applications（RIA）。这些应用程序结合了桌面应用程序的反应快、交互性强的优点与Web应用程序的传播范围广及容易传播的特性。RIA简化并改进了Web应用程序的用户交互。这样，用户开发的应用程序可以提供更丰富、更具有交互性和响应性的用户体验。</FONT></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG alt="" hspace=0 src="http://blog.csdn.net/Develop/ArticleImages/28/28658/CSDN_Dev_Image_2004-6-51716080.JPG" align=baseline border=0></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT size=2>&nbsp;&nbsp;&nbsp;<STRONG>基于主机模式→C/S模式→B/S模式→RIA模式</STRONG></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;我们的行业经历了几次系统架构方面的重要转变，在此过程中，客户端的表现功能有起有落。上图介绍了每个阶段的计算功能所带来的应用程序体验方面的变化，这一过程从大型机开始，到RIA的出现为止。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;随着各企业组织认识到RIA模型可产生显著的商业利润、提高生产率及降低成本的优势后，这种模型的发展势头越来越猛烈。这些应用程序结合了桌面应用程序的反应快、交互性强的优点与Web应用程序的传播范围广及容易传播的特性。系统架构发展的下一步是RIA，它最大程度地提高了广泛性和丰富性。</FONT></P>
<P><FONT size=4><STRONG>论传统B/S之不足</STRONG></FONT></P>
<P><FONT size=1></FONT><BR>&nbsp;<FONT size=3>&nbsp;&nbsp;&nbsp;<STRONG>过程复杂性</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;过程复杂性是由于需要表达一个多步骤或多选项任务或互动作用所引起的。在HTML里，一个多步骤的任务可以在单页内表达出来。但是由于HTML的互动性有限，便可能产生一份很长的页面，使用户感到混乱、笨拙而难以使用。为了避免这种难以忍受的用户体验，便需将任务在表面上看来“自然”的部分处区分成多个步骤，甚至需多个网页共同完成。这种以网页为主的用户界面通常需要反复翻转网页，以解决在顺序步骤中有牵连性的改变。其结果是缓慢、不自然、混乱而且令人感到懊恼的用户体验。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>配置复杂性</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;许多Web应用程序允许用户配置自己所要的定制产品——可以是皮包或是计算机，甚至是汽车等产品。但是配置产品是一项很困难的过程，因为在向用户展示所有有效的产品选项组合时，应用程序必须能够表达出有关的复杂性，尤其是当用户可以从数十、数百或数千选项中定制出一个产品时。表达这些复杂性包括指出所需条件、有效和无效组合、一些导致问题的元素以及它们的适当解决方法；为每一项个人选择提供费用信息以及费用总计（一旦有所更改）；还有最重要的是容许用户观看最后结果。这些是传统Web应用程序相当难以表现的。</FONT></P>
<P><FONT size=3>&nbsp;<STRONG>规模复杂性</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;今天，网站内的搜索工具大多是文本性质，间中夹着一些锦上添花的图像。当用户输入他或她的数码照相机准则，有可能是价格、以像素等，网站便接着回复数页符合准则的产品，而大部分都是说明文本。反之，另一种方法则是使用视觉化来简化搜索空间（也就是提供立即和动态的视觉反馈）。在一个视觉化选择照相机的网站，其搜索过程可能如下：网站从一个包含所有照相机种类图像的单屏幕开始。当用户通过复选框、游标或数据输入域来选择筛选准则时，所有不符合准则的照相机图像将被删除，只余下符合准则的照相机可在屏幕上看到。因此，在把选择聚焦至符合准则的数部照相机的过程中，用户可经历一个截然不同，而且和现实生活中的购物经验更相似的体验。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;<STRONG>反馈复杂性</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp; 高度互动性的应用程序如游戏，能使反馈变得复杂，也即是指用户行动和快速移动或情节不断改变的屏幕元素之间的反馈环路。传统的HTML页面一向来都可以说是无法表达这类复杂性。它所需要的是拥有高度互动性和局部智能型的客户端应用程序，以便可以在无需刷新全页或干扰与服务器之间的通信的情况下，响应用户的输入和改变它们的状态或界面。放弃如今依赖服务器的客户机将使用户体验更吸引，同时也解决了反馈复杂性的问题。Web应用程序必须拥有表达复杂性的能力，以容许用户视看复杂的数据、配置多选项的产品、搜索大型数据集以及容许用户与数据之间的互动交换。<BR></FONT></P>
<P><FONT size=3><STRONG><FONT size=4><BR>真正的RIA<BR></FONT></STRONG></FONT><FONT size=3><BR>&nbsp;&nbsp;&nbsp; 为了解决如今的问题，理想中的Web应用程序应该能够：<BR>1、&nbsp;利用无处不在的客户机<BR>2、&nbsp;在多种硬件平台上毫无更改的操作互联网<BR>3、&nbsp;无论低或高带宽的连接都可毫无妨碍的执行<BR>4、&nbsp;将处理能力复原给客户（而不仅是提供能力而已）<BR>5、&nbsp;提供吸引人的高度互动的用户界面<BR>6、&nbsp;表达过程、数据配置、规模和反馈复杂性<BR>7、&nbsp;无缝的利用声音、视像、图像和文本<BR>8、&nbsp;容许用户在线和离线工作以支持移动工作流程<BR>9、&nbsp;容许客户自行决定要在何时存取何种内容和数据（异步内容检索）<BR>10、&nbsp;存取多种中间层服务（.NET或Java）和后端数据存储<BR>11、&nbsp;采用新崛起的标准如XML和SOAP，为演进中的Web Service为主的网络提供动态高效的前端应用<BR>12、&nbsp;与遗旧的应用程序和系统集成<BR>13、&nbsp;容许在现有Web应用程序和环境内逐步添加新功能以充分利用现有网络应用投资</P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG alt="" hspace=0 src="http://blog.csdn.net/Develop/ArticleImages/28/28658/CSDN_Dev_Image_2004-6-51716082.JPG" align=baseline border=0></FONT></P></FONT><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG alt="" hspace=0 src="http://blog.csdn.net/Develop/ArticleImages/28/28658/CSDN_Dev_Image_2004-6-51716082.JPG" align=baseline border=0></FONT><FONT size=2> 
<P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>结 构</STRONG></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;RIA本身有能力提供这类Web应用解决方案。如上图，RIA将桌面型计算机软件应用的最佳用户界面功能性与Web应用程序的普遍采纳和低成本部署以及互动多媒体通信的长处集于一体，终于成就了一种可以提供更直观、响应性和有效的用户体验应用程序。它所具备的桌面型计算机长处包括了在确认和格式编排方面提供互动用户界面；在无刷新页面之下提供快捷的界面响应时间；提供通用的用户界面特性如拖放式(drag and drop)以及在线和离线操作能力。Web网的长处如立即部署、跨越平台可用性、采用逐步下载来检索内容和数据、拥有杂志式布局的网页以及充分利用被广泛采纳的互联网标准。通信的长处则包括双向互动声音和图像。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;客户机在RIA内的作用不仅是展示页面，它可以在幕后与用户请求异步地进行计算、递送和检索数据、重新画出屏幕的一部分和密切综合使用声音和图像，这一切都可以在不依靠客户机连接的服务器或后端的情况下进行。</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;RIA提供一个强劲的技术平台，使客户机的能力复原到差不多与桌面型计算机软件应用或传统的C/S系统中的客户机能力相似。它适合传统的N层开发过程，同时也能够和遗旧的环境集成以延展现有的应用程序而无需进行修改。它也可以作为基础网络服务的互动表现层，允许用户在线和离线工作。RIA有能力解决各种复杂性，使需要复杂性的应用得以开发并且减少开发成本，同时在很多时候这类应用之所以能够成形主要是拜RIA所赐。<BR><BR><BR><STRONG><FONT color=#ff0000 size=2>请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</FONT></STRONG><A href="http://www.blogjava.net/rosen"><FONT color=#ff0000 size=2><STRONG>http://www.blogjava.net/rosen</STRONG></FONT></A></FONT></P></FONT><img src ="http://www.blogjava.net/rosen/aggbug/9903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-08-12 11:11 <a href="http://www.blogjava.net/rosen/archive/2005/08/12/9903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Direct Web Remoting：利用 JavaScript 调用服务器端类</title><link>http://www.blogjava.net/rosen/archive/2005/08/12/9899.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 12 Aug 2005 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/08/12/9899.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/9899.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/08/12/9899.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/9899.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/9899.html</trackback:ping><description><![CDATA[    Direct Web Remoting (DWR) 用非常简单方式直接通过浏览器上的 JavaScript 调用 Java 代码。它能帮助你构建类似于 G-Mail，Google Suggest 或者 Kuro5hin 这样不需要调用新页面来更新数据的网站。<br /><br />    利用 <a href="http://dwr.dev.java.net/"><font color="#000080">DWR</font></a>，仅仅需要一个简单的 jar 文件和向 web.xml 添加少量代码来配置服务器端类。在 Web 页面上添加一对 &lt;script&gt; 标签，指明你所需要的导入的 Java 类，就可以马上在 JavaScript 上调用 Java 代码。更多详细说明已放在 DWR 站点上。 
<p>JavaScript 的任务是通过 DWR servlet 来调用指定的 Java 代码，动态创建 iframe。DWR servlet 的任务是配置一些参数，调用服务器端 Java 代码为调用者向 iframe 提供返回数据。<br /><br /><strong><font size="4">译者语<br /><br /></font></strong>    DWR 是个新东东，目前仅仅被认为是 alpha 版。在这一领域，据我了解还有 XML HTTP Request object（一般称作XMLHttp） 和 XML-RPC。国内使用 XMLHttp 的很多，包括我前几个月所参与的项目，实现了很多以前认为 B/S 很难办到的需求，不过遇到的问题也不少，相同版本的 IE 有的却要报错，让人很恼火。XML-RPC 国内用户就少多了，我未接触过 XML-RPC，在此不作过多评价。</p><p>在这样一个日新月异的时代，希望 DWR 能经受住考验！<br /><br /><br /><br /><strong><font color="#ff0000" size="2">请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</font></strong><a href="/rosen"><font color="#ff0000" size="2"><strong>http://www.blogjava.net/rosen</strong></font></a></p><img src ="http://www.blogjava.net/rosen/aggbug/9899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-08-12 10:58 <a href="http://www.blogjava.net/rosen/archive/2005/08/12/9899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OC4J 10g (9.0.4) FAQ（翻译）</title><link>http://www.blogjava.net/rosen/archive/2005/08/12/9894.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 12 Aug 2005 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/08/12/9894.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/9894.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/08/12/9894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/9894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/9894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp; 当今J2EE服务器市场可谓百花齐放啊，本文主要介绍OC4J（Oracle Application Server Containers for J2EE）的特性和配置方式，它是Oracle公司提供的作为J2EE的Container，由纯Java语言编写。要强调的是根据本人亲身体会，OC4J绝对是一个十分可靠的服务器，在企业级应用环境中毫无问题！ &nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2005/08/12/9894.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/9894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-08-12 10:37 <a href="http://www.blogjava.net/rosen/archive/2005/08/12/9894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>