擁抱ColdFusion MX « 張偉雄的 Blog…….

擁抱ColdFusion MX « 張偉雄的 Blog…….
Macromedia 解決方案拉攏ASP、PHP、JSP 族群,擁抱ColdFusion MX(上)

本篇將說明ASP、PHP、JSP 與CFML(ColdFusion Makeup Language)語法上差異性外,另外也說明利用ColdFusion 來開發網頁應用程式的優勢。

文:劉仲濱

對於開發動態網頁的人來說,不管您是使用ASP、PHP、JSP 甚至是ASP.NET 等之伺服端語言,不可否定的是,其不管是價格、資源性、支援性、佔有率等等,或是您早己習慣於某一項語言,若要再請您轉換使用其他語言來開發,時常會感到沒這樣的迫切需要,甚至是浪費時間。

然而今天所介紹的Macromedia ColdFusion MX,主要優點是能夠替您減少並大大縮短開發時間,易於維護、易於學習、系統支援性高、移植性亦高;最重要的是,對於現己持有某項伺服端語言技術的人來說,您會發覺您更容易踏進這塊園地,因為ColdFusion 可以說是比前述的語言還更容易學,不僅能在極短的時間內將您學過的技巧帶進到ColdFusion,更能使您原本要花幾個星期才能開發完的系統,轉眼間於幾個小時內就開發完成,讓您有更多餘的時間去處理系統其他的工作。

本篇將說明ASP、PHP、JSP 與CFML(ColdFusion Makeup Language)語法上差異性外,另外也說明利用ColdFusion 來開發網頁應用程式的優勢。

簡介ColdFusion 原是由美國一家叫ALLAIRE 公司所開發出來的,該公司是在1995 年由J.J. Allaire 與Jeremy Allaire 二位天才型兄弟所創辦,當時可說是最成功最年青的典型網際網路公司創辦人,專為企業公司解決網站上的動態網頁開發工具,並且於2001 年1 月與Macromedia 公司合併,雖然公司名稱以「Macromedia」為主,但是Jeremy Allaire,仍舊擔任Macromedia 的技術執行長(CTO)。合併時曾有提到未來打算,第一將ColdFusion 發展成J2EE 標準平台,並且加入工業標準XML、JSP 等相容技術,使其讓業界更為親近,其二,開發一連串的網路型服務,並強調元件重複使用與程式邏輯之特性,運行於J2EE 與.NET 平台。

現今真的實現了,ColdFusion MX6.1 版後己將原先由C++撰寫的架構,改為以JavaBase 為基礎核心,成為真正的業界J2EE 平台之標準,不祗是效率有效提高了,也是支援各項跨平台之應用伺服器(如WebSphere。從ASP 移轉到ColdFusion雖然說二者間的語法差異很大,但是若你是ASP 開發者,你的技術早己具備轉型到ColdFusion 的條件了,非但如此,更能使你的產能提高,效果加倍。

ASP 主要是以VBScript 與JScript 二個語言為主,配合ASP 內建的五大物件,但是當您在使用其物件時,通常需要先建立再使用其物件,最後還要關閉他,以免佔住系統資源,造成資源浪費,甚至當掉其應用程式。以ColdFusion 來說,他是使用標籤Tag 為主,從ASP 所做的建立物件到關閉等功能,ColdFusion Server 全部自動幫您處理,讓您不需在程式碼作這些動作,我們以ASP 建立Recordset 為例子,如下:

<%set rsGetOrders = Server.CreateObject(『ADODB.Recordset』)rsGetOrders.ActiveConnection = 『northwind』rsGetOrders.Source = 『SELECT CustomerID, OrderDate from Orders』rsGetOrders.CursorLocation = 2rsGetOrders.LockType = 3rsGetOrders.Open()rsGetOrders_numRows = 0%>

再以廻圈的方式將Recordset 內的資料一筆一筆抽出來顯示在網頁上

(以VBScript為例):

<%While (NOT rsGetOrders.EOF))%><%rsGetOrders.MoveNext()Wend%>
<%=(rsGetOrders.Fields.Item(『CustomerID』).Value)%><%=(rsGetOrders.Fields.Item(『OrderDate』).Value)%>
還沒結束,你要再將此rsGetOrders 物件關閉,否則會造成放置在記憶體上的空間浪費。<%rsGetOrders.Close()Set rsGetOrders = Nothing%>

