第三期:ColdFusionMX編程入門
序言
上一期我們講解了ColdFusionMX的基本管理操作,并且熟悉了ColdFusionMX的管理界面布局,而且上一期最后我們演示了兩個非常短小的coldfusion程序,這一期會詳細講解coldfusion的入門編程,其中包括在asp中對于初學者而言非常令人頭疼的數(shù)據(jù)庫操作。
在每次開始進入正題之前,每一期的序言內(nèi)容都會為大家介紹一些關(guān)于ColdFusion發(fā)展或者其他一些具有價值的小知識,第一期為大家介紹了Macromedia MX產(chǎn)品的策略和coldfusionMX在該產(chǎn)品策略中的位置,而第二期則為大家介紹了ColdfusionMX的版本差異,那么這一期的序言讓我們了解一些什么呢?關(guān)于ColdFusion的發(fā)展。
1995年是個值得紀念的年代,因為發(fā)生在那個年月的事情已經(jīng)是上個世紀的事情了,而且不單單是這么多。如果老資歷的開發(fā)人員回憶一下的話,那個時候的web是html和cgi稱雄的天下,靜態(tài)頁面是html,而動態(tài)程序則90%以上是cgi,在我印象中便是如此。美國的一對兄弟allire,在為自己的客戶解決數(shù)據(jù)庫訪問的問題時,感覺到了cgi程序在編寫和維護上的難度是不能容忍的困難。于是,具有計算機天賦的Jeremy Allire便在1995年編寫了一種快速響應(yīng)且易于編寫的動態(tài)腳本語言,叫做coldfusion,一經(jīng)推出,便震撼整個網(wǎng)絡(luò)行業(yè)。之后,兄弟倆看到了coldfusion的發(fā)展前途,便成立了Allire公司(后來被macromedia收購)。之后的幾年,全球500強中的一半都采用了coldfusion來解決公司不同情況的問題。通過不斷的版本修改和開發(fā)者的不斷壯大,Coldfusion后來發(fā)展成為業(yè)界知名的企業(yè)級解決方案的開發(fā)首選,F(xiàn)在,為了產(chǎn)品線的統(tǒng)一,為了工業(yè)標準的統(tǒng)一,為了完全兼容Java平臺,Macromedia發(fā)布了ColdfusionMX。而眾位以前經(jīng)?吹降Neo這個詞則是macromedia對于使用新一代coldfusion開發(fā)行業(yè)解決方案的編碼名稱。
如果大家看到neo這個詞,就不難理解Macromedia對于coldfusionMX的殷切期望,大名鼎鼎的電影《黑客帝國》中的男主人公的名字也叫做Neo。以上的相似之處只是作者本人的推測而已了。好,不多聊了,進入我們這一期的正題。
第一部分 ColdFusionMX Basic tag編程
作者本人看過很多關(guān)于中英文的教材,認為最有效的一種方式就是參照實例的代碼段來配合講解的過程最為優(yōu)秀。所以,對于每一個coldfuiosn的tag,作者不打算一一贅述,各位朋友可以通過查看一些reference來了解所有的tag功能和語法。關(guān)于標準的文檔,請在安裝coldfusionmx之后參考administrator管理界面里包含的官方文檔。
那么作者采用一種什么樣的方式來幫助想學習ColdFusionMX的朋友快速的進入動手編寫代碼的境界呢?如果是采用把所有的Tag全部都按照順序講解,那么會造成學習者興趣不同程度的下降。各位可能在前面的教程中知道了Macromedia MX中DreamweaverMX和ColdFusionMX之間的關(guān)系。DreamweaverMX的推出就是為開發(fā)ColdFusionMX的應(yīng)用提供一個完善的工具,因為它集成了以前ColdFusion Studio、UltraDev、Dreamweaver、HomeSite四款產(chǎn)品的主要功能于一身,所以,只用DreamweaverMX來制作靜態(tài)頁面,可以說只用到了不到三分之一的功能。那么,本系列的教程就從DreamweaverMX中集成的開發(fā)ColdfusionMX程序功能入手,讓大家先了解如何在DreamweaverMX中開發(fā)ColdFusionMX程序,然后再提供給大家使用ColdFusionMX開發(fā)高級應(yīng)用的技巧。
打開DreamweaverMX的界面可以看到處于右上方快捷Object面板,而其中會有如下三個Object面板是CFML Basic、CFML FLOW、CFML Advanced,而本教程的講解就從CFML Basic開始。
CFML Basic被選中后會出現(xiàn)如下的圖標排列:
那么從左到右的圖標依次表示CfServerVariables、CFQuery、CFOutput、CFInsert、CFUpdate、CFInclude、CFLocation、CFSet、CFParam、注釋、變量符號、CFScript。我們的教程也從CFSet開始。因為它是ColdFusionMX中最簡單也是最重要的一個Tag。
單擊 圖標,會出現(xiàn)如下代碼段:<cfset >,這個cfset的標簽就是Coldfusion中設(shè)置變量的特有標簽。在ColdFusion中,每個特有的由CFMX Server來負責解釋的Tag都用cf開頭,如cfset、cfquery等。而cfset的標準語法格式是:
等號左邊表示變量名稱,等號右邊是變量值。很簡單,如果你要創(chuàng)建一個叫做var1的變量,賦值為hello,friend!,那么你需要這樣寫出你的程序代碼:
<cfset var1="Hello,friend!">
那么你要設(shè)置中文,就這樣寫好了:
<cfset var1="你好,朋友!">
那么,當你為你的變量設(shè)置一個數(shù)值時,就不需要在變量值的兩側(cè)加上雙引號了。比如:
<cfset PI=3.1415926>。另外,cfset這個tag的作用還可以進行數(shù)值的運算和變量的動態(tài)轉(zhuǎn)移。進行數(shù)值計算和變量跳轉(zhuǎn)的編碼方式也非常的簡單,請看下面的代碼片斷:
<cfset PI=3.1415926>
<cfset number_1=PI*10>
<cfset number_2=number_1>
我想有一點點程序經(jīng)驗的朋友對上面代碼的理解都應(yīng)該不成問題,它執(zhí)行了一個PI值的賦值,以及對PI變量的乘法,結(jié)果賦值給number_1,最后,number_1變量的結(jié)果指向變量number_2。
另外,Cfset還有另外一種用法,讓我們來看看:
<cfset var1="Test">
<cfset "#var1#"="hello!">
<cfoutput>#test#</cfoutput>
結(jié)果輸出是什么?答案是:hello!這個字符串。原因很簡單,hello!這個字符串付給了一個叫做"#var1#"的變量,這個變量等價于test,也就是test這個字符串自動變?yōu)橐粋變量名稱。
單擊 圖標,嘆號表示的tag是cfparam,這個tag的基本功能和cfset是一致的,也是為變量賦值,那么它與cfset有什么區(qū)別呢?區(qū)別就是檢查一個變量是否存在,若存在,則給予一個默認值?纯袋c擊它以后出現(xiàn)的屬性設(shè)置窗口:
在上圖中可以看到cfparam具有三個屬性,那就是name、Default、Type,name表示變量的名稱,Default表示變量的初始值,默認為空,Type表示變量的類型,CFMX為cfparam設(shè)置了如下類型:
變量類型已經(jīng)涵蓋了我們用ColdFusion進行編碼是可能用到的變量類型。Cfparam這個Tag的信息可以點擊屬性設(shè)置窗口中的tag info來了解詳細的使用方法,以后其他的tag也可以在屬性窗口中通過點擊tag info來了解。那么,設(shè)置完cfparam之后,出現(xiàn)的代碼行如下:
<cfparam name="URL.id" default="1" type="any">
這行代碼等價于:
<cfif not definede(URL.id)>
<cfset URL.id=1>
</cfif>
判斷URL.id這個變量是否存在,如果不存在,那么給一個值1。這個功能經(jīng)常在開發(fā)注冊和驗證的模塊中配合cfform這個tag使用,后面的教程就會看到。
單擊 圖標,就是在你的cfm頁面里面加入coldfusion特有的注釋符號:<!--- content --->,例如:
<!---
設(shè)置一個變量名字叫做var_hello
--->
上面這段代碼就在.cfm被cf服務(wù)器解釋的過程中被忽略,良好的注釋習慣是開發(fā)大規(guī)模復(fù)雜應(yīng)用的必要,而且也是一個優(yōu)秀的開發(fā)者應(yīng)該具備的素質(zhì)。
單擊 圖標,會出現(xiàn)以后大家經(jīng)常在.cfm文件中遇到的##標記,那么它用來顯示coldfusion中的變量結(jié)果,就像前面用到的程序:
<cfset var1="Test">
<cfoutput>#var1#</cfoutput>
就是將var1變量的值顯示出來。
單擊 圖標,則會在頁面中添加特有的coldfusion Server variable。DreamweaverMX中彈出的界面是:
而CFMX支持的Server variable有以下種類:
下面就把Server variables中經(jīng)常用到的變量做簡要介紹。Server variables在coldfusion中被成為CGI variables。它使用了Server端的通用網(wǎng)關(guān)接口變量。而CGI是很普遍的一種腳本方式,ColdfusionMX也支持CGI-Bin特有的一些變量格式。
HTTP_REFERER:判斷瀏覽者來自哪個URL
HTTP_USER_AGENT:判斷使用的瀏覽器類型,目前流行的幾款瀏覽器都可以識別。
QUERY_STRING:就是.cfm?后面參數(shù)附帶的信息。
REMOTE_ADDR:瀏覽者的IP地址
其他的變量各位可以通過查看官方提供的Reference來了解,這里就不再贅述。
讓我們來看這段代碼:
<cfoutput>
你好!
您的瀏覽器是#CGI.HTTP_USER_AGENT#!
</cfoutput>
結(jié)果顯示是作者本人的瀏覽器版本:
您的瀏覽器是Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)!
單擊 圖標,則是使用coldfusion中最為常用的tag:cfquery。這個標簽用來完成數(shù)據(jù)庫查詢。
在開始說明數(shù)據(jù)庫查詢之前,作者本人對廣大開發(fā)者提一個醒,希望各位用coldfusionmx作開發(fā)的時候,盡量避免使用access和mysql,因為這兩款數(shù)據(jù)庫與coldfusionmx進行信息交互會出現(xiàn)或多或少的中文問題,希望各位使用SQL Server數(shù)據(jù)庫或者oracle。當然使用access或者mysql進行英文處理當然沒有問題。早期的coldfusion5在處理數(shù)據(jù)庫上,access等小型數(shù)據(jù)庫不存在中文問題,可能由于coldfusion核心代碼被重新編寫,jdbc對應(yīng)的中文問題就出來了,但是相信macromedia不久就會修正這個問題。作者本人在使用cfquery的時候,出于講解方便,會使用access數(shù)據(jù)庫,但是后續(xù)的用到中文更改數(shù)據(jù)庫記錄的操作都會轉(zhuǎn)向SqlServer,請大家注意。
如何解決中文問題,請各位參考這里的信息:
http://www.flashempire.net/showthread.php?s=1871e826d3945c355df09e5ef8190a6e&threadid=120844
點擊cfquery標簽之后dwmx出現(xiàn)的界面是這樣的:
上圖就是關(guān)于設(shè)置cfquery的窗口,圖形左邊的紅色矩形內(nèi)的三個部分可以對cfquery進行不同細節(jié)程度的設(shè)置,general是我們最長用到的設(shè)置,connection則是連接設(shè)置,一般connection的部分屬性直接就可以通過cfmx administrator中的datasource設(shè)定來確定了。Persistent Queries表示設(shè)定一個持續(xù)的可以從緩存里調(diào)用的查詢。下面是cfquery的標準語法:
其中,name屬性是必須要有的,就是給你定義的cfquery一個名字,以后其他地方要調(diào)用的時候就會用到這個name屬性值找到相對的query。Datasource則是該查詢來自的數(shù)據(jù)源的名稱,而數(shù)據(jù)源的名稱則是通過設(shè)定cfmx administrator的。這里有必要插入一段關(guān)于設(shè)置數(shù)據(jù)源的方法。打開cfmx administrator管理界面,點擊Data & Services里的data Sources,然后看到管理界面的右側(cè)區(qū)域出現(xiàn)cfmx administrator已經(jīng)定義好了的數(shù)據(jù)源,截圖如下:
上圖表示1的部分數(shù)據(jù)庫driver用的是microsoft access,而被2框選的部分則是兩個透過windows odbc設(shè)置的數(shù)據(jù)源名稱,數(shù)據(jù)驅(qū)動用的是windows的odbc socket。而被3框選中的區(qū)域則是使用Microsoft SQL Server驅(qū)動定義的數(shù)據(jù)源。設(shè)置access數(shù)據(jù)庫是一件非常容易的事情,首先你的access數(shù)據(jù)庫可以放在你本地硬盤的任何一個位置,并不是非要放在webserver的某個目錄之下,然后,從上圖中,可以從add new data source中填寫一個你想要的數(shù)據(jù)源名稱,名稱只要是標準的字符串就可以了,不能用數(shù)字開頭。然后,從Driver的下拉選項中,選擇Microsoft access這個驅(qū)動,然后點擊add,就進入了詳細設(shè)置頁面:
基本上,設(shè)置access數(shù)據(jù)庫不需要設(shè)置什么高級選項,但是如果有需要,比如限制對數(shù)據(jù)庫的操作等等,可以點擊show advanced settings來修改。上圖中的cfsnippets就是安裝完coldfusionmx后的默認案例數(shù)據(jù)庫,就像裝完access這個軟件后,自動就有northwind這個庫一樣。下面的cfquery例子我們就以cfsnippets為主。而sql server只是多加了幾步的設(shè)置,首先,在設(shè)置sqlserver的數(shù)據(jù)源時要填入sql server的database name,其次,要輸入sql server所在的ip,本機就用localhost就可以,最重要的是,必須輸入一個能夠有訪問該數(shù)據(jù)庫的權(quán)限的用戶名和密碼,作者這里推薦在sql server里設(shè)置好特定的用戶名和密碼,而不是使用默認的sa帳號。
回到cfquery屬性說明,其他的屬性則不是必須具備的屬性。關(guān)于屬性的說明可以參考coldfusionMx自帶的reference 手冊。
讓我們來看一段簡單的cfquery的代碼:
<CFQUERY NAME="test" DATASOURCE="cfsnippets">
SELECT *
FROM Employees
ORDER BY Emp_ID
</CFQUERY>
<cfoutput query="test">
#Emp_ID# | #FirstName# | #LastName# | #EMail# | #Phone# | #Department# <br>
</cfoutput>
結(jié)果是什么?看看下面的截圖:
令人驚奇的是可以循環(huán)輸出。!數(shù)數(shù)cf代碼,只有幾行,而asp,jsp,php要完成同樣的效果,需要寫幾行代碼呢?想必用過的人都知道。
再來看一個復(fù)雜點的cfquery代碼:
<cfquery name="queryname" datasource="cfsnippets">
SELECT *
FROM Employees
WHERE LastName = 'Peterson'
</cfquery>
<cfoutput>#queryname.FirstName# <br>
#queryname.LastName# <br>
#queryname.Department# <br>
#queryname.recordcount# <br>
#queryname.currentrow# <br>
#queryname.columnlist#
</cfoutput>
<cfquery Name="queryname" datasource="cfsnippets">
SELECT *
FROM Employees
</cfquery>
<table border="1">
<tr>
<td> Last Name </td>
<td> First Name </td>
<td> Department </td>
</tr>
<cfoutput query="queryname">
<tr>
<td>#LastName#</td>
<td>#FirstName#</td>
<td>#Department#</td>
</tr>
</cfoutput>
</table>
那么結(jié)果如下截圖:
我們首先是select出一段關(guān)于perterson這個雇員的相關(guān)信息,然后再列出所有雇員的信息。其次是用queryname.recordcount查看符合的記錄數(shù),用queryname.currentrow查看當前的記錄是在數(shù)據(jù)庫中的第幾條,用queryname.columnlist表示數(shù)據(jù)庫的列的一個排序。最后我們還看到,幾行的代碼讓整個雇員表中的數(shù)據(jù)在html table中循環(huán)輸出,是不是各位已經(jīng)感覺到coldfusion的簡單快捷了?以后的教程中還有更令人吃驚的功能,包括內(nèi)置的全文檢索引擎,Generator的Data Driven flash(image),cf component和web services等功能的講解。
下一期的教程接著為大家講解cf basic tag編程,包括操作數(shù)據(jù)庫的cfinsert,、cfupdate;cfinclude和cflocation標簽的使用,還要講解如何編寫coldfusion founction。好了,各位,咱們下一期見。
第二部分 論壇coldfusion探討
如何得到開發(fā)者版本的ColdfusionMX
http://www.flashempire.net/showthread.php?s=783cb977b6551d6a2dc52c87555e0208&threadid=116459
ColdFusionMX第一個安全漏洞
http://www.flashempire.net/showthread.php?s=783cb977b6551d6a2dc52c87555e0208&threadid=121286
ColdFusionMX企業(yè)版標準文檔
http://www.flashempire.net/showthread.php?s=783cb977b6551d6a2dc52c87555e0208&threadid=121621
Coldfusino MX 學習心得
http://www.flashempire.net/showthread.php?s=783cb977b6551d6a2dc52c87555e0208&threadid=120616
Cfmx 中文問題解決方法
http://www.flashempire.net/showthread.php?s=783cb977b6551d6a2dc52c87555e0208&threadid=120844
如何改變ColdFusionMX的端口
http://www.flashempire.net/showthread.php?s=783cb977b6551d6a2dc52c87555e0208&threadid=118258
第三部分 資源列表
相關(guān)于Macromedia MX系列知識的了解請訪問:
http://www.macromedia.com/
http://www.macromediachina.com/
http://www.flashempire.net/
http://m.95time.cn/
關(guān)于Macromedia 產(chǎn)品策略分析中文文章請訪問:
http://61.156.17.126/efe_news/newsread.php?id=123
下載Macromedia MX系列產(chǎn)品請訪問:
http://www.macromedia.com/software/trial_download/
* Macromedia ColdFusion MX和JRun4可以免費在官方網(wǎng)站得到開發(fā)者版本,同商業(yè)版本相比,只是限制了開發(fā)者版本的ip訪問限制,服務(wù)器高級報表工具,服務(wù)器均衡負載功能等一些高級功能的使用。
注釋:
JRun4、ColdFusion MX、Flash MX、Dreamweaver MX、Fireworks MX都是Macromedia公司的注冊產(chǎn)品。
出處:藍色理想
責任編輯:藍色
上一頁 第二期:基礎(chǔ)管理操作以及入門程序 下一頁 第四期:ColdFusionMX Basic Tag編程
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|