ColdFusion MX开发快速入门教程
附录
ColdFusion MX(以下简称ColdFusion)是建立交互式站点的一个快速而强大的开发工具。利用ColdFusion,可以用最快的速度将服务器、浏览器和数据库技术相集成,建立强大的Web应用程序。而且,它不需要传统的编程语言,你只需将标准的HTML语言与CFML(ColdFusion Markup Language)语言结合使用即可。 CFML是一种服务器端的标签语言,使用起来和HTML很相似,它提供了各种变量、函数以及控制程序流程的语句等,以实现数据库的操作和站点的交互性等功能。
一、安装与配置ColdFusion MX
(一)安装ColdFusion MX
ColdFusion能够在Windows和Linux平台下安装运行,其实现方法类似,这里我们在Windows平台下进行安装。
1.安装需求
ColdFusion支持Windows 98/Me/NT4.0(Sp6)/2000/XP。对于开发者而言,推荐使用Windows 2000。Windows 98/Me从系统构造而言是个人操作系统而非应用服务器系统,所以在Windows 98/Me上运行ColdFusion会出现一些难以调试的错误。
2.安装ColdFusion MX
在安装ColdFusion以前停止必要的一些系统服务,比如IIS、Apache。然后双击运行安装程序,按照安装向导窗口的提示进行逐项安装(开发者版本不需要安装序列号),选择“Standalone”模式安装,使得ColdFusion也做Web服务器,这样安装的好处可以快速开发,快速测试,省去了调整ColdFusion与IIS和Apache等Web服务器之间的步骤。
安装完成后,打开http://localhost:8500/CFIDE/administrator/index.cfm以打开ColdFusion的管理入口界面(默认8500端口),然后按照你安装过程中设定的密码进入管理中心。
3.转换ColdFusion MX的Web服务器端口
如果不使用默认的8500端口作为Web服务器的端口,你可以按照以下的步骤来修改ColdFusion的端口:
(1)备份jrun.xml文件,在CFusionMX\runtime\servers\Default\Server-INF路径下,打开并编辑jrun.xml文件。
(2)修改下面代码段中的端口:
保存jrun.xml,重新启动ColdFusion MX服务即可。
(二)配置ColdFusion MX
安装完ColdFusion之后,可以输入如下地址:http://localhost:8500/CFIDE/administrator/index.cfm,或者点击“开始→程序→Macromedia Coldfusion MX→Administrator”选项来打开管理界面。
正常环境下,应该有3个ColdFusion相关服务运行。这3个服务分别是:ColdFusion MX Application Server、ColdFusion MX ODBC Agent、ColdFusion MX ODBC Server。ColdFusion MX Application Server是ColdFusion主要的服务,如果这个服务在系统中没有启动,那么ColdFusion MX的页面(后缀为.cfm)将不能够被处理显示;ColdFusion MX ODBC Agent则是用来配置ColdFusion MX ODBC Server的一个服务,支持数据源的配置方式;ColdFusion MX ODBC Server则是中间层的连接器,用来连接ColdFusion和Microsoft Access以及其他ODBC数据驱动的连接。下面让我们来介绍如何在Windows操作系统中对服务进行管理。
1.管理Windows中的ColdFusion MX服务
(1)在Windows 2000/XP中管理服务:
管理服务即是进行服务的启动与停止。启动(重启)或停止ColdFusion相关服务,需要进行下列操作:
在Windows 2000/XP中,依次点击“开始→设置→控制面板→管理工具→服务”选项,在打开的“服务”对话框中,右击某一项ColdFusion服务,选择“启动”、“停止”、“暂停”命令即可。
(2)在Windows 98/Me中管理服务:
在Windows 98/Me中管理服务相对简单,包括ColdFusion MX Application Server和ColdFusion MX RDS。前者的作用是处理和运行ColdFusion页面,后者则是处理数据库与IDE开发工具的连接,如与ColdFusion Studio、HomeSite+等的连接。一旦ColdFusion的服务运行,那么在Windows 98/Me的系统栏中就会看到这两个图标,通过鼠标右击某个图标来启动和停止服务即可。
2.在Windows系统中配置Web服务器
如果不需要ColdFusion自己作为Web服务器,那么就需要用到系统内置的Web服务器,在Windows平台大多数的开发人员会想到IIS和Apache。下面的内容就将介绍如何使ColdFusion和上面两款Web服务器协同工作。
(1)配置IIS和ColdFusion的结合:
点击“开始→运行”选项,在“打开”框中输入“cmd”以进入命令提示符界面。然后输入下面的命令(保持在同一行上):
下面的命令是一个示例:
c:\cfusionmx\runtime\jre\bin\java -cp c:\cfusionmx\runtime\lib -jar c:\cfusionmx\runtime\lib\wsconfig.jar -ws IIS -site ″0″ -map .cfm,.cfc,.cfml,.jsp -v
通过上面的命令就可以让IIS映射解释ColdFusion的cfm、cfc、cfml等后缀的文件。
(2)检测IIS的配置:
在ColdFusion安装目录下,查看runtime/lib/wsconfig/文件夹中是否创建了jrun.dll文件。在每一个IIS的Web站点中,需要检测应用的映射是否添加了对cfm、cfc、cfml等文件的支持。
首先打开IIS,右击一个站点,查看它的属性,点击“主目录”选项卡,点击“配置”按钮,打开“应用程序配置”窗口,能够在映射文件的列表里找到cfm等文件的映射。
然后检测每一个Web站点中是否具有一个“JRunScripts”虚拟目录。
最后检验JRunScripts文件夹属性,看看是否指向正确的地址。如果在“虚拟目录”选项卡属性中的本地路径是CFusionMX/runtime/lib/wsconfig/1,则表示IIS与ColdFusion的配置成功了。
(3)配置Apache和ColdFusion MX:
同样地,进入cmd的命令行方式,输入下面的命令:
下面是一个示例:
c:\cfusionmx\runtime\jre\bin\java -cp c:\cfusionmx\runtime\lib -jar c:\cfusionmx\runtime\lib\wsconfig.jar -ws Apache -dir c:\Program Files\Apache Group\Apache\conf -v
然后检测下面的文件是否被创建:
检测下面的代码是否已经被添加到httpd.conf中:
# JRun Settings
LoadModule jrun_module ″c:/CFusionMX/runtime/lib/wsconfig/1/mod_jrun.so″
JRunConfig Verbose false
JRunConfig Apialloc false
JRunConfig Ssl false
JRunConfig Serverstore ″c:/CFusionMX/runtime/lib/wsconfig/1/
jrunserver.store″
JRunConfig Bootstrap 127.0.0.1:51000
#JRunConfig Errorurl
二、ColdFusion MX开发基础
创建ColdFusion页面可以有很多种方式,你可以使用最简单的工具来创建一个ColdFusion页面,例如Windows自带的记事本,但是我们推荐使用Macromedia Dreamweaver MX进行创建。
1.创建一个ColdFusion页面
一个ColdFusion页面会包含很多ColdFsion Server支持的Tag(标签)和Function(函数)。下面我们创建一个简单的页面,在这个页面中将包含标准的HTML Tag、ColdFusion Tag和ColdFusion Function。在创建这个简单的页面之前,先讲解一下页面中包含的特殊的ColdFusion Tag和Function:
Now()函数是ColdFusion中一个简单的系统函数,它会取出当前的系统时间,并将这个时间做为一个值返回给ColdFusion;DateFormat()函数则是一个用于修改日期格式的函数,在页面中的作用是用来格式化从now()函数返回的时间值;cfoutput是ColdFusion中经常用到的标签,用来输出动态的数据值,而数据值的来源可以是设定的变量,也可以是数据库变量。
打开任意一个文本编辑器,然后输入下列的程序段:
在写完上面的代码后,在Web server的wwwroot文件夹下的test文件夹中存储该文件,其文件名为cfpage.cfm。然后访问http://localhost:8500/test/cfpage.cfm来查看结果。如果结果是下面的显示方式,则表示程序正确:
Hello world,this is a ColdFusion page.
Today's date is 11-Sep-02
其中11-Sep-02 的部分则是通过ColdFusion Server解释“#DateFormat(Now())#”得到的。
分析上面的程序页面代码,我们了解到学习ColdFusion最关键的途径是掌握ColdFusion元素在Web页面中的应用。
2.掌握ColdFusion元素
ColdFusion语言──CFML由两部分组成:Tag(标签)和Function(函数)。标签让程序执行类似于访问数据库的一系列操作。函数则用来返回一定格式的数据和处理一系列操作。另外,ColdFusion还包括一个重要的元素──变量。变量的作用同其他编程语言一样,用来传递和记录数据。下面我们将详细介绍Tag和Function。
Tag是用来告知ColdFusion Server处理一系列事务操作的。这些操作包括访问数据库、读取服务器端文件、显示程序处理结果。Tag的语法具有某种固定的规则,类似于HTML语言标签。ColdFusion的标签通过开始标记和结束标记来封装程序,开始标记的写法是:
需要处理的程序
通常ColdFusion的Tag语法具备以下的特点:
(1)所有标签的开头都使用cf两个字母。
(2)每个标签必然具备开始标记。
(3)标签可以具备属性,并且属性一定具有值。
有些标签具备开始标记,但是没有结束标记,例如
很多标签具备自己的属性,其作用是用来进一步通知ColdFusion Server如何进行操作。举个例子,更新一个数据库表格,ColdFusion Server需要知道数据库和表格的名称,那么在编写代码的时候就应该向下面所写的一样:
datasource和tablename都是cfupdate标签的属性,而mydb和mytable都是属性值。
而函数则更好理解,ColdFusion中所有的函数都是为了数据而存在的。每个函数都执行着不同的处理数据的方式。应用不同的函数,你可以完成:操作数据和时间值、检查值和变量的有效性、显示和格式化信息、操作字符串数据、得到系统信息和资源、处理数学运算。
通常,一个函数在一个值上进行某个操作。而操作的值可以依附在某个变量之上,也就是函数可以对具有某个值的变量名操作,相当于变相的操作了某个值,例如,#DollarFormat(price)#,这个DollarFormat就对price变量进行了操作,把price的值进行了美元的格式处理,原本的price的值可能是9999,那么经过DollarFormat的处理,9999变成了$9,999.00输出在屏幕上。
所有的ColdFusion函数都由()符号结束,不管这个函数是否处理变量。例如:“#now()#”整个函数,如果在括号中加入一个变量,那么系统就会报错,该函数用来返回系统时间值。但是,我们可以使用函数的嵌套来完成对返回系统时间的格式化,可以使用DateFormat()函数来处理。嵌套的方式是#DateFormat(Now(),″mm/dd/yyyy″)#,输出的日期符合mm/dd/yyyy的格式。我们看下面的程序段:
[HJ*2/7]
Hello world,
Today's date is #DateFormat(Now(), ″mm/dd/yyyy″)#
输出的结果是:
Hello world,
Today's date is 11/09/2002
其中##符号的作用是至关重要的,如果我们不在DateFormat(Now(),″mm/dd/yyyy″)两边加上“##”,那么结果就会把DateFormat(Now(),″mm/dd/yyyy″)做为一个字符串显示出来,而ColdFusion服务器也就不能处理函数要求的操作。
在标签和函数之后,ColdFusion还有一个重要的元素:Variables(变量)。ColdFusion中的变量用来存储一些特定的值。你可以给某个变量制定一个值(赋值),也可以操作多个变量的值进行处理。进行变量的命名时必须具备一定的规则:
(1)大小写不敏感,可以混用大小写字母。
(2)变量名称只能包含字母、数字和下划线,且开头必须为字母。
(3)特殊字符,如@#$之类,不允许加入到变量名称中。
那么变量的值来源于从数据库检索出的信息、从Form表单输入传递的信息等。最多的情况是通过
深化一下,我们下面的示例则是通过第三个变量my_full_name来得到前两个变量的连接后的值:
如果我们输出my_full_name的结果,显示会是Ma Jian,也就是两个字符串连接起来后的值。我们访问局部变量的方式是variable.variable_name,因为用这种方式可以限制变量的作用域范围。同样,还有其他几种变量作用域类型的说明,都是在变量名前面加上一个单独的名称,例如Form、Query、URL等。
在设置完变量后,显示变量成了至关重要的一件事情。ColdFusion语法中使用
{normal html, text, and coldfusion processing instructions}
上面位于cfoutput标签中间的说明了在这个标签中可以写入的内容,包括标准的HTML代码甚至是ColdFusion的程序处理代码。
还是使用上面用过的给变量赋值的示例,增加cfoutput后的代码如下:
#my_full_name#
结果显示是Ma Jian。
3.使用CFML表达式
表达式是CFML语言中一个重要的部分。一个表达式可以由多个ColdFusion元素构成,变量、函数以及操作符都可以是表达式中的一部分。我们将会在下面的部分看到这些表达式:
#variables.my_full_name#
Dateformat(now())
My_first_name=″Ma″
构造一个表达式,里面可以有简单或者复杂的元素来组成,主要依赖于开发者实际应用的开发。那么构造表达式需要注意:字符的连贯性、##符号的正确使用、引号的正确使用。因为ColdFusion不敏感字母的大小写,也就是COLDFUSION和coldfusion是一样的意义,但是为了应用程序有一个很好的可读性,开发者应该养成一个很好的习惯,就是在一个应用或者一个程序页面中保持所有的字母写法一致,这样的程序看上去很舒服。而且,当ColdFusion程序代码和HTML页面混合使用时,我们应该更注意程序的可读性,因为大小写敏感的JavaScripts语言和不注意拼写方式的ColdFusion代码混合在一起看着非常令人头疼。#符号经常用在函数和变量两边,用来显示函数和变量的值。有了#符号,ColdFusion Server就用来处理函数和变量。下面罗列出了一些使用#符号的方法:
(1)引入#符号和cfoutput搭配显示一个变量值:
(2)如果程序中需要显示#号,需要采用另一种方式处理:
这样的结果显示为:Hello#coldfusion!
同样,使用引号也需要正确的方式。如果我们为ColdFusion中的一个变量赋值为字符串格式,那么我们需要把字符串用引号包围起来,例如:
我们看到,如果为一个变量赋值为一个数字,那么我们就不需要使用引号引用了。如果我们想在一个显示的字符串中使用有引号的情形,如显示“happy birthday!″,我们应该按照下面的方式来书写:
在ColdFusion中,还有很多用于判断和运算的操作符号,可以使用在表达式中。在很多语言中,逻辑符号都使用<、>等符号。但是,这些符号在ColdFusion中是不支持的,ColdFusion使用以下的逻辑符号来代替上述不支持的符号:
(图1)