同樣的功能若寫為CFML 的程式碼則不同,您會發現變得相當簡潔,以cfquery標籤來建立像ASP 的物件,如下:



SELECT CustomerID, OrderDate FROM Orders



再將此Recordset 顯示於網頁上。

#rsGetOrders.CustomerID##rsGetOrders.OrderDate#


說明:利用cfquery 建立rsGetOrders 查詢物件,並指定資料來源為northwind,標籤內再輸入SQL 查詢語法,最後以cfoutput 為輸出標籤,指出Recordset 為reGetOrders,再指示要輸出的欄位為reGetOrders.CustomerID 與reGetOrders.OrderDate,程式碼是不是少了很多又很簡單呢?

另外,此Recordset 您可以繼續在此頁面下使用,但是ASP 卻要再用rsGetOrder.MoveFirst()來指引出下一筆同樣的操作。

以寄信功能來說,ColdFusion 標籤己具備寄信功能,如下範例:

本文內容:用CFML 撰寫mail 真是超簡便。

(Mail Server 位址另需在ColdFusion Administrator 內設定)

您若用ASP 寫過Mail 功能的就知道,除了要寫比上述程式碼還多之外,還要在此機器上註冊具有Mail 功能的物件,如CDO、JMail、ASPMail 等。

ASP ObjectASP 有所謂的COM、DCOM 等物件,雖然說ColdFusion 己經有內建相關多的標籤功能,但是若您有現成的COM、DCOM 要使用,同樣可以使用在ColdFusion身上,不管是利用CFobject 或是在cfscripts 使用CreateObject(),就可以呼叫您現有的COM、DCOM,節省您另外再由ColdFusion 開發原本COM 功能的時間。

從PHP 轉移到ColdFusion近年來PHP 挾帶著效率高、免費的開發性語言,但就學習其語法孰不知與CFML仍有相當大的差距。

以ColdFusion 來說就因為本身為標籤物件之特性,所以當您在使用其標籤語法時,一反應到ColdFusion 後,所有標籤上的語法它都幫您完成;

然而在PHP 之中,您必須先建立起該物件的實體才能使用其物件,最後不需使用者也要關閉其物件才行。

我們同樣舉建立一個Recordset 物件來說明,您必須先建立與資料庫連線,再行建立Recordset,如下:


$connMysqlbookstore = mysql_pconnect(『bing』, 『bing』, 『mypass』)

ordie(mysql_error());

mysql_select_db(『bookstore』, $connMysqlbookstore);

$query_rsGetOrders = 『SELECT CustomerID, OrderDate FROM Orders』;

$rsGetOrders = mysql_query($query_rsGetOrders,$connMysqlbookstore)

or die(mysql_error());

$row_rsGetOrders = mysql_fetch_assoc($rsGetOrders);

$totalRows_rsGetOrders = mysql_num_rows($rsGetOrders);

?>

與ASP 同樣,必須再使用手動廻圈方式來將Recordset 內的資料一筆一筆抽出顯示於網頁上。



最後,您還需要將此Recordset 從記憶體中釋放,再關閉其資料庫連結。


mysql_free_result($rsGetOrders);

mysql_close($connMysqlbookstore);

?>

相同的功能在ColdFusion 如上述程式碼將不再列出,您亦可了解到此二者間程式碼的差異性與複雜性,值得附加說明的是,CFML 內的DataSource 己經在ColdFusion Administrator 中設定完成,非但如此,不管你是什麼樣的資料庫如Access、MSSQL、Sybase、MySQL、Oracle 等都有支援。

