『10分で作るRailsアプリ』
この連載では,
今回は,
ColdFusionとは
ColdFusionとはアドビシステムズ株式会社が販売するWebアプリケーションサーバーです。同じようなカテゴリーに属する製品としてはマイクロソフトのASP.
ColdFusionはWebアプリケーションサーバーとして長い歴史を持っており,
Webアプリケーションサーバーという名前の通り,
また,
さらに,
その他,
- Webサービス
(SOAP) の提供, または外部Webサービスの呼び出し - Flash RemotingによるFlashとの高い親和性
- LiveCycle Data Services ES
(旧Flex Data Services) によるFlexとの高い親和性 - HTMLからPDFへの変換
- PDFファイルの操作
(2つのPDFのマージ, 目次作成, 暗号化, PDFのオーダーメイドなど) - 画像処理
(サムネイル作成, 画像描画など) - グラフの描画
- SMS
(JabberやGoogle TalkなどのXMPP) やJMS (Java Message Service) などの非同期イベントの処理 - LDAPとの連携によるアカウント管理
- Microsoft Exchangeとの連携
(バッチ処理でカレンダーに予定を入れるなど) - ラインデバッギング
(ページにブレイクポイントを設定し, その時点での各種変数を参照可能) - GUIによるサーバー監視
(処理に時間のかかっているページや, 遅いクエリー, 頻繁に実行されているクエリー, メモリー消費量などをグラフやチャートなどで視覚的に監視可能)
これはColdFusion 8が備えている機能の一例に過ぎませんが,
ColdFusion概要 - データベースとの連携
ColdFusionは元々データベースと連携した動的Webサイトを構築するためのアプリケーションサーバーとして開発されました。そのため,
例えば,
PHPでクエリーを実行し,
<?php
$handle = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$handle) {
die('接続できませんでした: ' . mysql_error());
}
$param = mysql_escape_string("What's new%");
$sql = sprintf("SELECT str FROM Table1 WHERE str LIKE '%s'", $param);
$result = mysql_query($sql);
if (!$result) {
echo "クエリ ($sql) を正しく実行できませんでした: " . mysql_error();
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo '<p>' . htmlspecialchars($row["str"]) . '</p>';
}
mysql_close($handle);
?>
ColdFusionでクエリーを実行し,
<!---
cfqueryタグで囲った中身には実行したいSQLを記述します。
cfqueryタグのクエリー結果はname属性で渡した変数に代入されます。
cfqueryparamタグはmysql_escape_string()のように,SQLインジェクションを防ぐために,SQLの特別な文字列をエスケープしてくれるタグです。
また,プリペアドステートメントのプレースホルダーの役割も果たします。
なお,このHTMLのコメントのような部分はCFMLのコメントに該当し,ColdFusionが吐き出すHTMLには出力されません。
--->
<cfquery datasource="ds" name="qry">
SELECT str FROM Table1 WHERE str LIKE <cfqueryparam CFSQLType="CF_SQL_VARCHAR" value="What's new%">
</cfquery>
<!---
下のcfloopタグがPHPのwhile文の部分にあたり,ここで全ての該当行をループし表示します。
変数を出力するにはcfoutputタグの中で,出力したい変数をシャープマーク(#)で囲います。
シャープマークで囲った中身はプログラムとしてColdFusionに解釈されます。
この場合HTMLEditFormat()関数に引数qry.strを渡した結果を出力するという意味です。
HTMLEditFormat()はHTMLのタグの開き括弧などをエスケープするXSS対策のための関数です(PHPのhtmlspecialchars()に相当)。
--->
<cfloop query="qry">
<p><cfoutput>#HTMLEditFormat(qry.str)#</cfoutput></p>
</cfloop>
ご覧頂いて分かるとおり,
また,
それに対しColdFusionではCFMLがタグベースと言うこともあり,