逻辑符号用来进行逻辑判断,而数学符号用来计算,ColdFusion中支持的数学符号是:
(1)加、减、乘、除分别表示为+、-、*、/。
(2)正、负号表示为+、-。
(3)Mod是用来取得两个数相除后的余数,例如11 Mod 4的结果是3。
(4)除法取整是用\,注意不要与/相混淆,9/4的结果是2.25,而9\4的结果是2。
(5)^符号则是乘幂的符号,例如2^3的结果是8,相当于2×2×2。
4.掌握条件流程处理
我们在前面推荐大家使用Dreamweaver MX,因为这个新的开发工具在开发ColdFusion应用上的确是一把利剑。
首先建立一个ColdFusion站点,然后点击Dreamweaver中插入面板里的“CFML流程”标签,会看到如下图所示的图标:(图2)

这行图标几乎完成了ColdFusion中最重要的流程和循环处理。谈到流程,我们在学习任何一门语言的过程中第一个接触到的就是if...then...else这个流程控制语句。想必很多从事网页设计的朋友都不可避免的接触过这个逻辑。这个逻辑是简单的,但也是最常用到的。在上图中,用文字显示“if else elsif”就是使用ColdFusion中的if流程控制。点击标有文字“if”图标时,我们用源代码的方式观察页面,就会看到在光标所在处已经插入了
使用cfif标签,标准的描述应该是这样的:
你要做的事情:可以是一行输出,也可以是若干个其他的复杂的代码段。
我们经常使用一些判断条件的操作符来决定cfif的流程的走向,因为在cfif的逻辑判断中,只有真(1)和假(0)两种,如果条件为真,就做cfif标签中间嵌套的事务,如果为假,就跳出这个逻辑,去处理下一个逻辑。那么ColdFusion中的操作符非常的人性化,它使用语言表达判断,而不是符号。比如,“=”在cfif的条件操作符中要表达为“EQ”,“>”要表示为“GREATER THAN”或者“GT”。如果我们判断a是否等于B,那么在cf中要这样写:
else和elsif是嵌套在完整的cfif中的,下面这段代码是一个完整的说明:
代码段1
代码段2
代码段3
如果表达式1成立,则做代码段1,如果表达式1不成立,则判断表达式2是否成立,如果表达式2成立,则做代码段2,否则做代码段3。你可以试试下面的小代码,之后运行一下就明白结果了。
我们在控制流程的过程中,还用到了switch...case方法,在ColdFusion中同样支持。而对于Switch...case方法,使用起来也是很简单的,这里进行一下简单的讲解。点击“cfswitch”、“cfcase”、“cfdefaultcase”三个图标来完成cfswitch的操作,目的在于让开发者进行同一种表达式对于多种结果值的条件下进行流程的选择。语法操作如下:
action1
action2
...
default action
语法解释非常的简单,对于表达式expression,用cfcase的value属性来反映表达式中#var#的值,然后针对不同的值,来响应不同的动作,做不同的操作,如果没有值匹配,那么做cfdefaultcase标签中的默认动作。
5. 处理表单数据
事实上,我们编写的Web应用程序都需要通过Form表单来进行数据的收集工作,然后在记录到对应的数据库中。在ColdFusion中,也是通过两个单独的步骤来完成上述这一工作:
(1)创建一个适合的Form表单布局。
(2)通过ColdFusion程序处理值的传递和接收。
在ColdFusion中创建一个处理Form表单的页面,包含两个部分,一个Form部分,一个Action部分。Form部分包含了一些输入的元素,比如文本域、菜单栏等,用户可以在Form部分进行信息的输入,通过提交后,处理传递值的是Action部分,或者显示这些数据,或者进行数据库的操作。当用户填写完数据并提交到Action页面后,就会根据一些必要的数据有效性判断来决定是否继续做Action部分。
举个例子,我们的Form部分用一个页面表示,命名为register.cfm,Action部分用另外一个页面表示,命名为doRegister.cfm。那么在register.cfm页面中的Form表单的代码就是这样:
6.代码注解
任何一个好的开发人员,其编写的代码都具备极好的可读性。ColdFusion语法里本身就提供了程序的注释标签,它用<!---注释的部分--->来表示,在注释的部分写入任何东西,都不会被ColdFusion Server所解释,这部分的内容就是为了增强程序的可读性。
三、数据库与ColdFusion MX的交互
1.掌握数据库基本知识
任何一种Server端的脚本语言,都具有操作数据库的能力,例如ASP、PHP等,都通过不同的方式来访问和操作数据库。ColdFusion也不例外。
当前主流数据库产品使用的结构都是关系型的。而关系型数据库的特点就是通过一些特定的关系来寻找数据库中的某个信息,关系型数据库超越了以前的树型和网型的数据库,因为它的结构更趋向于表格化,更灵活,信息关系更清晰。我们可以通过数据库中的多个表格来处理数据。其中表格之间可以互相有所联系。
举个例子,我们有一个人力资源的数据库,里面有众多的表格,其中一个表格记录了所有员工的基本信息,而另一个表格记录了所有部门的基本信息。试想如何把两个表格的信息关联起来?我们可以在员工表格中添加一个DepartmentId字段,然后在部门表里也同样有一个DepartmentId字段,每个员工的基本信息表里有一个Departmentid对应到部门表里的Departmentid来关联该员工所在部门的详细信息。两个表的关联可以这样建立,同样多个表之间的联系也是如此。
数据库的操作至关重要,你在编写程序与数据库进行交互时,基本上是做以下操作:
(1)查询:语法表示为Select,用来查询数据库表中的符合查询条件的信息。
(2)数据插入:语法表示为Insert,用来从外部向数据库表中插入新的数据。
(3)数据更新:语法表示为Update,用来更新数据库表中已有的记录。
(4)数据删除:语法表示为Delete,用来删除数据库表中已有的记录。
由于篇幅有限,本文并不对如何详细使用数据库进行深入探讨,读者如果对数据库编程有兴趣,可自行参考相关针对如何使用数据库的专业书籍。
2.在ColdFusion MX中使用SQL
ColdFusion通过使用一种叫做JDBC的接口与系统的数据源(Data Source)连接。但是Macromedia通过产品把JDBC的连接方式全部封装了起来,在ColdFusion的管理界面中,面向开发者看到的是简单好用的设定界面,只需要通过几步,就可以完成与数据源的连接,而不需要通过复杂的编程来处理数据库连接。
首先,点击“开始→程序→Macromedia Coldfusion MX→Administrator”选项来打开管理页面。在确保ColdFusion的服务已启动的情况下,输入管理密码的权限登录。然后在左边的“DATA & SERVICES”选项下点击“Data Sources”项,打开“Data Sources”页面。可以看到已经定义好了的数据源。
从页面中我们可以看到数据库驱动使用的是“Microsoft Access”,其通过Windows ODBC驱动使用的是Windows的“ODBC Socket”。而最下面的两行则是表示使用Microsoft SQL Server驱动定义的数据源。设置Access数据库是一件非常容易的事情,首先你的Access数据库可以放在你本地硬盘的任何一个位置,并不是非要放在Web Server的某个目录之下。然后,你可以从“Add New Data Source”框中填写一个你需要的数据源名称,名称只要是标准的字符串就可以了,不能用数字开头。然后从“Driver”下拉选项中选择“Microsoft Access”,点击“Add”按钮,就进入了详细设置页面。
基本上,设置Access数据库不需要设置什么高级选项,但是如果有需要,比如限制对数据库的操作等,可以点击“Show Advanced Settings”按钮来进行修改。
在设置好数据源名称后,就可以通过使用ColdFusion程序通过数据源来访问和操作数据库了。以ColdFusion自带的cfsnippets的Access数据库为例,可以对其进行的操作包括三个主要的部分:
(1)cfquery:传递信息到数据库,包括检索数据库和其他操作。
(2)cfinsert:特有的数据库插入操作,简单易行。
(3)cfupdate:特有的数据库更新操作。
基本上大部分的ColdFusion程序对数据库的操作都不可避免的用到上述的三个部分,但是如果你再配合使用Macromedia最新的开发工具Dreamweaver MX,开发数据库的应用程序可以达到事半功倍的效果。
3.在Dreamweaver MX中配置ColdFusion开发环境
以前设计网页都是使用Dreamweaver ,而做程序与网页结合的开发,又需要使用UltraDev。现在我们可以使用Dreamweaver MX来设计和开发网页,因为它集成了Dreamweaver、UltraDev、ColdFusion、Homesite四款产品的功能,所以作为开发者可以在Dreamweaver MX里开发ColdFusion程序了。
我们在Dreamweaver MX里设置一个ColdFusion环境,需要经过以下几个步骤:
(1)在Dreamweaver MX中点击“文件→站点”面板标签。
(2)点击“站点→新建站点”命令,会看到弹出的站点设置窗口,在这里为站点起个名字,例如mysite。点击“下一步”按钮。
(3)在“哪种服务器技术”下拉列表中选择“ColdFusion”选项,然后点击“下一步”按钮。
(4)选择“在本地进行编辑和测试”选项,然后设置好自己站点所在的物理路径,点击“下一步”按钮。
(5)输入正确的http访问路径,如果你是使用ColdFusion单独模式,就在URL中确认一下端口号即可。
(6)通过正确的测试URL之后,我们只需要在点击“下一步”按钮,选择不需要使用远程服务器即可。
四、建立ColdFusion MX应用程序
我们在前面已谈到使用ColdFusion MX操作数据库时,都是使用cfquery、 cfinsert和cfupdate,那么这里就介绍把如何使用这三个重要的标签进行ColdFusion应用开发。
1.建立一个ColdFusion小应用程序
我们先使用cfquery标签开发一个简单的数据库应用程序,程序的开发工具使用Dreamweaver MX。在设置好一个ColdFusion站点之后,在“插入”面板中会出现“CFML基础”标签,点击“cfquery”按钮即可打开相应的对话框。
在弹出的对话框中详细设定cfquery的各个类型名称和属性名称。“常规”是我们最常用到的设置,“连接”则是进行相关的连接设置,一般情况下,“连接”部分属性直接可以通过 ColdFusion Administrator页面中的“Data Source”设置来确定。“持久性查询”表示设置一个持续的可以从缓存里调用的查询。
在使用cfquery时,“查询名称”属性是必须要有的,就是给你定义的cfquery一个名字,以后其他地方要调用的时候就会用到这个名称属性值找到相对的查询。其他的属性则不是必须具备的属性。
让我们来看一段简单的cfquery的代码:
SELECT *
FROM Employees
ORDER BY Emp_ID
#Emp_ID# | #FirstName# | #LastName# | #EMail# | #Phone# | #Department#
其结果居然是令人惊奇的循环输出!数数ColdFusion代码,只有几行,而ASP、JSP、PHP要完成同样的效果,需要写几行代码呢?用过的开发人员可能不用比较就知道优势了。
2.应用程序的开发深入
我们可以构造一个更加复杂的数据库应用。是把HTML代码和ColdFusion代码结合起来,让输出的结果打印显示在HTML构成的表格单元中。我们来看下面这段代码:
SELECT *
FROM Employees
WHERE LastName = ′Peterson′
#queryname.LastName#
#queryname.Department#
#queryname.recordcount#
#queryname.currentrow#
#queryname.columnlist#
SELECT *
FROM Employees
| #LastName# | #FirstName# | #Department# |
这段代码实际上与我们的第一个应用程序相差不多,但是为了达到动态程序的输出结果和静态HTML页面标签结合起来的效果,我们在
cfquery除了能够做查询以外,还能够做数据库的插入和其他操作,各位来看下面这段代码:
Insert Into Employees(FirstName,lastname,email,phone,department)
Values(′Mj′,′king′,′mjking@263.net′,′1234567′,′Technical′)
Select MAX(Emp_id) as number_id
From Employees
插入数据成功!
你新插入的ID是:
上面的程序段应用了两个cfquery的标签的组合,实现了数据插入和最新插入的员工ID的查询。其中第一个cfquery插入了一组记录到Employees的表里,除了没有处理emp_id默认的员工ID的自增主键之外,其他的几个字段都对应给予了插入。在插入之后,第二个cfquery做的是将刚刚插入的记录的emp_id给查询出来。比如我们要开发一个内部网的员工模块,有可能在做了新员工的输入之后,马上系统要告知该员工的工号,就可以采用这种方式。但是会有一个问题,如果你在请求服务器做相应操作的同时,有另外一个人正好刚刚做完,正要查询出他的ID,这样有可能查出的ID是你的,因为这时,系统有可能响应给对方你刚做完Insert的记录的emp_id的值。为了避免这样的现象,我们在两个cfquery之外使用了Cftransaction这个标签。
Cftransaction是一个协调事务处理的标签,它把处理不同事务的作为一个整体,如果其中的某一个操作不成功,那么所有的操作都会被服务器还原,有这样的功能真的是太好了。
3.数据库的更新和维护
Cfinsert和cfupdate是ColdFusion中两个常用的标签。
点击“Cfinsert”按钮,打开相关的对话框。cfinsert经常用到的属性是“数据源”、“表格类型”和“表单字段”三个属性,其中“数据源”是你在ColdFusion Administrator数据源设定中设置好的名称,“表格类型”是要更新的表,“表单字段”是和数据库表中字段对应名称一致的表单控件名称(注意必须一致才行)。我们看下面的列子:
<!--- 下面的代码使用了cfinsert更新了数据表格,没有使用cfquery--->
<!--- 如果表单有提交的动作,那么开始处理cfinsert动作--->
formFields = ″Email,FromUser,Subject,MessText,Posted″>
你的记录已经被提交。
<!--- 使用cfquery显示插入数据 --->
SELECT
CommentID, EMail, FromUser, Subject, CommtType, MessText, Posted, Processed
FROM
Comments
| From User | Subject | Comment Type | Message | Date Posted |
| #FromUser# | #Subject# | #CommtType# | #Left(MessText, 125)# | #Posted# |
那么我们执行的结果可以看到浏览器显示了我们刚刚输入的信息,这里我们不给出截图,请各位开发者试着自行处理一下上面的程序,看看运行的结果。cfinsert简单易用,但是它是依靠牺牲一定的性能来转换的,所以,在做大容量的数据插入工作的时候,推荐使用cfquery而不是cfinsert,cfupdate也是如此。
4.通过URL参数传递和cfupdate结合更新数据库数据
接下来再看一看cfupdate如何使用。点击“cfupdate”按钮,打开相关的对话框。你可能看到cfupdate的窗口设置和cfinsert的很类似,是的,这两个标签都是对于Form表单进行专属操作的标签。对于cfupdate的使用方法,作者这里不想多费笔墨,它的使用和cfinsert几乎是一样的,同样,我们用一段程序来看看cfupdate的作用。
程序使用了官方的一段脚本
<!--- 使用cfupdate更新数据库 --->
<!--- 检测course_ID这个值,如果存在则更新数据记录--->
<!--- 检测Course_ID是不是一个数字 --->
<!---做更新--->
formfields=″Descript, Course_ID″>
<!--- 使用一个query来查看通过url传过来的course_ID是否在对应的记录上做了更新,各位开发人员可以使用这种查询的技巧来验证数据库是否更新,而不用打开数据库去查看--->
SELECT Number, Course_ID, Descript
FROM Courses
WHERE Course_ID = #Trim(url.Course_ID)#
ORDER by Number
cfupdate更新实例
课程号:
this Entry">
上面这段程序是官方的一段标准的使用cfupdate的代码,其中包括了检测从URL传递过来的参数,以及对传递参数course_ID所在的数据库的记录进行更新的操作。其中,第一次访问不带参数而显示一个记录级的方法都非常的实用,可以用在实际的开发当中。
五、ColdFusion MX组件
这个部分的内容涉及到了ColdFusion MX的最新功能。之所以要介绍最新的功能,是因为业界的程序开发都在向组件过渡。微软的COM+和J2EE的EJB都应该算作组件的开发范畴。我们这篇文章的最后一部分将简单介绍ColdFusion MX的组件开发。
1. 组件简介
很多开发人员可能对ASP都比较熟悉,ASP可以和COM、COM+结合起来应用,而COM就是基于微软的一种组件技术。说这种技术高深也好,易用也罢,其实组件开发技术就是提供应用程序一组高可用性的代码。什么是可用性?在英文里就是reuse。专业一点就是代码重用。
CFC也不例外,通过简单的将许多不同功能的cfml代码段进行一定逻辑的组合,并赋予不同的访问方式,就构成了CFC。那么CFC相比对于以前的CF的自定义标签又有什么优势和不同?CFC最大的优点就是不包含表现性质的代码,也就是说,一个CFC具有某种纯粹的逻辑,然后通过不同的调用方式和附加性的修饰标签来呈现给外部不同的结果,是完全符合WEB技术开发的需求,那就是表现与逻辑分离。而custom tag则不是这样,它是构造一个Function,可以把表现与逻辑混在一起,通过其他cfm页面的操作来呈现结果。还有一个不同是CFC是一种对象,具有不同的访问方式,也具有了method的入口操作方式,也具有了参数控制方式。
如果上面这部分解释理解比较吃力的话,那么我们用一个经常开发的模块来说明问题。我们经常在开发互动性网站的时候,经常会开发用户注册和验证模块,按照一般的开发方式,会有很多个页面,比如login.cfm、checkuser.cfm等页面来进行用户的登录(注册)操作。我们的逻辑代码会写在所有的需要处理的后台文件中。那么会出现何种烦杂的现象?用
定义一个user object,把所有对于用户的通用操作封装在这个object里;
定义对于user object的操作方法,例如add()、delete()、update()、get()等一些通用的操作方法,同样也可以再增加一些,例如verifyPassword()、GetEmail()等;
对于不同用户传递不同的参数给特定的方法来实现相应功能;
好了,现在大家已经可以分辨出使用CFC的优点:可用性强,开发效率高,扩展性强。
2. 简单组件编写
用什么来构造一个CFC呢?很复杂?令人头疼?都不是,用基本的cfml语法知识,外加几个特定的构造CFC的tag就可以实现了。那么构造CFC的几个tag如下:
*
*
*
*
我们现在构造一个非常简单的cfc,看下面的代码:
<!--- 浏览器判断组件 --->
<!---浏览器是否为IE?--->
<!--- 初始化变量 --->
<!--- 寻找IE的标识 --->
<!--- 得到标识--->
<!--- 返回结果 --->
文件存储成为browser.cfc,我们大家可以看到,所有的cf代码在
在构造好browser.cfc这个Component之后,如何应用这个browser.cfc呢?在存放browser.cfc的目录下再生成一个test.cfm文件,这个文件中的代码使用下面的编写方式:
<!--- 调用browse.cfc --->
RETURNVARIABLE="result_ie">
<!--- 显示结果 --->
Your browser is:
IE: #YesNoFormat(result_ie)#
之后执行test.cfm这个文件,得到的结果是:
Your browser is:
IE: Yes
Test.cfm这个文件使用了
3. 组件功能扩展
上面的组件实现了一个非常简单的功能,我们现在把该组件的功能进行一次扩展。看看下面的代码:
<!---浏览器是否为IE? --->
HINT="Is browser Microsoft IE">
<!---如果没有浏览器id,那么就使用当前值 --->
DEFAULT="#CGI.HTTP_USER_AGENT#"
HINT="Browser ID, defaults to CGI ID">
<!--- 初始化变量 --->
<!--- 寻找IE标识 --->
<!--- 得到标识 --->
<!---返回结果 --->
<!--- 是否是Nescape? --->
HINT="Is browser Netscape">
<!--- 如果没有id,那么使用当前值 --->
DEFAULT="#CGI.HTTP_USER_AGENT#"
HINT="Browser ID, defaults to CGI ID">
<!--- 初始化变量 --->
<!--- 寻找是NE的标识而不是IE的标识--->
<!--- 得到标识 --->
<!--- 返回结果--->
<!--- 是否浏览器Dreamweaver支持? --->
HINT="Is browser Dreamweaver">
<!---如果没有id,那么使用当前值--->
DEFAULT="#CGI.HTTP_USER_AGENT#"
HINT="Browser ID, defaults to CGI ID">
<!--- 初始化变量 --->
<!--- 寻找DW标识 --->
<!--- 得到标识 --->
<!--- 返回结果 --->
<!--- Identify a browser
Returns: IE - Internet Explorer
NS ?Netscape
DW ?Dreamweaver
Empty string is unknown
--->
HINT="Identify a browser">
<!---如果没有id,那么使用当前值--->
DEFAULT="#CGI.HTTP_USER_AGENT#"
HINT="Browser ID, defaults to CGI ID">
<!--- 初始化变量 --->
<!--- 返回结果--->
上面的第2个CFC复杂了一些,我们覆盖存储成为browser.cfc,这个cfc中包含了4个Function(method):
IsIE,测试浏览器是否为MS的浏览器;IsNescape测试是否是Nescape(mozilla)浏览器;IsDreamweaver测试是否内嵌Dreamweaver;Identify返回所有的结果,如果以上3种都不是,返回空串。程序还为CFFunction添加了两个新的属性:ReturnType是对返回值的一个类型确认(validate),如果不是ReturnType所描述的类型,将会显示一个错误。另外,我们的Function中还添加了
<!--- 检查IE --->
RETURNVARIABLE="result_ie">
<!--- 检查NE --->
RETURNVARIABLE="result_ns">
<!--- 检查DW --->
RETURNVARIABLE="result_dw">
<!--- 鉴别浏览器 --->
RETURNVARIABLE="result_id">
<!--- 显示 --->
Your browser is:
IE: #YesNoFormat(result_ie)#
NS: #YesNoFormat(result_ns)#
DW: #YesNoFormat(result_dw)#
ID: #result_id#
显示的结果为:
Your browser is:
IE: Yes
NS: No
DW: No
ID: IE
4. 组件的服务器端内视
我们在写好一个CFC(组件)之后,我们可以通过访问URL的方式来内视组件的结构,其中包括组件的方法,成员等等。我们在浏览器端输入:
http://localhost:8500/
上面的地址在输入之后,会先看到cf administrator的界面,输入登录的密码后,系统会报告一个browser.cfc的详细信息给开发人员,截图如下:(图3)

上图详细的介绍了这个cfc的结构和详细信息,想要看到这个前提是必须有ColdfusionMX server administrator的密码权限!
5.组件的Dreamweaver MX端的使用
通过Dreamweaver来import这个cfc,从而可以看到Dreamweaver会自动的识别出这个CFC了:(图4)

然后我们从组件这个面板里直接把所需要调用的cfc method直接drap & drop到右边的编程区域里去,就可以进行组件的操作。
通过上文的阅读,相信你对ColdFusion MX能有一个很清楚的认识,限于篇幅本文不能对ColdFusion MX开发进行深入的探讨,不过你可以登录到http://www.cfwindow.net/cn/main.cfm进行深入的学习。