上述同樣的ColdFusion Recordset您可以反覆地在網頁中使用,不需另外建立,而PHP 還需利用mysql_data_seek() 或其他方式才能達成。

我們再以寄信功能來說,雖然PHP己內建寄信函數,但是相較起來開發程式還是太多於所謂的動詞,範例如下:


$to = $_GET ["txt_tofield"];

$subject = 『標題主題』;

$subject .= $_SESSION_["order_number"];

$message = join(『』,file(『message.txt』));

$from = 『From: chongbing 』;

$replyto = 『reply-to: bing@mmug.com.tw』;

$header = $from;$header .= 『\n』;

$header .= $replyto;mail($to, $subject, $message, $header); // 開始寄信

?>

從JSP轉移到ColdFusion以ColdFusion運作的機制來講,當第一次執行CFM檔並傳到ColdFusion Server時,內部就先將程式碼轉換成servlets,過程中與JSP很類似,因此再仔細研究您將會發現二者的引擎是非常相似的。

對於JSP開發者而言,您可以繼續在ColdFusion MX Server Enterprise Edition 與ColdFusion MX for J2EE版本上使用cfimport標籤來使用JSP自訂標籤程式庫,並且ColdFusion MX for J2EE版本可以在Windows、Linux、Solaris、IBM WebSphere 4.03或5、Sun ONE Web Server 6.0或7.0、BEA WebLogic 6或7與Macromedia Jrun 4.0上執行,另外您也不用特別限定配合哪個Web Server上的設定,等於說一家設定天下行。

語言特性:ColdFusion大部份都是以
CFML標籤式語法:







One is #myVar#

Other


JSP標籤式語法:

<%! int myVar = 2;%>

<% if (myVar == 1){ %>One is <%=myVar%><% } else {%>Other<% } %>

CFML Script式語法

