<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marshal&#039;s Blog &#187; flex</title>
	<atom:link href="http://marshal.easymorse.com/archives/tag/flex/feed" rel="self" type="application/rss+xml" />
	<link>http://marshal.easymorse.com</link>
	<description>It&#039;s swap of marshal&#039;s memory.</description>
	<lastBuildDate>Mon, 30 Jan 2012 07:03:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Flex as3事件处理基础</title>
		<link>http://marshal.easymorse.com/archives/1334?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=flex-as3%25e4%25ba%258b%25e4%25bb%25b6%25e5%25a4%2584%25e7%2590%2586%25e5%259f%25ba%25e7%25a1%2580</link>
		<comments>http://marshal.easymorse.com/archives/1334#comments</comments>
		<pubDate>Sat, 02 May 2009 15:26:29 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1334</guid>
		<description><![CDATA[事件处理的介绍 在as3中，每个事件被表示为事件对象，即Event类或者其子类的实例。一个事件对象不只保存特定事件的信息，还包括方便操作事件对象的方法。比如，当flash player或者air检测到一次鼠标点击，将创建一个事件对象（一个MouseEvent类的实例），用来表示这个特定的鼠标点击事件。 事件对象创建后，由flash player或者air程序传递（dispach），即发送给事件的目标对象。作为传递事件对象目的地的对象，被称作事件目标（event target）。比如，当添加的摄像头开始工作，flash player直接传递一个事件对象给事件目标，在目前示例应该是一个表示摄像头的对象。如果该目标对象在显示列表中，事件对象在显示列表中传递，直至找到事件目标。在有些情况下，事件对象可能继续“冒泡”，沿着刚才列表传递路径回退。这种在显示列表中遍历的过程，被称作事件流（event flow）。 可在代码中使用事件监听器监听事件对象。事件监听器是函数或者方法，用于处理对特定事件的响应。为了能在程序中对事件作出响应，需要在事件目标或者初一事件流中任意显示列表对象加入事件监听器。 一般编写事件监听器的示意性代码： function eventResponse(eventObject:EventType):void { // Actions performed in response to the event go here. } eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse); 常用的事件处理任务 以下为常用的事件处理任务： 编写响应事件的代码； 填写响应事件的代码； 操作事件对象； 操作事件流：标识事件流信息、填充事件流、阻止默认行为 从你的类中传递事件； 创建自定义事件类型。 重要的概念和术语 默认行为（default behavior）：一些事件包含一个通常发生地行为。比如，用户在文本框中输入文本，一个文本输入事件就产生。这个事件的默认行为是显示字符到文本框。有时不希望输入的字符显示，就需要覆盖默认行为。 传递（dispatch）：通知事件监听器一个事件发生了。 事件（event）：一个对象上发生了一些事情，该对象可告诉其他对象有关情况。 事件流（event flow）：当事件在一个显示列表（一个显示在屏幕上的对象）中对象上发生，所有包含这个对象的对象，被事件通知并通知它们的事件监听器工作。这个过程开始于舞台（stage），沿着显示列表到达事件发生地实际对象，然后再沿着上述路线返回舞台（stage）。 事件对象（event object）：一个包含特定事件发生信息的对象，用于传递给所有监听器。 事件目标（event target）：实际传递事件的对象。比如，用户点击按钮，将产生事件，按钮在这里是事件目标。 监听器（listener）：一个对象或者函数，将自己注册到一个对象，用来指示当特定事件发生要通知它。]]></description>
			<content:encoded><![CDATA[<h3>事件处理的介绍</h3>
<p>在as3中，每个事件被表示为事件对象，即Event类或者其子类的实例。一个事件对象不只保存特定事件的信息，还包括方便操作事件对象的方法。比如，当flash player或者air检测到一次鼠标点击，将创建一个事件对象（一个MouseEvent类的实例），用来表示这个特定的鼠标点击事件。</p>
<p><span id="more-1334"></span>
<p>事件对象创建后，由flash player或者air程序<em><strong>传递（dispach）</strong></em>，即发送给事件的目标对象。作为传递事件对象目的地的对象，被称作<em><strong>事件目标（event target）</strong></em>。比如，当添加的摄像头开始工作，flash player直接传递一个事件对象给事件目标，在目前示例应该是一个表示摄像头的对象。如果该目标对象在显示列表中，事件对象在显示列表中传递，直至找到事件目标。在有些情况下，事件对象可能继续“冒泡”，沿着刚才列表传递路径回退。这种在显示列表中遍历的过程，被称作<strong><em>事件流（event flow）</em></strong>。</p>
<p>可在代码中使用事件监听器监听事件对象。<strong><em>事件监听器</em></strong>是函数或者方法，用于处理对特定事件的响应。为了能在程序中对事件作出响应，需要在事件目标或者初一事件流中任意显示列表对象加入事件监听器。</p>
<p>一般编写事件监听器的示意性代码：</p>
<p>
<div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:b84b1d9f-512a-4b84-8dae-ec100c7168eb" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF;">function</span><span style="color: #000000;"> eventResponse(eventObject:EventType):</span><span style="color: #0000FF;">void</span><span style="color: #000000;">
{
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Actions performed in response to the event go here.</span><span style="color: #008000;">
</span><span style="color: #000000;">}
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);</span></div>
</pre>
</div>
<h3>常用的事件处理任务</h3>
<p>以下为常用的事件处理任务：</p>
<ul>
<li>编写响应事件的代码；</li>
<li>填写响应事件的代码；</li>
<li>操作事件对象；</li>
<li>操作事件流：标识事件流信息、填充事件流、阻止默认行为</li>
<li>从你的类中传递事件；</li>
<li>创建自定义事件类型。</li>
</ul>
<h3>重要的概念和术语</h3>
<ul>
<li>默认行为（default behavior）：一些事件包含一个通常发生地行为。比如，用户在文本框中输入文本，一个文本输入事件就产生。这个事件的默认行为是显示字符到文本框。有时不希望输入的字符显示，就需要覆盖默认行为。</li>
<li>传递（dispatch）：通知事件监听器一个事件发生了。</li>
<li>事件（event）：一个对象上发生了一些事情，该对象可告诉其他对象有关情况。</li>
<li>事件流（event flow）：当事件在一个显示列表（一个显示在屏幕上的对象）中对象上发生，所有包含这个对象的对象，被事件通知并通知它们的事件监听器工作。这个过程开始于舞台（stage），沿着显示列表到达事件发生地实际对象，然后再沿着上述路线返回舞台（stage）。</li>
<li>事件对象（event object）：一个包含特定事件发生信息的对象，用于传递给所有监听器。</li>
<li>事件目标（event target）：实际传递事件的对象。比如，用户点击按钮，将产生事件，按钮在这里是事件目标。</li>
<li>监听器（listener）：一个对象或者函数，将自己注册到一个对象，用来指示当特定事件发生要通知它。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1334/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex/AS3中ArrayCollection不能完全绑定问题</title>
		<link>http://marshal.easymorse.com/archives/1333?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=flexas3%25e4%25b8%25adarraycollection%25e4%25b8%258d%25e8%2583%25bd%25e5%25ae%258c%25e5%2585%25a8%25e7%25bb%2591%25e5%25ae%259a%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://marshal.easymorse.com/archives/1333#comments</comments>
		<pubDate>Thu, 30 Apr 2009 13:48:23 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1333</guid>
		<description><![CDATA[比如这样的代码： private function getResults(event:ResultEvent):void{ if(this.getUsers.lastResult.users.user is ObjectProxy){ userResults=new ArrayCollection(); userResults.addItem(event.result.users.user); }else{ userResults=event.result.users.user; 完整示例见通过BlazeDS实现flex和服务器的交互。当为该ArrayCollection增加事件监听器后，发现数组中最后一条记录修改后不能被监听到。监听代码如下： userResults.addEventListener(CollectionEvent.COLLECTION_CHANGE,function(event:CollectionEvent){ Alert.show(&#34;列表数据已变化&#34;); Alert.show(&#34;&#62;&#62;&#34;+(event.items[0] as PropertyChangeEvent).oldValue); }); 这个问题，见flex sdk的bug管理记录： https://bugs.adobe.com/jira/browse/SDK-17286 针对这里的示例，可做如下修改： // userResults=event.result.users.user; userResults=new ArrayCollection(event.result.users.user.toArray());]]></description>
			<content:encoded><![CDATA[<p>比如这样的代码：</p>
<p>
<div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:c6ebf4c3-39e7-4fe6-b55d-6903920a2921" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #000000;">private </span><span style="color: #0000FF;">function</span><span style="color: #000000;"> getResults(event:ResultEvent):</span><span style="color: #0000FF;">void</span><span style="color: #000000;">{
    </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #0000FF;">this</span><span style="color: #000000;">.getUsers.lastResult.users.user is ObjectProxy){
        userResults</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;"> ArrayCollection();
        userResults.addItem(event.result.users.user);
    }</span><span style="color: #0000FF;">else</span><span style="color: #000000;">{
        userResults</span><span style="color: #000000;">=</span><span style="color: #000000;">event.result.users.user;</span></div>
</pre>
</div>
<p>完整示例见<a href="http://marshal.easymorse.com/archives/1323" title="通过BlazeDS实现flex和服务器的交互">通过BlazeDS实现flex和服务器的交互</a>。当为该ArrayCollection增加事件监听器后，发现数组中最后一条记录修改后不能被监听到。监听代码如下：</p>
<p><div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:6a93578c-775c-4998-ad18-288813645a13" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #000000;">userResults.addEventListener(CollectionEvent.COLLECTION_CHANGE,</span><span style="color: #0000FF;">function</span><span style="color: #000000;">(event:CollectionEvent){
    Alert.show(</span><span style="color: #000000;">&quot;</span><span style="color: #000000;">列表数据已变化</span><span style="color: #000000;">&quot;</span><span style="color: #000000;">);
    Alert.show(</span><span style="color: #000000;">&quot;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&quot;</span><span style="color: #000000;">+</span><span style="color: #000000;">(event.items[</span><span style="color: #000000;">0</span><span style="color: #000000;">] as PropertyChangeEvent).oldValue);
});</span></div>
</pre>
</div>
<p><span id="more-1333"></span></p>
<p>这个问题，见flex sdk的bug管理记录：</p>
<blockquote>
<p><a href="https://bugs.adobe.com/jira/browse/SDK-17286">https://bugs.adobe.com/jira/browse/SDK-17286</a></p>
</blockquote>
<p>针对这里的示例，可做如下修改：</p>
<div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:d68b27be-3b8d-4e05-8e2f-4323333811df" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008000;">//</span><span style="color: #008000;"> userResults=event.result.users.user;</span><span style="color: #008000;">
</span><span style="color: #000000;">userResults</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;"> ArrayCollection(event.result.users.user.toArray());</span></div>
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用flex/as3的trace()方法</title>
		<link>http://marshal.easymorse.com/archives/1330?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bd%25bf%25e7%2594%25a8flexas3%25e7%259a%2584trace%25e6%2596%25b9%25e6%25b3%2595</link>
		<comments>http://marshal.easymorse.com/archives/1330#comments</comments>
		<pubDate>Thu, 30 Apr 2009 11:31:33 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1330</guid>
		<description><![CDATA[ActionScript3中有类似java的System.out.print()功能，用于调试脚本。使用的步骤如下。 在代码中使用trace()方法 以下是flex示例代码片段：   private function showUserResults():void{ trace(userResults); for each(var user:Object in userResults){ trace(user); } } 使用带debug功能的flash player 可根据浏览器下载带debug功能的flash player，下载地址： http://www.adobe.com/support/flashplayer/downloads.html 安装后打开flash，鼠标右键菜单的样子： 在flex builder中debug运行程序 首先需要启动tomcat，让flex应用运行起来。然后，在需要调试的mxml文件上鼠标右键，选择debug as flex application，将自动启动浏览器打开flex应用。在flex builder界面的console窗口中，可以看到trace()方法打印的内容。]]></description>
			<content:encoded><![CDATA[<p>ActionScript3中有类似java的System.out.print()功能，用于调试脚本。使用的步骤如下。</p>
<h3>在代码中使用trace()方法</h3>
<p>以下是flex示例代码片段：</p>
<p> </p>
<div id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:a25ec37e-9d17-42eb-9eeb-2c045295b8ba" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="width: 100%;">
<div><!--Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #000000;">private </span><span style="color: #0000FF;">function</span><span style="color: #000000;"> showUserResults():</span><span style="color: #0000FF;">void</span><span style="color: #000000;">{
    trace(userResults);
    </span><span style="color: #0000FF;">for</span><span style="color: #000000;"> each(</span><span style="color: #0000FF;">var</span><span style="color: #000000;"> user:Object </span><span style="color: #0000FF;">in</span><span style="color: #000000;"> userResults){
        trace(user);
    }
}</span></div>
</pre>
</div>
<h3><span id="more-1330"></span>使用带debug功能的flash player</h3>
<p>可根据浏览器下载带debug功能的flash player，下载地址：</p>
<blockquote><p><a href="http://www.adobe.com/support/flashplayer/downloads.html">http://www.adobe.com/support/flashplayer/downloads.html</a></p></blockquote>
<p>安装后打开flash，鼠标右键菜单的样子：</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/flashdebug.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/flashdebug-thumb.png" border="0" alt="flash.debug" width="221" height="125" /></a></p>
<h3>在flex builder中debug运行程序</h3>
<p>首先需要启动tomcat，让flex应用运行起来。然后，在需要调试的mxml文件上鼠标右键，选择debug as flex application，将自动启动浏览器打开flex应用。在flex builder界面的console窗口中，可以看到trace()方法打印的内容。</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/flexdebug.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/flexdebug-thumb.png" border="0" alt="flex.debug" width="366" height="140" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1330/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过BlazeDS实现flex和服务器的交互</title>
		<link>http://marshal.easymorse.com/archives/1323?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e9%2580%259a%25e8%25bf%2587blazeds%25e5%25ae%259e%25e7%258e%25b0flex%25e5%2592%258c%25e6%259c%258d%25e5%258a%25a1%25e5%2599%25a8%25e7%259a%2584%25e4%25ba%25a4%25e4%25ba%2592</link>
		<comments>http://marshal.easymorse.com/archives/1323#comments</comments>
		<pubDate>Wed, 29 Apr 2009 12:53:49 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1323</guid>
		<description><![CDATA[可以认为BlazeDS是Livecycle Data Services的精简版本和免费版本（BlazeDS与Livecycle Data Services的区别）。可用于提供服务器和FLEX客户端程序的通信支持。比如这个例子使用flex DataGrid组件中只是将flex中的数组绑定和显示到列表中。实际开发中这些数组往往来源于服务器。 这是下面实现示例的界面，数据来源于tomcat服务器端。 下载和安装BlazeDS Flex Builder本身不提供BlazeDS，需要下载和安装。下载BlazeDS： http://opensource.adobe.com/wiki/display/blazeds/BlazeDS 安装很简单，解压缩即可。里面有一个blazeds.war文件，就是要用的文件。让java web项目支持和安装BlazeDS，其实就是将这个war文件中WEB-INF目录下的文件复制到自己项目中。 注意一下war文件中的web.xml文件，和servlet的集成机制就可以知道个大概。BlazeDS提供了一个SessionListener处理客户端flex程序和Servlet session之间的交互。还提供了MessageBrokerServlet，用于处理flex和web服务器之间的通信处理。 创建集成BlazeDS的FLEX Builder项目 创建flex项目，需要勾选下面条目： 然后，选择刚才解压缩blazeds.war文件路径：   其他的没什么了，创建后的目录结构：   编写简单的交互程序 这里演示使用HttpService从flex客户端发起GET请求，服务器端返回一个xml格式数据（这里做演示是一个静态的xml文件，可以通过Servlet动态生成）：   &#60;?xml version="1.0" encoding="UTF-8"?&#62; &#60;users&#62; &#60;user&#62; &#60;name&#62;张三&#60;/name&#62; &#60;birthday&#62;1999-1-1&#60;/birthday&#62; &#60;job&#62;程序员&#60;/job&#62; &#60;/user&#62; &#60;user&#62; &#60;name&#62;李四&#60;/name&#62; &#60;birthday&#62;2000-1-1&#60;/birthday&#62; &#60;job&#62;公务员&#60;/job&#62; &#60;/user&#62; &#60;user&#62; &#60;name&#62;王五&#60;/name&#62; &#60;birthday&#62;1988-2-11&#60;/birthday&#62; &#60;job&#62;销售&#60;/job&#62; &#60;/user&#62; &#60;/users&#62; 编写的flex代码：   &#60;?xml version="1.0" encoding="utf-8"?&#62; &#60;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()"&#62; &#60;mx:Script&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>可以认为BlazeDS是Livecycle Data Services的精简版本和免费版本（<a href="http://marshal.easymorse.com/archives/1312" title="BlazeDS与Livecycle Data Services的区别">BlazeDS与Livecycle Data Services的区别</a>）。可用于提供服务器和FLEX客户端程序的通信支持。比如这个例子<a href="http://marshal.easymorse.com/archives/1309" title="使用flex DataGrid组件">使用flex DataGrid组件</a>中只是将flex中的数组绑定和显示到列表中。实际开发中这些数组往往来源于服务器。</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/users.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/users-thumb.png" border="0" alt="users" width="394" height="142" /></a></p>
<p>这是下面实现示例的界面，数据来源于tomcat服务器端。</p>
<p><span id="more-1323"></span></p>
<h3>下载和安装BlazeDS</h3>
<p>Flex Builder本身不提供BlazeDS，需要下载和安装。下载BlazeDS：</p>
<blockquote><p><a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">http://opensource.adobe.com/wiki/display/blazeds/BlazeDS</a></p></blockquote>
<p>安装很简单，解压缩即可。里面有一个blazeds.war文件，就是要用的文件。让java web项目支持和安装BlazeDS，其实就是将这个war文件中WEB-INF目录下的文件复制到自己项目中。</p>
<p>注意一下war文件中的web.xml文件，和servlet的集成机制就可以知道个大概。BlazeDS提供了一个SessionListener处理客户端flex程序和Servlet session之间的交互。还提供了MessageBrokerServlet，用于处理flex和web服务器之间的通信处理。</p>
<h3>创建集成BlazeDS的FLEX Builder项目</h3>
<p>创建flex项目，需要勾选下面条目：</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/ds1.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/ds1-thumb.png" border="0" alt="ds.1" width="348" height="310" /></a></p>
<p>然后，选择刚才解压缩blazeds.war文件路径：</p>
<p> <a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/ds2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/ds2-thumb.png" border="0" alt="ds.2" width="427" height="134" /></a></p>
<p>其他的没什么了，创建后的目录结构：</p>
<p> <a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/ds3.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/ds3-thumb.png" border="0" alt="ds.3" width="209" height="348" /></a></p>
<h3>编写简单的交互程序</h3>
<p>这里演示使用HttpService从flex客户端发起GET请求，服务器端返回一个xml格式数据（这里做演示是一个静态的xml文件，可以通过Servlet动态生成）：</p>
<p> </p>
<div id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:39269b65-a83f-43f8-8955-1f322df7ce05" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="width: 100%;">
<div><!--
Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF;">&lt;?</span><span style="color: #FF00FF;">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000FF;">?&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">users</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">user</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">name</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">张三</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">name</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">birthday</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">1999-1-1</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">birthday</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">job</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">程序员</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">job</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">user</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">user</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">name</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">李四</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">name</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">birthday</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">2000-1-1</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">birthday</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">job</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">公务员</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">job</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">user</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">user</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">name</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">王五</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">name</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">birthday</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">1988-2-11</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">birthday</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">job</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">销售</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">job</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">user</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">users</span><span style="color: #0000FF;">&gt;</span></div>
</pre>
</div>
<p>编写的flex代码：</p>
<p> </p>
<div id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:901f72fb-6d3a-4931-8c8c-5e6f7519af52" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="width: 100%;">
<div><!--
Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF;">&lt;?</span><span style="color: #FF00FF;">xml version="1.0" encoding="utf-8"</span><span style="color: #0000FF;">?&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:Application </span><span style="color: #FF0000;">xmlns:mx</span><span style="color: #0000FF;">="http://www.adobe.com/2006/mxml"</span><span style="color: #FF0000;"> layout</span><span style="color: #0000FF;">="absolute"</span><span style="color: #FF0000;">
    initialize</span><span style="color: #0000FF;">="init()"</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:Script</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;![CDATA[</span><span style="color: #808080;">
            import mx.utils.ObjectProxy;
            import mx.collections.XMLListCollection;
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;
            import mx.controls.Alert;

            [Bindable]
            private var userResults:ArrayCollection;

            private function init():void{
                getUsers.send();
            }

            private function getResults(event:ResultEvent):void{
                if(this.getUsers.lastResult.users.user is ObjectProxy){
                    userResults=new ArrayCollection();
                    userResults.addItem(event.result.users.user);
                }else{
                    userResults=event.result.users.user as ArrayCollection;
                }
            }
        </span><span style="color: #0000FF;">]]&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">mx:Script</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:HTTPService </span><span style="color: #FF0000;">id</span><span style="color: #0000FF;">="getUsers"</span><span style="color: #FF0000;"> url</span><span style="color: #0000FF;">="users.xml"</span><span style="color: #FF0000;"> method</span><span style="color: #0000FF;">="GET"</span><span style="color: #FF0000;"> result</span><span style="color: #0000FF;">="getResults(event)"</span><span style="color: #FF0000;"> </span><span style="color: #0000FF;">/&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:Panel </span><span style="color: #FF0000;">x</span><span style="color: #0000FF;">="10"</span><span style="color: #FF0000;"> y</span><span style="color: #0000FF;">="10"</span><span style="color: #FF0000;"> width</span><span style="color: #0000FF;">="431"</span><span style="color: #FF0000;"> height</span><span style="color: #0000FF;">="139"</span><span style="color: #FF0000;"> layout</span><span style="color: #0000FF;">="absolute"</span><span style="color: #FF0000;">
        title</span><span style="color: #0000FF;">="用户列表"</span><span style="color: #FF0000;"> fontSize</span><span style="color: #0000FF;">="12"</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:DataGrid </span><span style="color: #FF0000;">id</span><span style="color: #0000FF;">="myGrid"</span><span style="color: #FF0000;"> x</span><span style="color: #0000FF;">="10"</span><span style="color: #FF0000;"> y</span><span style="color: #0000FF;">="10"</span><span style="color: #FF0000;"> width</span><span style="color: #0000FF;">="391"</span><span style="color: #FF0000;"> height</span><span style="color: #0000FF;">="82"</span><span style="color: #FF0000;"> editable</span><span style="color: #0000FF;">="true"</span><span style="color: #FF0000;">
            dataProvider</span><span style="color: #0000FF;">="{userResults}"</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
            </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:columns</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
                </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:DataGridColumn </span><span style="color: #FF0000;">headerText</span><span style="color: #0000FF;">="姓名"</span><span style="color: #FF0000;"> dataField</span><span style="color: #0000FF;">="name"</span><span style="color: #0000FF;">/&gt;</span><span style="color: #000000;">
                </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:DataGridColumn </span><span style="color: #FF0000;">headerText</span><span style="color: #0000FF;">="生日"</span><span style="color: #FF0000;"> dataField</span><span style="color: #0000FF;">="birthday"</span><span style="color: #0000FF;">/&gt;</span><span style="color: #000000;">
                </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">mx:DataGridColumn </span><span style="color: #FF0000;">headerText</span><span style="color: #0000FF;">="职业"</span><span style="color: #FF0000;"> dataField</span><span style="color: #0000FF;">="job"</span><span style="color: #0000FF;">/&gt;</span><span style="color: #000000;">
            </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">mx:columns</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">mx:DataGrid</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">mx:Panel</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">mx:Application</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span></div>
</pre>
</div>
<p>这里需要注意的是，xml响应内容，可以被flex通过不同策略解析。在这里是通过默认的object方式。当仅有一个user节点的时候，自动转型为对象而不是数组，多个user节点的时候才转型为数组。所以处理逻辑稍显麻烦。</p>
<p>flex的自动绑定功能和对应的元数据支持，使flex内部的模型、视图和控制代码十分清楚简明。</p>
<h3>如何自动编译MXML文件</h3>
<p>BlazeDS比LCDS少提供一个动态编译mxml的功能。比如mxml复制到webcontent目录下，lcds可以让用户访问test.mxml时，自动编译，并输出swf。</p>
<p>使用BlazeDS，可以这样设置，由flex builder编译mxml文件输出swf文件到webcontent目录下。这样显然不如lcds动态，如果是正式项目，可以通过maven和相关插件构建时编译。</p>
<p>配置flex builder编译mxml文件输出swf文件到webcontent目录：</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/flex11.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/flex11-thumb.png" border="0" alt="flex11" width="389" height="297" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1323/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BlazeDS与Livecycle Data Services的区别</title>
		<link>http://marshal.easymorse.com/archives/1312?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=blazeds%25e4%25b8%258elivecycle-data-services%25e7%259a%2584%25e5%258c%25ba%25e5%2588%25ab</link>
		<comments>http://marshal.easymorse.com/archives/1312#comments</comments>
		<pubDate>Tue, 28 Apr 2009 12:20:38 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1312</guid>
		<description><![CDATA[BlazeDS与Livecycle Data Services的区别，可见下面的图，暗灰色标识部分就是Livecycle Data Services有但BalzeDS没有的功能： 另外，就是BlazeDS是开源和免费的，LCDS是付费和闭源的。]]></description>
			<content:encoded><![CDATA[<p>BlazeDS与Livecycle Data Services的区别，可见下面的图，暗灰色标识部分就是Livecycle Data Services有但BalzeDS没有的功能：</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/blazeds.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="339" alt="blazeds" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/blazeds-thumb.jpg" width="208" border="0"></a> </p>
<p><span id="more-1312"></span>另外，就是BlazeDS是开源和免费的，LCDS是付费和闭源的。</p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1312/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>到哪里找flex的离线帮助</title>
		<link>http://marshal.easymorse.com/archives/1305?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%2588%25b0%25e5%2593%25aa%25e9%2587%258c%25e6%2589%25beflex%25e7%259a%2584%25e7%25a6%25bb%25e7%25ba%25bf%25e5%25b8%25ae%25e5%258a%25a9</link>
		<comments>http://marshal.easymorse.com/archives/1305#comments</comments>
		<pubDate>Mon, 27 Apr 2009 04:48:42 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1305</guid>
		<description><![CDATA[虽然可通过： http://livedocs.adobe.com/flex/3/html/index.html 查看flex在线文档。不过有时网络质量或者没有网络。那么可以通过flex builder在eclipse中的help&#62;help contents菜单，里面的adobe flex 3 help部分，和在线文档基本相同。]]></description>
			<content:encoded><![CDATA[<p>虽然可通过：</p>
<blockquote><p><a href="http://livedocs.adobe.com/flex/3/html/index.html">http://livedocs.adobe.com/flex/3/html/index.html</a></p>
</blockquote>
<p>查看flex在线文档。不过有时网络质量或者没有网络。那么可以通过flex builder在eclipse中的help&gt;help contents菜单，里面的adobe flex 3 help部分，和在线文档基本相同。</p>
<p><span id="more-1305"></span>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/flex.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="219" alt="flex" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/flex-thumb.png" width="406" border="0"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1305/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>记录一些flex资源</title>
		<link>http://marshal.easymorse.com/archives/1296?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25ae%25b0%25e5%25bd%2595%25e4%25b8%2580%25e4%25ba%259b%25e9%2587%258d%25e8%25a6%2581%25e7%259a%2584flex%25e8%25b5%2584%25e6%25ba%2590</link>
		<comments>http://marshal.easymorse.com/archives/1296#comments</comments>
		<pubDate>Sun, 26 Apr 2009 14:10:48 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1296</guid>
		<description><![CDATA[flex developer center，开发者中心： http://www.adobe.com/devnet/flex/ flex3 component explorer，组件示例演示： http://examples.adobe.com/flex3/componentexplorer/explorer.html 在线文档： http://livedocs.adobe.com/flex/3/html/index.html BlazeDS： http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/ javaeye flex论坛： http://www.javaeye.com/forums/tag/Flex csdn flex专题： http://flex.csdn.net/ csdn flex论坛： http://forum.csdn.net/PointForum/Forum/TopicList.aspx?Alias=Flex ActionScript3天地会论坛： http://bbs.actionscript3.cn/ 下载flex3 cookbook中文版： http://www.airia.cn/AIR_FLEX_EBOOK/Flex3_Cookbook_zhcn/        ]]></description>
			<content:encoded><![CDATA[<p>flex developer center，开发者中心：</p>
<blockquote><p><a href="http://www.adobe.com/devnet/flex/">http://www.adobe.com/devnet/flex/</a></p></blockquote>
<p>flex3 component explorer，组件示例演示：</p>
<blockquote><p><a href="http://examples.adobe.com/flex3/componentexplorer/explorer.html">http://examples.adobe.com/flex3/componentexplorer/explorer.html</a></p></blockquote>
<p>在线文档：</p>
<blockquote><p><a href="http://livedocs.adobe.com/flex/3/html/index.html">http://livedocs.adobe.com/flex/3/html/index.html</a></p></blockquote>
<p>BlazeDS：</p>
<blockquote><p><a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/">http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/</a></p></blockquote>
<p>javaeye flex论坛：</p>
<blockquote><p><a href="http://www.javaeye.com/forums/tag/Flex">http://www.javaeye.com/forums/tag/Flex</a></p></blockquote>
<p>csdn flex专题：</p>
<blockquote><p><a href="http://flex.csdn.net/">http://flex.csdn.net/</a></p></blockquote>
<p>csdn flex论坛：</p>
<blockquote><p><a href="http://forum.csdn.net/PointForum/Forum/TopicList.aspx?Alias=Flex">http://forum.csdn.net/PointForum/Forum/TopicList.aspx?Alias=Flex</a></p></blockquote>
<p>ActionScript3天地会论坛：</p>
<blockquote><p><a href="http://bbs.actionscript3.cn/">http://bbs.actionscript3.cn/</a></p></blockquote>
<p>下载flex3 cookbook中文版：</p>
<blockquote><p><a href="http://www.airia.cn/AIR_FLEX_EBOOK/Flex3_Cookbook_zhcn/">http://www.airia.cn/AIR_FLEX_EBOOK/Flex3_Cookbook_zhcn/</a></p></blockquote>
<blockquote><p> </p>
<p> </p>
<p> </p>
<p> </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1296/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在ubuntu下安装red5</title>
		<link>http://marshal.easymorse.com/archives/1276?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%259c%25a8ubuntu%25e4%25b8%258b%25e5%25ae%2589%25e8%25a3%2585red5</link>
		<comments>http://marshal.easymorse.com/archives/1276#comments</comments>
		<pubDate>Fri, 24 Apr 2009 14:01:37 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[red5]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1276</guid>
		<description><![CDATA[red5的文档做的不好，不过为了建一个免费的流媒体服务器，目前也只有用它了。red5 googlecode上链接的版本比官方网站上新： http://code.google.com/p/red5/ 因为是ubuntu，所以上来就下载了deb版本，安装命令为： dpkg &#8211;install red5_0.8.0_RC1.deb 提示没有安装sun-jdk-5，因为ubuntu已经安装了sun-jdk-6。不打算重装sun-jdk-5了。那么只有两个办法，自行编译red5.deb，或者选择其他办法。 这里选择了后者，不想在服务器上安装配置ant和ivy了。下载当前最新的red5 0.8.0_RC2.tar.gz.tar（奇怪的格式），选择的是java6编译的版本，解压缩： tar -xvf red5-0.8.RC2-java6.tar.gz.tar 进入red5解压缩目录，然后设置RED5_HOME： export RED5_HOME=`pwd` 启动red5之前可以先调整一下端口号，需要修改以下文件： sudo vim conf/red5.properties 启动red5： ./red5.sh 然后通过浏览器访问： http://your_ip:5080 如能访问，说明安装成功了。red5提供了一些demo，演示red5的功能，一些demo也可以直接使用，比如流媒体服务功能。点击链接： Click here to install demos. 出现一个flash的表单，直接点击connect按钮，就可以看到所有demo，需要install，才可以使用这些demo。install后，应该不必重启red5服务器。 我这里需要流媒体服务器功能，所以主要是安装oflaDemo，这个demo安装好后，在red5/webapps目录下将出现同名的目录，将你需要远程播放的视频flv文件放在该目录的streams目录下。 测试流媒体播放器的使用，可访问： http://your_ip:5080/demos/ofla_demo.html 也是flash的表单，如果是在本机上运行red5，可直接点击connect链接，应该在libray列表中出现streams目录中包含的flv文件，点击它就可以在video栏中播放了。如果不是本地机，需要将localhost替代为具体的ip地址。]]></description>
			<content:encoded><![CDATA[<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/red5.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/red5-thumb.png" border="0" alt="red5" width="240" height="100" /></a></p>
<p>red5的文档做的不好，不过为了建一个免费的流媒体服务器，目前也只有用它了。red5 googlecode上链接的版本比官方网站上新：</p>
<blockquote><p><a href="http://code.google.com/p/red5/">http://code.google.com/p/red5/</a></p></blockquote>
<p>因为是ubuntu，所以上来就下载了deb版本，安装命令为：</p>
<blockquote><p>dpkg &#8211;install red5_0.8.0_RC1.deb</p></blockquote>
<p>提示没有安装sun-jdk-5，因为ubuntu已经安装了sun-jdk-6。不打算重装sun-jdk-5了。那么只有两个办法，自行编译red5.deb，或者选择其他办法。</p>
<p><span id="more-1276"></span></p>
<p>这里选择了后者，不想在服务器上安装配置ant和ivy了。下载当前最新的red5 0.8.0_RC2.tar.gz.tar（奇怪的格式），选择的是java6编译的版本，解压缩：</p>
<blockquote><p>tar -xvf red5-0.8.RC2-java6.tar.gz.tar</p></blockquote>
<p>进入red5解压缩目录，然后设置RED5_HOME：</p>
<blockquote><p>export RED5_HOME=`pwd`</p></blockquote>
<p>启动red5之前可以先调整一下端口号，需要修改以下文件：</p>
<blockquote><p>sudo vim conf/red5.properties</p></blockquote>
<p>启动red5：</p>
<blockquote><p>./red5.sh</p></blockquote>
<p>然后通过浏览器访问：</p>
<blockquote><p><span style="color: #333333;"><a href="http://your_ip:5080">http://your_ip:5080</a></span></p></blockquote>
<p>如能访问，说明安装成功了。red5提供了一些demo，演示red5的功能，一些demo也可以直接使用，比如流媒体服务功能。点击链接：</p>
<blockquote><p>Click here to install demos.</p></blockquote>
<p>出现一个flash的表单，直接点击connect按钮，就可以看到所有demo，需要install，才可以使用这些demo。install后，应该不必重启red5服务器。</p>
<p>我这里需要流媒体服务器功能，所以主要是安装oflaDemo，这个demo安装好后，在red5/webapps目录下将出现同名的目录，将你需要远程播放的视频flv文件放在该目录的streams目录下。</p>
<p>测试流媒体播放器的使用，可访问：</p>
<blockquote><p><a href="http://your_ip:5080/demos/ofla_demo.html">http://<span style="color: #777777;">your_ip</span>:5080/demos/ofla_demo.html</a></p></blockquote>
<p>也是flash的表单，如果是在本机上运行red5，可直接点击connect链接，应该在libray列表中出现streams目录中包含的flv文件，点击它就可以在video栏中播放了。如果不是本地机，需要将localhost替代为具体的ip地址。</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2009/04/red5demo.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://marshal.easymorse.com/wp-content/uploads/2009/04/red5demo-thumb.png" border="0" alt="red5.demo" width="447" height="335" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1276/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

