什么是Rich Media Web?
Rich Media,富媒体也,Rich Media Web当然就是富媒体网站。顾名思义,富媒体即所谓丰富媒体之义。那么为什么不叫多媒体呢?富媒体和多媒体有什么不同呢?
问得好,我刚接触Rich Media也是一头雾水,不知Rich为何物。让我们回想多媒体是什么,当年多媒体概念的提出正是对应单媒体,那个年代计算机能够处理的媒体只有一种:文本。回想一下DOS时代的应用程序,除了文本还是文本,哪有什么多媒体可言。等到图形界面操作系统的出现和声卡的普及,才有了图像、声音以及视频等等媒体资源可以利用,这些不同于文本的媒体统称多媒体。于是多媒体应用顺应而生,它指的是运用多种媒体来表现内容的应用程序。
从定义上看,多媒体把所有其它的媒体都包括进去了,那Rich Media又增加了那些内容呢?Rich Media是建立在多媒体基础上的一个新型媒体(虽然它出现好几年了),Rich Media为多媒体增加了媒体交互内容。多媒体的应用一般是没什么媒体交互的概念的,播一段音乐或者视频,都是由应用程序预先制作好,在播放的过程中也不能由用户控制(注意是控制内容,不是控制播放),这和传统的看电影在本质上没有多大区别。说到电影,前段日子我看新闻说美国现在出现了一种新型的电影,观众能够控制电影的情节,比如男主角向女主角求婚,他跪在地上把花献给女主角,这时候女主角一脸的笑容,突然转过头冲着观众说:“你们说我要不要答应他呢?”这时候你就可以插上一脚:“不,不要答应他”,或者“好吧,那就答应他吧”。由于你插了这一脚,接下来的情节发展就会发生改变,结局也就不同……哦,这不正是富媒体所提出的媒体交互的概念吗?
呵呵,接下来我就不用费精神多说Rich Media Web的概念了,相信大家稍微引申一下就能够明白,毕竟解释概念这不是今天的主题。
目前Rich Media Web
其实大家早就接触过Rich Media Web了,一些整站都用Flash来构造的网站就是。目前Rich Media Web事实上标准就是Flash,当然不是所有用Flash创建内容的站都称得上Rich Media Web,也不是所有的Rich Media Web都是用Flash构造的,不过Flash在这方面居于领先地位,Macromedia公司也是Rich Media Web工具提供的领先厂商。不过在2006年微软将推出的Windows Longhorn内置了Avalon和Aero,将会让Windows应用程序开发全面Rich Media化,那时候局面如何就很难说。(其实微软曾经推出过和Flash类似的Web互动媒体产品,叫做DirectMedia,不过基本没有市场)
Rich Media Web不能用现在的Web来理解,因为整个概念都不一样了,无论是从系统设计和用户体验都不同。Rich Media Web最重要的一个改变就是抛弃了HTML而采用了XML,WEB终于进入了所谓后HTML时代。
搭建Rich Media Web开发环境
首先说明,我搭建的这个环境只在一个时期内有效,因为这个环境最重要也是最复杂的部分,将会随着明年ColdFusion BlackStone的发布而解决,到时候可以换用ColdFusion BlackStone。由于ColdFusion BlackStone的改变非常大,所以现在写的代码也许到时候用不上,所以现在利用这个环境来熟悉概念比较合适,要是用于商业开发也许以后会碰上麻烦。
先准备一下工具,这里给出一个列表,大家自己想办法去搞到这些东东吧
| 工具 | 版本 | 作用 | 说明 |
| Sun Java SDK | 1.4.2 | Java Core | 必须,IBM的JDK不能用 |
| Macromedia JRun | 4,SP3 | Application Server | 也可以换其它的Application Server |
| Macromedia ColdFusion | 6.1,SP1 | CFML Support | 必须,主要用来写WebService |
| Macromedia Flex | 1.0,SP2 | MXML Support | 必须,重要 |
| Macromedia Flex Builder | 1.0 | MXML IDE | 建议,否则要手工编辑MXML代码 |
| Macromedia Dreamweaver | MX2004 | CFML IDE | 可选,Flex Builder含DW所有功能 |
| Macromedia Flash Pro | MX2004 | Flash IDE | 可选,创作高级组件。必须要Pro版本 |
| Borland JBuilder X | 10 | Java IDE | 可选,我习惯用JBuilder |
| Borland Together For JBuilder | 7 | UML IDE | 可选,7非常好用 |
| Borland JDataStore | 6 | Database Server | JBX里自带,但单独发行版本更好些 |
| Altova XMLSpy | 2004 | XML IDE | 可选,我习惯用它来写XML |
| Scioworks Camino Pro | 3.1.1 | Struts IDE | 可选,如果需要Struts支持 |
| Kodo JDO | 3.1.5 | JDO Support | 可选,如果需要JDO支持 |
安装请按列表的次序进行(不然会碰到麻烦),每个产品安装完以后必须立即打补丁,然后接着装下一个产品。Macromedia所有的产品都可以在它的网站上下载试用版,其它的请Google。
ColdFusion 安装要选择ColdFusion For J2EE选项,生成EAR文件而不是WAR,Content Root使用“/”,其他按默认即可。一定要安装ColdFusion 6.1 SP1升级包,不然会碰到非常麻烦的问题——WebService不能正常工作。
安装完这些东西大约需要半天的时间,这个时候可以抽空看看ColdFusion和Flex的资料(在安装完Flex Builder以后就有了)。
配置开发环境
在安装完上面一大堆东西以后,我们有了一个中量级Web Application Server开发环境,它没有J2EE那么庞大和复杂,也没有Tomcat那么单薄,这是一个能够支持企业级应用开发和部署的环境,下面是所支持的特性一览:
| 特性 | 支持提供 |
| JSP/Servlet | Macromedia JRun |
| CFML | Macromedia ColdFusion (JSP的替代解决方案) |
| 邮件 | Macromedia ColdFusion (SMTP/POP3全功能支持) |
| FTP | Macromedia ColdFusion,全功能FTP客户端支持 |
| 图形/报表 | Macromedia ColdFusion,支持PGN/Flash/JPEG格式 |
| 轻量级目录访问协议 | Macromedia ColdFusion,全功能LDAP客户端支持 |
| 全文检索引擎 | Macromedia ColdFusion,但要支持东亚语言检索需要安装附加包 |
| Corba/COM/DCOM | Macromedia ColdFusion,COM/DCOM仅支持Windows平台 |
| WebService | Macromedia ColdFusion |
| 富媒体引擎 | Macromedia Flex / Macromedia Flash MX 2004 |
| 流媒体引擎 | Macromedia Flash Communication Server,Flex内置 |
| 关系数据库 | Borland JDataStore,纯Java实现的RDBMS,支持TX |
| 数据持久化 | Kodo JDO,性能强,支持JBuilder,支持包括JDataStore在内的大部分RDBMS |
| Java/J2EE开发环境 | Borland JBuilder X |
| UML/MDA开发环境 | Borland Together 7 |
| 可视化Struts开发 | Scioworks Camino Pro |
| 可视化HTML/JSP/CFML开发 | Macromedia Dreamweaver / Macromedia Flex Builder |
| 可视化MXML开发 | Macromedia Flex Builder |
| 可视化Flash开发 | Macromedia Flash MX 2004 |
如果大家都正确安装了上面的软件以后,可以对这个环境进行配置了。如果在安装过程中出现了问题,那么你有三个选择,Abort, Retry or Ignore....
接下来的工作非常考验耐心,我昨天完成所有的配置工作大约花了两个小时,配置时间和成功率要看大家对各个产品了解程度了。因为我已经配置成功,而且在写这篇文章的时候也不想重新配置一遍,所以没有配置过程中的图,所以这里只是讲解要点。另外,我的操作系统环境是XPSP2,如果操作系统跟我的不一样,也不能保证照我这样一定能配置成功。好了,开始上路。
Java和JRun的配置
有关Java的配置互联网上到处都是,所以请参考其他人写的详细资料,一般来说主要配置环境变量,没有什么困难的。JRun也很容易配置,正确的安装即已经配置完成,我们要做的工作是新增一个JRun Server,命名为richweb。
打开JRun Launcher,启动admin。然后打开浏览器,访问http://localhost:8000,输入正确的用户名和密码后进入管理界面。在JRun的管理页面中选择Create New Server,根据提示一步一步做。我做的唯一更改是把Web Server Port Number改成了8300。
创建完richweb以后不要立即启动它,先转到richweb的根目录(你不要告诉我你找不到),删掉default-ear目录,因为用不着它。至此配置完成。
合并ColdFusion和Flex
熟悉web.xml配置吗?如果熟悉这段就不用看了,不熟悉也不用看了,看了也不会,这段文字只对半生不熟的人有用。
新建一个目录,把ColdFusion安装目录里面的cfusion.ear解开,拷贝cfusion.war文件到这个目录,拷贝flex安装目录的flex.war拷贝过来,把这两个文件分别解到cufsion和flex子目录中。
现在开始合并这两个web module,随便以哪个为主都可以,建议是flex为主,因为flex所带的web.xml版本比较新。如果以flex为主,把cfusion\WEB-INF下面除jrun-web.xml/web.xml以外的内容拷贝到flex\WEB-INF目录下,用XMLSpy打开cufsion\WEB-INF\web.xml和flex\WEB-INF\web.xml,小心地将这两个文件的内容合并到flex\WEB-INF\web.xml中去。合并完成以后,可以增加新的wellcome file,加入index.htm、index.jsp、index.cfm和index.mxml。
如果合并没有错误则这部分的工作已经完成了,可以放到JRun里面测一下。先创建测试文件index.jsp、index.cfm和index.mxml
index.jsp
<%@ page contentType="text/html; charset=GBK" %><%@ taglib uri="FlexTagLib" prefix="mm" %><%@ taglib uri="FlexTagLib" prefix="mm" %>
<%@ taglib uri="FlexTagLib" prefix="mm" %>
<html>
<head>
<title>
index
</title>
</head>
<body bgcolor="#ffffff" leftmargin="0" rightmargin="0" topmargin="0" bottommargin="0">
<mm:mxml>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" pageTitle="Index" usePreloader="false" width="100%" height="100%">
<mx:Script>
<![CDATA[
function changeEvt(event) {
if (null != event.menuItem.attributes.href){
getURL(event.menuItem.attributes.href);
}
}
]]>
</mx:Script>
<mx:Panel title="Think Space Rich Web Application Framework - JSP Tester" widthFlex="1" heightFlex="1" creationCompleteEffect="Fade">
<mx:MenuBar id="menu" widthFlex="1" change="changeEvt(event);">
<mx:dataProvider>
<mx:XML>
<menuitem label="Test Other">
<menuitem label="Test JSP Engie" href="index.jsp"></menuitem>
<menuitem label="Test ColdFusion Engie" href="index.cfm"></menuitem>
<menuitem label="Test Flex Engie" href="index.mxml"></menuitem>
</menuitem>
</mx:XML>
</mx:dataProvider>
</mx:MenuBar>
<mx:VBox widthFlex="1" heightFlex="1" verticalAlign="middle" horizontalAlign="center">
<mx:Label styleName="information" fontSize="24" text="Java Server Page Engie Success."/>
</mx:VBox>
<mx:ControlBar><mx:Label styleName="information" text="Think Space Rich Web Application Framework"/></mx:ControlBar>
</mx:Panel>
</mx:Application>
</mm:mxml>
</body>
</html>
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="com.borland.internetbeans.*,com.borland.dx.dataset.*,com.borland.dx.sql.dataset.*" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/internetbeans.tld" prefix="ix" %>
<%@ taglib uri="FlexTagLib" prefix="mm" %>
<%@ page contentType="text/html; charset=GBK" %>index.cfm
<cfcontent type="text/html;charset=gb2312">
<cfimport taglib="/WEB-INF/lib/flex-bootstrap.jar" prefix="mm">
<html>
<head>
<title>
index
</title>
</head>
<body bgcolor="#ffffff" leftmargin="0" rightmargin="0" topmargin="0" bottommargin="0">
<mm:mxml>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" pageTitle="Index" usePreloader="false" width="100%" height="100%">
<mx:Script>
<![CDATA[
function changeEvt(event) {
if (null != event.menuItem.attributes.href){
getURL(event.menuItem.attributes.href);
}
}
]]>
</mx:Script>
<mx:Panel title="Think Space Rich Web Application Framework - ColdFusion Tester" widthFlex="1" heightFlex="1" creationCompleteEffect="Fade">
<mx:MenuBar id="menu" widthFlex="1" change="changeEvt(event);">
<mx:dataProvider>
<mx:XML>
<menuitem label="Test Other">
<menuitem label="Test JSP Engie" href="index.jsp"></menuitem>
<menuitem label="Test ColdFusion Engie" href="index.cfm"></menuitem>
<menuitem label="Test Flex Engie" href="index.mxml"></menuitem>
</menuitem>
</mx:XML>
</mx:dataProvider>
</mx:MenuBar>
<mx:VBox widthFlex="1" heightFlex="1" verticalAlign="middle" horizontalAlign="center">
<mx:Label styleName="information" fontSize="24" text="ColdFusion Engie Success."/>
</mx:VBox>
<mx:ControlBar><mx:Label styleName="information" text="Think Space Rich Web Application Framework"/></mx:ControlBar>
</mx:Panel>
</mx:Application>
</mm:mxml>
</body>
</html>
index.mxml
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" pageTitle="Index" usePreloader="false" width="100%" height="100%">
<mx:Script>
<![CDATA[
function changeEvt(event) {
if (null != event.menuItem.attributes.href){
getURL(event.menuItem.attributes.href);
}
}
]]>
</mx:Script>
<mx:Panel title="Think Space Rich Web Application Framework - Flex Tester" widthFlex="1" heightFlex="1" creationCompleteEffect="Fade">
<mx:MenuBar id="menu" widthFlex="1" change="changeEvt(event);">
<mx:dataProvider>
<mx:XML>
<menuitem label="Test Other">
<menuitem label="Test JSP Engie" href="index.jsp"></menuitem>
<menuitem label="Test ColdFusion Engie" href="index.cfm"></menuitem>
<menuitem label="Test Flex Engie" href="index.mxml"></menuitem>
</menuitem>
</mx:XML>
</mx:dataProvider>
</mx:MenuBar>
<mx:VBox widthFlex="1" heightFlex="1" verticalAlign="middle" horizontalAlign="center">
<mx:Label styleName="information" fontSize="24" text="Flex Engie Success."/>
</mx:VBox>
<mx:ControlBar><mx:Label styleName="information" text="Think Space Rich Web Application Framework"/></mx:ControlBar>
</mx:Panel>
</mx:Application>
测试运行
把新创建的Web Module部署到richweb下,启动richweb,看看效果吧
如果能看到这样的效果,证明这部分的配置已经成功了,接下来要向这个WebModule里面加入各种外围支持,什么Struts、JDO什么的。
下一步的工作
下一步的工作嘛...明天再讲...
浙公网安备 33010602011771号