if (myVar EQ 1){writeOutput(『One is #myVar#』);}else{writeOutput(『Other』);}

JSP Script式語法

<%if (myVar == 1){out.println(『One is 』+myVar+』』);}else {out.print(『Other』);}%>

ColdFusion在語法上較沒有像JAVA般嚴謹,例如變數名稱區分大小寫,資料型別亦沒有明確指定,也就是說您可以隨時指定任何變數給現在的字串型別或是其他物件,ColdFusion Server也不會丟出一個錯誤給您,除非您呼叫一個不帶給他資料型別的函數,或是試著要輸出一個無法預料的複雜數值。

另外,您也可以宣告一個變數參數,同時給指定他的資料型別,如:

,即使如此,您同樣可以在別的CFM頁面上改變他的型別,但是您會收到一個訊息告訴您與原來的型別不同。

ColdFusion MX與JSP另外的不同點在於變數範例的不同,Request與Response在ColdFusion MX幾乎沒有相同的函數;當您在JSP必須使用request.getParameter(“title”),但是在ColdFusion中您應該使用變數的範圍以利增加其執行效率,所以應該是用url.title或是title,如果變數從表單傳來的話,應該是form.titl或是tile。

需要強調的是,變數名稱若相同,不管是在url或是form,若您沒指出其範圍為何的話,將會以url為主。

ColdFusion MX另外一個使用上的好處是,您可以利用Application.cfm與OnRequestEnd.cfm來協助您開發上的便利,Applicatioin.cfm是在程式執行時會先去檢查該程式目錄或子目錄下是否有這檔案,若有則會先去執行此檔,您可以將一般程式會用到的變數等公用設定或程式寫在Applicatioin.cfm,而OnRequestEnd.cfm正好相反,為程式最後執行完時會去執行的檔案,這樣的機制能幫助您解決一些系統開發上的問題。ColdFusion MX 6.1來說增強了許多新的標籤及使用,以下就列出最MX新版的標籤內容如下:

1、CFCOMPONENT:利用函數與標籤建立起自訂ColdFusion元件,可供給ColdFusion網頁或是Web Services使用。

2、CFCHART:能將資料庫內的資料分析成表圖顯示,格式可以是SWF或是JPG、PNG等格式。

3、CFXML:支援XML與XSLT,可在不同來源的資料做轉換或存取。

4、CFDUMP:可以傾印所有的變數、結構等內容於網頁上,這對於在除錯與測試來講都非常有用。

5、CFDIRECTORY:提供您伺服端的檔案目錄建立、存取、刪除、更名、顯示等。

6、CFFILE:提供您伺服端的檔案建立、存取、刪除、更名、顯示等。

7、CFREGISTRY:讀取或是寫入Windows的登錄檔。

8、CFEXECUTE:執行程式或伺服端上的相關執行檔。

9、CFPOP:管理E-mail上的收取功能。

10、CFX:您可以建立這些C++或是Java的標籤,前提是您必在ColdFusionAdministrator上註冊,使用CFX可以提高效能,並且使用到其他語言上的資源。

11、CFOBJECT: 不管是否是在ColdFusion環境外,此標籤能讓您存取COM、CORBA或Java/EJB物件,並有重複使用的特性。

成功案例:國內知道要用ColdFusion的人還不多,但他的潛力實在非常看好,各位讀者有興趣的人可以看如國內104人力銀行、富邦銀行、還有MSN交友網站等,加上Macromedia台灣使用者俱樂部也是用ColdFusion來開發,有興趣的朋友可以上網查詢。就平台來講,Macromedia並沒有自己的平台,但官方並不認為此為他們的不利之處,而是像ColdFusion就能運行於J2EE與.NET二平台上,這點就是他們認為有利的優勢。ASP、PHP、JSP各有其優越之處,但ColdFusion極短的程式碼證明了有效降低學習門檻,除了是專為動態網頁開發的語言外,更整合其他平台,與使用XML、Web services、Flash Remoting上等功能,重要的是不管您是否為老練或新手都能夠快速將開發的生產力提高,加上配合的Dreamweaver快速發展工具,在日後您在撰寫任何Web上的系統,都是一個很好的選擇。

拉攏ASP、ASP.NET族群,擁抱ColdFusion MX(下)本篇主要是實際說明ASP、ASP.NET與CFML(ColdFusion Markup Language)語法與實作上、架構上的差異,願提供給初學者或專業程式人員部署於網頁系統上之正面的參考方向,藉此讓國人更加了解到ColdFusion實質上的價值與威力。

文:劉仲濱

在全球,在台灣,撰寫動態網頁語言,應當就屬於ASP是最多人使用了,當然它也是其中最受歡迎的語言之一。然而,不可忽視的是微軟近三年所推崇的.NET平台,對動態網頁來說,也就是所謂的ASP.NET,己吸引國內許多程式設計師使用,但是若你打算將原有的ASP系統轉換為ASP.NET系統的話,可能你需要謹慎評估其必要性,因為這中間牽涉的轉換過程是否為簡單?不費時?還是有其他因素要加以考量的呢?

確實作好評估:對於企業來說,當您在評估一個開發語言,甚至是系統轉換與移植的可行性前,是否要好好的審視以下幾個重點:

1. 語言學習的門檻如何?易於學習嗎?

2. 系統未來若要維護,他的複雜性如何?也易於維護嗎?

3. 使用任何一種語言,他的支援性又是如何?可以在不同的平台上使用嗎?支援.NET與J2EE平台嗎?

4. 很多人很在意效能與穩定性問題?您要用來解決您的系統問題,效率又是如何呢?

5. 不管是開發、移植、學習、維護等,種種建置花費的費用是否值得?又是否合乎效用?

6. 除了大眾所知道的ASP、JSP、PHP、ASP.NET,您還有其他的選擇嗎?

7. 使用.NET平台來建置系統,但終究.NET真正的價值在哪?是ASP.NET還是其他更重要的意義呢?從ASP到ASP.NET許多現有己存在的ASP程式,有必要再轉成ASP.NET嗎?要移轉的程度是困難的嗎?事實上說穿了因為要使用到.NET平台與ASP.NET所帶來的效益與好處,才會有移轉的必要,雖然說微軟有提供ASP to ASP.NET Migration Assistant的移轉工具,但實際上卻沒有這麼方便與簡單,這還要視您系統上的複雜程度,所耗費的時間是您必須要考慮到的,不祗是改副檔名而己,最主要是VBScript與VisualBasic .NET語法是大大的不同。

以系統程式發展來看,現有己開發好的ASP程式將還會繼續執行一段時間,並且同時也可以與ASP.NET共存,同一台主機並不會將ASP.dll的引擎給移除掉,而日後開發的系統也會慢慢導向ASP.NET。如果您對ASP語法很熟悉了,要學習ASP.NET將是一件很容易的事,但是學習ColdFusion將是更輕鬆的事,後面將會介紹ASP移轉到ASP.NET要改變哪些內容,接著再說明ASP.NET與ColdFusion語法上的比較。從ASP到ASP.NET的變化剛說過,要從ASP轉換到ASP.NET還不祗是更改檔名這樣單純而己,單從語意來看,還有下列幾點必須注意的:􀁺

有些常用的物件,像是Request就有經過微妙的變化,如,每個參考到Request.QueryString(“var”)或是Request.Form(“name”)就必須改變。􀁺

所有在ASP頁面所宣告的函數也都必須調整,您不能祗是在<%與%>之間宣告,而必須要在區塊中以LANGUAGE與RUNAT=”SERVER”來定義。􀁺

變數資料型式不再支援,您必須是以物件來取代,並且視需要地明確給予資料型別。􀁺

現在呼叫方法也都需要有括號,即使是沒有參數。􀁺

因為頁面的解譯功能並不支持ASP.NET,取而代之的是所有的輸出功能必須使用Response.write()來做,這主要是幫忙從內容中強行分開到表示層,這是讓程式人員要轉移到ASP.NET最頭痛的地方,因為還要視需要使用關閉的功能到程式頁面上。􀁺

語法中像是a&b&c己經不再使用,在每個“&"符號前後一定要再加上空白,如a & b & c。所以說有經驗的人員應該很了解,要從ASP程式轉到ASP.NET並不這麼容易,而且也要端賴系統的複雜程度,修改到最後您不難發現,與其更改還不如重寫來的清楚而節省時間。回過頭來,能否再反問自己上述幾個問題,難道真的要重新學習新的語言嗎?其門檻是如何?快速學習嗎?快速開發嗎?易於維護嗎?效能也是更好嗎?真的符合成本嗎?什麼是.NET?與肯定.NET微軟.NET願景的推行從2003年就開始了,相信還有些初學者對於.NET定義或許己經忘了,甚至是沒再去注意,以為.NET就是ASP.NET或C#嗎?其實不然,各位有興趣可以到微軟這網址去看http://www.microsoft.com/net/basics/,微軟對於.NET的定義說的很明白,如下:What Is .NET?Microsoft® .NET is a set of software technologies for connecting information, people, systems, and devices. This new generation of technology is based on Web services—small building-block applications that can connect to each other as well as to other, larger applications over the Internet.什麼是.NET?微軟.NET是一套連結資訊、人員、系統與設備的軟體技術。這新一代的技術是以Web services為基礎--是屬於建立小型區塊的應用程式,此應用程式能藉由網路與其他程式相互串連,也可以連結其他程式,甚至是更大型的應用程式。如同微軟所說的,.NET並不是ASP.NET也不是C#或是任何的程式語言,並且.NET的價值在於能隨時、隨地、任可設備、任何人員都可以藉由.NET所構置的互通平台來交換資訊,取得資料。也因此.NET意義比ASP.NET還要偉大的多,相同地以J2EE來說也是比JSP偉大的多,ASP.NET祗是善用.NET其中之一的方法,但是這還不是唯一的路。我們不難發覺到,Web services在.NET願景中扮演著舉足輕重的角色,而Web services並不是微軟所創造的,它是一個建構於開放的標準,就像是XML與SOAP,企業上許多公司也支援Web services,這當然也包括了Macromedia。我們也都很肯定.NET平台與願景,但要建立起.NET願景並不侷限於完全使用特定的語言開發系統,好比是ASP.NET,事實上您可以結合混合與匹配的技術,建造起.NET願景。以下建構方式都算是有效的.NET平台。􀁺 使用.NET Server來服務系統,並且用ASP.NET與VB.NET來開發前端程式碼。􀁺 所有後端皆以J2EE伺服器來運行,所有資料與處理過程也都是使用Java撰寫的Web services來運作,而前端程式碼還是使用ASP.NET與VB.NET來開發。􀁺 .NET Server或是SQL Server皆是安裝於Windows作業平台,但是前端程式碼還是使用JSP來建立並透過JDBC來連結資料庫。􀁺 使用.NET Server來服務系統,所有資料與處理過程也都是使用C#撰寫的Web services來運作,但是前端程式碼還是使用Perl或PHP來開發。從此可以知道,微軟.NET幾乎是以Web services來圍繞著,這代表是複合的.NET平台祗是要以開放性的Web services與服務為導向的開發環境,都算是屬於是.NET的建構方式。ColdFusion優勢ColdFusion建立於1994年,當是在Internet上要開發動態網頁可以說是最早的語言,也比JSP、PHP、ASP都還要更早,而經過六次重大的改版,與近十年的演進與洗禮後,ColdFusion具有下列強大的優勢:􀀹 比其他語言還易學習的門檻。􀀹 快速開發環境,寫更少的程式碼,爭取更多的時間,做更多的事。􀀹 支援所有的設定樣本,N-Tier開發環境與其他的開發方法。􀀹 具有高效能與高彈性。􀀹 支援應用伺服器平台有Microsoft、IBM、BEA、SUN等。􀀹 程式不需改寫可移植到Windows、Unix、Linux、Solaris、AIX還有其他的系統等。􀀹 支援業界常用的資料庫,如Oracle、Sybase、DB2、MySQL、MSSQL等。􀀹 支援相關執行服務,如圖表與圖形、全文檢索、高效能的多執行緒之郵件傳送等。􀀹 內建支援XML與Web Services,特別是與Flash整合的Remoting功能。􀀹 可存取COM、CORBA、COM、JAVA、C/C++與具有Script的能力。不僅如此,ColdFusion可以說是相當適合開發網頁程式的語言,當然能夠安裝於Windows Server 2003。ColdFusion與ASP架構比較ASP是經由IIS對應到ASP.DLL的ISAPI程式來解譯其程式碼,說穿了若不經由這支ASP.DLL來處理其程式碼,直接瀏覽器觀看將會都是ASP程式碼,而以ASP來說,撰寫Server端的程式通常是以VBScript,Client端是以HTML與JavaScript。對於ColdFusion來說,它是以高效能的多執行緒來處理,也就是說以系統服務來啟動,將提出要求的ColdFusion頁面,透過IIS以ISAPI連結器來路由到ColdFusioin Server來解析,再將結果傳到瀏覽器,撰寫Server端的程式通常是以CFML,Client端是以HTML與JavaScript。以開發人員角度來看,若沒仔細察覺似乎感覺ASP架構與ColdFusion類似,如圖一,但其實ColdFusion與ASP.NET架構上較為相近,並且ColdFusion做的事比ASP多太多了。圖一:ColdFusion與ASP於IIS上是作法相同。ColdFusion與ASP.NET架構上比較ASP.NET設計上是使用在微軟.NET framework的環境上,並非像ASP是以直譯的方式來進行,ASP.NET程式碼在執行時,是即時地編譯成MSIL(Microsoft Intermediate Language),也就是所謂的中繼語言,ASP.NET程式碼通常是C#或是VB.NET來撰寫,而執行是在CLR(Common Language Runtime)環境下,程式碼中使用了物件、資源與APIs等,就是在CLR中執行,而CLR可以管理執行、記憶體、執行緒等,ASP.NET還是藉由IIS的ISAPI經由單一的DLL來處理所發生的事情,但是會在要求時轉向在CLR的環境下執行。於ColdFusion的架構下也是類似,此例是說明安裝於Windows平台上,它可以在眾多廠商的J2EE平台上跑,ColdFusion就是個編譯器,它將CFML及時的編譯成Java bytecode(就好比微軟的MSIL),這編譯過的bytecode也是需要在特別的環境下執行,也就是所謂的JVM(Java Virtual Machine,類似於微軟的CLR),ColdFusion程式碼使用了物件、資源與APIs等,就是在JVM中執行,而JVM可以管理執行、記憶體、執行緒等。如圖二所示。圖二:ASP.NET與ColdFusion的處理頁面要求過程是類似。二者之間除了在語言使用的不同外,ColdFusion善用了J2EE平台,正如ASP.NET是善用了.NET平台,畢竟,ColdFusion提供了簡易的標籤語法來開發網頁程式,但ASP.NET需要修改物件或撰寫更低階的API程式(甚至比寫ASP還要低階),這意思是ASP開發人員能更得心應手的以ColdFusion來開發系統,可能都比採用ASP.NET還來得快速。一樣是可以存取.NET平台上的服務與Web services,加上以ColdFusion開發比ASP.NET更簡易又快速,我們後面會以實際程式例子來說明。ASP VS CFML上期我們己經舉了幾個ASP程式碼的例子,不過在這期我們還是舉個不同的例子,如檔案存取,若要作到讀檔案內容後再顯示其內容,先請看ASP要如何撰寫:ASP(檔案存取)<%Set fs = CreateObject(『Scripting.FileSystemObject』)Set fl=fs.OpenTextFile(『c:\myfiles.txt』)filedata=fl.ReadAllfl.closeresponse.write(filedata)%>CFML(檔案存取)#filedata#祗需二行就能完成,另外CFFILE標籤也能處理檔案上傳功能,但是若用ASP就不這麼方便了,除非您使用第三協力廠商所提供的套件。存取COM物件雖然ColdFusion是以Java為基於核心,但是也提供能夠存取COM物件,下面範例將使用COM來建立新的Word文件。ASP(建立Word文件)<%Set objWord = CreateObject(『Word.Application』)objDoc=objWord.DocumentsnewDoc=objDoc.Add%>CFML(建立Word文件)objWord=CreateObject(『COM』, 『Word.Application』);objDoc = objWord.Documents;newDoc = objDoc.Add();CFML基本上可以做到ASP所能做到的部分,如:Flash圖表、全文檢索、寄發E-mail等甚至更多,並且幾乎ColdFusion程式碼是較ASP簡短、有力、又簡單,以ASP開發人員來說,真的要學習ColdFusion,將會變得很快,而且是所謂的無痛學習。ColdFusion VS ASP.NETColdFusion讓ASP開發人員很好切入,但若對於ASP.NET人員呢?以下就針對幾個範例做個比較:ASP.NET(寄送E-mail)上期我們有講過,ASP在撰寫E-mail功能時,因為沒有支援SMTP所以要使用到COM物件才能夠辦到,不過這在ASP.NET己經解決這個問題,但是以ColdFusion來說經由CFMAIL來使用SMTP功能發信更是簡單。Dim myMail As MailMessage = New MailMessage()myMail.From = 『mmug@mmug.com.tw』myMail.To = 『bing@sji.edu』myMail.Subect = 『郵件測試』myMail.Body = 『這是封單純的郵件測試.』SmtpMail.Send(myMail)CFML(寄送E-mail)這是封單純的郵件測試。CFMAIL標籤支援了MIME郵件格式,也有SMTP的安全登入等,另外一般在使用CFMAIL會搭配資料庫來運作,單一郵件內容分別寄到使用者的信箱,並且郵件地址與郵件內容等都可以從資料庫中的欄位一一抽出,達到雖是同一郵件,但是是針對不同人所發送一樣,這在做電子報時是最方便了。ASP.NET(配合資料庫寄送E-mail)Dim connString as StringconnString = 『…』Dim objConnection as OleDbConnectionobjConnection = New OleDbConnection(connString)objConnection.Open()Dim strSQL as String = 『SELECT firstName, email FROM users』Dim objCommand as OleDbCommandobjCommand = New OleDbCommand(strSQL, objConnection)Dim objDataReader as OleDbDataReaderobjDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection)Dim myMail As MailMessage = New MailMessage()myMail.From = 『mmug@mmug.com.tw』myMail.To = objDataReader(『eMail』)myMail.Subect = 『這是封單純的郵件測試』myMail.Body = 『親愛的』 & objDataReader(『firstName』) & 『內容如下…』SmtpMail.Send(myMail)objDataReader.Close()CFML(配合資料庫寄送E-mail)SELECT firstName, email FROM users親愛的 #firstname#, 內容如下…以上是二者再寄送E-mail程式時的差異,附帶說明的是,ColdFusion的SMTP寄送引擎能超過每小時以1,000,000封信以上的考驗,對於大量寄送的需求者來說是一項福音。XML 解析ColdFusion另一個相當有用的功能就是XML,要能解析XML文件完全靠XMLParse()函數,下列來比較其用法。ASP.NET解析XML<%Dim xml as Stringxml = 『 ColdFusion極速開發500 』Dim doc As New XmlDocument()doc.LoadXml(xml)Dim root As XmlNode = doc.FirstChild=root.FirstChild.OuterXml%>CFML解析XMLColdFusion極速開發500 』>#doc.book.XmlChildren[1].XmlText#不同的語言但得到結果相同,都是把第一個子節點的內容給顯示出來,另外您也可以用XMLTransform來做XSL轉換功能,與XMLSearch()來執行XPath搜尋功能。利用CFCs建立Web Services在九二年十月時就有介紹過利用CFCs來實作Web Services,您可以使用CFML標籤來撰寫CFCs物件,CFCs不但具有建立Web Services功能,還能重覆使用,並且從主頁分開,需要使用時再呼叫進來執行,祗要再屬性加入ACCESS=”remote”,WSDL將會自動產生,所有的SOAP操作將會變得更清楚。ColdFusion本身並沒有整合現有的應用程式架框能馬上套用,不過您確有其他方式來使用這程式架框與其方法在ColdFusion應用程式開發上,這二個重要的學習指標是:􀁺 Fusebox:很受歡迎的應用程式架框與方法。(網址在http://www.fusebox.org/)􀁺 Mach-II:以MVC或是MVC樣式來勾勒出完整的應用程式架框,隱含著相當具有程式建築之美。 (網址在http://www.mach-ii.com/)總結:ColdFusion因為能配合運行於J2EE與.NET平台上,並且二者都提供了一個具有強固又壯大的平台,讓ColdFusion得以打造出更安全、更信賴、更有彈性的系統,因此取得一個相當好的優勢;又譬如ASP開發人員在建構系統時,並沒有像ASP.NET具有很高的生產力,加上考慮到移轉新平台、新語言的需求下,人員、時間、成本、長期維護等都是很值得再三深思的議題。ColdFusion以上己被證明是很適合您開發於Web環境,不祗是善用原有Java具有的特性,也能存取.NET環境下的Web services與其相關資源,系統無痛的可移植性,亦支援多平台使用,在在表現出超高的生產力。因此開發者還是一樣可以繼續投資既有的.NET技術與平台,並使用ColdFusion附加於現有的開發環境;而原有使用ColdFusion的開發者,仍舊可繼續保持其語言並利用新的特性與功能,盡情發揮於.NET與J2EE平台上。作者:劉仲濱E-mil:bing@sji.edu簡介:從事資訊相關行業多年,致力於macromedia產品解決方案,專長為Dreamweaver、ColdFusion、Fireworks。目前為Macromedia台灣使用者俱樂部站長(http://www.mmug.com.tw),有興趣的人可以與他連絡。

留言

這個網誌中的熱門文章