Application.cfc でのアプリケーションおよびイベントハンドラーの定義

Application.cfc ファイルでは、アプリケーション全体に適用する設定と変数、およびアプリケーションイベントハンドラーを定義します。

  • アプリケーション全体に適用する設定および変数としては、ページ処理の設定、デフォルト変数、データソース、スタイル設定、その他のアプリケーションレベルの定数などがあります。
  • アプリケーションイベントハンドラーは CFC メソッドの一種で、アプリケーションの有効期間中に特定のイベントが発生すると ColdFusion によって自動的に実行されます。該当するイベントは、アプリケーション起動、アプリケーション終了、セッション開始、セッション終了、リクエスト開始、リクエスト実行、リクエスト終了、および例外です。

アプリケーションレベルの設定および変数の定義

アプリケーションを作成する際には、アプリケーション全体に適用するプロパティや特性を多数設定できます。これには次のような項目が含まれます。

  • アプリケーション名
  • アプリケーションプロパティ (Client 変数、Application 変数、Session 変数の管理オプションを含む)
  • ページ処理オプション
  • デフォルト変数、データソース、スタイル設定、および他のアプリケーションレベルの定数
    デフォルト変数の設定については、このページの「onApplicationStart におけるアプリケーションのデフォルト変数と定数の設定」を参照してください。
アプリケーションのネーミング

アプリケーションを定義し、アプリケーション名を付けるには、Application.cfc の初期化セクションで、メソッド定義よりも前に This.name 変数を設定します。同じアプリケーション名を使用すれば、複数のページを同じ論理アプリケーションの構成要素として定義できます。
ColdFusion では、名前を持たないアプリケーションがサポートされています。これは、JSP タグおよびサーブレットと相互運用する必要がある ColdFusion アプリケーションにおいて便利です。名前を持たないアプリケーションの作成を検討するのは、ColdFusion ページで Application スコープまたは Session スコープのデータを既存の JSP ページやサーブレットと共有する必要がある場合のみとしてください。名前のないアプリケーションを 1 つのサーバーインスタンス上に複数作成することはできません。名前を持たないアプリケーションの使用については、JSP ページおよびサーブレットの相互運用の ColdFusion ページと JSP ページまたはサーブレットとのデータの共有 を参照してください。

アプリケーションプロパティの設定

アプリケーションプロパティは、Application.cfc の初期化コードで This スコープの変数を設定することによって指定します。これは、cfapplication タグで設定できるのと同じプロパティです。次の表に、アプリケーションプロパティの設定に使用する This スコープ変数とその使用方法を示します。

変数

デフォルト

説明

applicationTimeout

Administrator の値

アプリケーション (すべての Application スコープ変数も含む) の有効期間を示す実数値 (日数)。この変数を生成するには createTimeSpan 関数を使用します。

clientManagement

False

アプリケーションで Client スコープ変数をサポートするかどうかを示します。

clientStorage

Administrator の値

Client 変数を格納する場所を示します。Cookie、レジストリ、またはデータソース名を指定できます。

loginStorage

Cookie

ログイン情報を Cookie スコープと Session スコープのいずれに格納するかを示します。

scriptProtect

Administrator の値

変数をクロスサイトスクリプティング攻撃から保護するかどうかを示します。

sessionManagement

False

アプリケーションで Session スコープ変数をサポートするかどうかを示します。

sessionTimeout

Administrator の値

ユーザーセッション (すべての Session 変数も含む) の有効期間を示す実数値 (日数)。この変数を生成するには createTimeSpan 関数を使用します。

setClientCookies

True

クライアントブラウザに CFID Cookie および CFTOKEN Cookie を送信するかどうかを示します。

setDomainCookies

False

クライアント識別用の CFID および CFTOKEN の値と、Cookie を使用して格納される Client スコープの変数について、ドメイン Cookie を使用するかどうかを示します。False の場合はホスト固有の Cookie が使用されます。クラスターで実行されるアプリケーションの場合は True に設定します。

次の例は Application.cfc の冒頭部分のコードで、アプリケーション名とプロパティを設定しています。

<cfcomponent>
<cfset This.name = "TestApplication">
<cfset This.clientmanagement="True">
<cfset This.loginstorage="Session">
<cfset This.sessionmanagement="True">
<cfset This.sessiontimeout="#createtimespan(0,0,10,0)#">
<cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">

これらの設定について詳しくは、『CFML リファレンス』の cfapplication を参照してください。

ページ処理オプションの設定

cfsetting タグを使用すれば、アプリケーションの全ページに適用する次のページ処理属性を指定できます。

属性

用途

showDebugOutput

デバッグ出力を表示するかどうかを指定します。ColdFusion Administrator でデバッグが無効になっている場合、この設定でデバッグを有効にすることはできません。Administrator でデバッグ出力が有効になっている場合に、デバッグ出力を表示するか非表示にするかをこの設定で指定します。

requestTimeout

ページリクエストのタイムアウトを指定します。タイムアウトまでに ColdFusion でページの処理が完了できなかった場合は、エラーが生成されます。この設定は、ColdFusion Administrator での設定よりも優先されます。外部の LDAP サーバーや Web サービスプロバイダなど、特に低速の外部リソースにアプリケーションやページでアクセスすることが多い場合は、この設定を使用してページのタイムアウト時間を増やします。

enableCFOutputOnly

cfoutput タグに含まれていないテキストを出力しないようにします。ColdFusion ページに含まれている不要なテキストを非表示にしたい場合に、この設定が役立ちます。

cfsetting は個別のページで使用されることが多いタグですが、Application.cfc ファイルでも使用できます。たとえば、マルチアプリケーション環境で使用して、ColdFusion Administrator の設定をアプリケーションごとに上書きできます。
コンポーネントの初期化コードでも、アプリケーション全体に適用する cfsetting タグを記述できます。その場合は通常、次の例のように This スコープのアプリケーションプロパティ設定に続いて記述します。

<cfcomponent>
<cfscript>
This.name="MyAppl";
This.clientmanagement="True";
This.loginstorage="Session" ;
This.sessionmanagement="True" ;
This.sessiontimeout=CreateTimeSpan(0,0,1,0);
</cfscript>
<cfsetting showdebugoutput="No" enablecfoutputonly="No">

この例に含まれる cfsetting タグは、アプリケーション内のすべてのページに影響します。アプリケーション全体の設定は、イベントメソッド(onRequestStart など)の中や個別の ColdFusion ページで上書きできます。

アプリケーションイベントハンドラーの使用

次の表では、実装可能なアプリケーションイベント CFC メソッドと、それらがトリガされるタイミングについて説明します。

メソッド

実行のタイミング

onApplicationStart

アプリケーションが最初に起動するときに発生します。つまり、任意のページに対する最初のリクエストが処理されるときか、CFC メソッドがイベントゲートウェイインスタンス、Flash Remoting リクエスト、または Web サービス呼び出しによって最初に呼び出されるときに発生します。このメソッドは、データソース名など、アプリケーション全体で使用する(Application スコープの)変数を設定するのに便利です。

onApplicationEnd

アプリケーションが終了するときに発生します。つまり、アプリケーションがタイムアウトするか、サーバーがシャットダウンすると発生します。

onSessionStart

既存のセッション (ColdFusion イベントゲートウェイセッションを含む) に属さないリクエストの結果として、新しいセッションが作成されると発生します。このイベントが発生するには、アプリケーションでセッションが有効になっている必要があります。

onSessionEnd

セッションのタイムアウト期間が経過すると発生します。このイベントは、アプリケーションのタイムアウトやサーバーのシャットダウンでは発生しません

onRequestStart

ColdFusion でリクエスト(ブラウザーなどからの HTTP リクエスト、イベントゲートウェイへのメッセージ、SOAP リクエスト、Flash Remoting リクエスト)が受信されると発生します。

onRequest

onRequestStart イベントが完了すると発生します。このメソッドは、リクエストされたページコンテンツに対するフィルターの役割を果たします。

onRequestEnd

リクエストに関するすべてのページや CFC の処理が完了すると発生します。OnRequestEnd.cfm ページと同等です。

onMissingTemplate

ColdFusion で、存在しないページに対する要求が受信されると発生します。

onError

例外が try/catch ブロックで処理されなかった場合に発生します。

ColdFusion でリクエストが受信されると、Application CFC がインスタンス化され、Application.cfc のコードが次の順序で実行されます。

  • ファイル冒頭の CFC 初期化コード
  • onApplicationStart(そのアプリケーションでまだ実行されていない場合)
  • onSessionStart(そのセッションでまだ実行されていない場合)
  • onRequestStart
  • onRequest か、onRequest メソッドがない場合はリクエストされたページ
  • onRequestEnd
    次のメソッドは特定のイベントによってトリガーされます。
  • onApplicationEnd
  • onSessionEnd
  • onMissingTemplate
  • onError
    onApplicationEnd メソッドと onSessionEnd メソッドは、ページリクエストのコンテキストでは実行されないので、リクエスト変数にアクセスすることや、ユーザーに対して情報を表示することはできません。onMissingTemplate メソッドは、存在しない CFML ページが URL で指定されるとトリガーされます。OnError メソッドは、リクエストのコンテキストで実行されるとは限りません。コンテキストは Event 引数を使用して判別します。

Application.cfc によるアプリケーションの管理

アプリケーションの設定と管理には、onApplicationStart メソッドと onApplicationEnd メソッドを使用します。複数のページやリクエストで使用され、アプリケーション内のすべてのコードから一貫して利用可能であることが必要なリソースは、これらのメソッドで制御します。そのようなリソースとしては、データソース、アプリケーションカウンター(ページヒット変数など)、すべてのページに適用するスタイル情報などがあります。
onApplicationStart メソッドは、サーバーの起動後に、アプリケーションの任意のページに対する最初のリクエストが ColdFusion で受信されると実行されます。onApplicationEnd メソッドは、アプリケーションサーバーがシャットダウンするか、アクセスがないままアプリケーションのタイムアウト期間が経過すると実行されます。
次に、これらのメソッドを使用するいくつかの方法について説明します。詳しくは、『CFML リファレンス』の onApplicationStart および onApplicationEnd を参照してください。

アプリケーションユーティリティ関数の定義

Application.cfc で定義した関数のうち共有スコープに属していないものは、デフォルトではその CFC 内の他のメソッドからのみ使用可能です。
Application.cfc で onRequest メソッドを実装している場合、Application.cfc とターゲットページでは同じ Variables スコープが共有されるので、Application.cfc で定義したすべてのユーティリティ関数は、ターゲットページでも直接使用できます。
Application.cfc 内のメソッドだけでなく複数のページでユーティリティ関数を使用する必要があり、onRequest メソッドを使用しない場合は、別の CFC でその関数を定義し、その CFC を実行してアクセスすることをお勧めします。他の ColdFusion ページと同様に、Application.cfc でも、ColdFusion Administrator の [マッピング] ページで設定したディレクトリパス内のすべての CFC にアクセスできます。したがって、この方法を使用してユーティリティ関数を複数のアプリケーションで共有します。
リクエストページで使用するユーティリティ関数を Application.cfc で定義し、onRequest メソッドを使用しない場合は、次に示すようなコードを使用して、それらの関数を何らかの ColdFusion スコープ((Request スコープなど)に明示的に配置します。

<cffunction name="theFunctionName" returntype="theReturnType">
<!--- Function definition goes here. --->
</cffunction>

<cffunction name="OnRequestStart">
<!--- OnRequestStart body goes here --->
<cfset Request.theFunctionName=This.theFunctionName>
</cffunction>

リクエストページには、次のようなコードを記述します。

<cfset myVar=Request.theFunctionName(Argument1...)>

この方法で定義した関数では、This スコープと Variables スコープがリクエストの Application.cfc ファイルと共有されます。

onApplicationStart におけるアプリケーションのデフォルト変数と定数の設定

Application.cfc でデフォルト変数とアプリケーションレベルの定数を設定できます。たとえば、次のことが行えます。

  • データソースの指定および可用性の確保
  • ドメイン名の指定
  • フォントやカラーなどのスタイル設定
  • その他のアプリケーションレベルの変数の設定
    Application.cfc の onApplicationStart メソッドで Application スコープの変数を設定する場合、それらの変数をロックする必要はありません。
    onApplicationStart メソッドを実装する方法の詳細については、『CFML リファレンス』の onApplicationStart を参照してください。
onApplicationEnd メソッドの使用

onApplicationEnd メソッドは、アプリケーションのシャットダウン時にクリーンアップ処理が必要な場合に使用できます。例えば、メモリ内にあるデータをデータベースに保存することや、アプリケーションの終了をログに記録することができます。このメソッドはリクエストに関連付けられていないので、ユーザーページにデータを表示することはできません。このメソッドで例外が発生した場合でもアプリケーションは終了します。頻繁に使用されるアプリケーションでは、サーバーのシャットダウン時を除き、このメソッドが実行されることはほとんどありません。
onApplicationEnd メソッドを実装する方法の詳細については、『CFML リファレンス』の onApplicationEnd を参照してください。

Application.cfc によるセッションの管理

ユーザーセッションの設定と管理には、onSessionStart メソッドと onSessionEnd メソッドを使用します。ユーザーが 1 回のブラウザーセッションでサイトにアクセスする間に複数のページで使用されるリソースは、これらのメソッドによって制御できます。アプリケーション内のページをユーザーが最初にリクエストするとセッションが開始し、そのセッションがタイムアウトするとセッションは終了します。Session スコープと Session 変数の詳細については、永続データの使用とロックを参照してください。
セッションリソースには、セッションの全期間にわたって必要なデータ(口座番号やショッピングカートの内容など)を格納する変数や、セッション中に複数のページから使用するメソッドおよびデータが含まれている CFC などがあります。

注意:onSessionStart メソッドのコードはセッションが開始するときにしか実行されないので、cflogin タグや基本ログイン処理は記述しないでください。ユーザーのログアウトが処理できず、完全なセキュリティを確保できません。

onSessionStart メソッドの使用

このメソッドは、セッションデータ (ユーザー設定やショッピングカートの内容など) の初期化や、アクティブなセッションの数を監視するなどの用途に適しています。このメソッドでセッション変数を設定する場合、Session スコープをロックする必要はありません。
詳しくは、『CFML リファレンス』で onSessionStart のエントリを参照してください。

onSessionEnd メソッドの使用

このメソッドは、セッション終了時に任意のクリーンアップ処理を実行するために使用します。(セッション終了について詳しくは、セッション変数の設定と使用の「セッションの終了」を参照してください。)たとえば、セッション関連データ (ショッピングカートの内容や、ユーザーが注文処理を完了したかどうかなど) をデータベースに保存することや、セッション終了のログをファイルに記録することができます。このメソッドはリクエストに関連付けられていないので、ユーザーページにデータを表示することはできません。

注意:アプリケーションが終了しても、セッションは終了しないので onSessionEnd メソッドは呼び出されません。詳細については、『CFML リファレンス』で onSessionEnd のエントリを参照してください。

Application.cfc によるリクエストの管理

ColdFusion でリクエストを管理する方法としては、onRequestStart、onRequest および onRequestEnd の 3 つがあります。ColdFusion では、リクエスト(これらのメソッドを含む)が次のように処理されます。

  1. リクエストの開始時には、必ず onRequestStart が処理されます。
  2. onRequest メソッドが実装されている場合はそれが処理され、実装されていない場合はリクエストされたページが処理されます。onRequest メソッドを実装する場合は、リクエストされたページを onRequest メソッド内で明示的に呼び出します。
  3. リクエストの終了時には、必ず onRequestEnd が処理されます。
    注意:cfabort、cflocation または cfcontent タグを使用した場合は、OnRequestEnd ではなく OnAbort メソッドが呼び出されます。

次のように Application.cfc のリクエストメソッドを使用すると、リクエストを管理できます。

onRequestStart メソッドの使用

このメソッドはリクエストの開始時に実行されます。これはユーザーの承認 (ログイン処理) や、リクエスト固有の変数の初期化 (パフォーマンス統計の収集など) に適しています。
onRequestStart メソッドを使用して onRequest メソッドを使用しなかった場合は、onRequestStart コードの処理が完了すると、ColdFusion によってリクエストが自動的に処理されます。

注意:Application.cfm ファイルに onRequest メソッドを記述しなかった場合、onRequestStart メソッドとリクエストされたページの間で Variables スコープは共有されません。ただし、Request スコープの変数は共有されます。

詳しくは、『CFML リファレンス』の onRequestStart を参照してください。

ユーザー認証

アプリケーションでユーザーのログインが必要な場合は、onRequestStart メソッドに認証コード(cflogin タグ、またはこのタグを呼び出すコードなど)を記述します。これによって、各リクエストの開始時にユーザーが認証されるようになります。セキュリティおよびログイン作成の詳細については、Securing Applications を参照してください。Adobe Dreamweaver の CF ログインウィザードで生成した認証コードを使用する例については、『CFML リファレンス』の onRequestStart を参照してください。

onRequest メソッドの使用

onRequest メソッドには、onRequestStart メソッドとの重要な違いが 1 つあります。それは、onRequest メソッドによってユーザーのリクエストがさえぎられるという点です。これは、次の 2 つのことを意味します。

  • リクエストを明示的に(例えば cfinclude タグを使用して)呼び出さない限り、リクエストは処理されません。したがって、onRequest メソッドを使用することで、リクエストされたページコンテンツをフィルター処理したり、表示するページまたはページコンテンツを決定するスイッチを実装することができます。
  • cfinclude を使用してリクエストを処理すると、その CFC インスタンスとリクエストされたページの間で Variables スコープが共有されます。したがって、その CFC のすべてのメソッドからそのページの Variables スコープの変数を設定できます。また、onRequestEnd メソッドを使用して、インクルードページで設定または変更された Variable スコープの任意の変数にアクセスできます。例えば、ページ内で使用される変数を onRequestStart メソッドまたは onRequest メソッドで設定することができます。
    このメソッドをフィルターとして使用するには、次の例のように cfsavecontent タグの内側に cfinclude タグを記述します。

<cffunction name="onRequest">
<cfargument name = "targetPage" type="String" required=true/>
<cfsavecontent variable="content">
<cfinclude template=#Arguments.targetPage#>
</cfsavecontent>
<cfoutput>
#replace(content, "report", "MyCompany Quarterly Report", "all")#
</cfoutput>
</cffunction>

詳しくは、『CFML リファレンス』の onRequest を参照してください。

onRequestEnd メソッドの使用

onRequestEnd メソッドでは、各リクエストの終了時に実行するコードを記述します。ColdFusion MX 6.1 までのバージョンでは、そのようなコードは "OnRequestEnd.cfm" ページに記述していました。このメソッドの代表的な用途としては、ダイナミックなフッタページの挿入などがあります。例については、『CFML リファレンス』の onSessionEnd を参照してください。

注意:Application.cfm ファイルに onRequest メソッドを記述しなかった場合、onRequestEnd メソッドとリクエストされたページの間で Variables スコープは共有されません。ただし、Request スコープの変数は共有されます。

詳しくは、『CFML リファレンス』の onRequestEnd を参照してください。

Application.cfc でのエラー処理

以降の節では、Application.cfc でエラーを処理する方法について簡単に説明します。エラーページとエラー処理の詳細については、エラーの処理を参照してください。onError メソッドを実装する方法の詳細については、『CFML リファレンス』の onError を参照してください。

Application.cfc でのエラー処理方法

Application.cfc では、次の方法を組み合わせてエラーを処理します。

  • イベントメソッド(onApplicationStart、onRequestStart など)の中で try/catch エラー処理を使用して、イベントメソッド内で発生する例外を処理します。
  • onError メソッドを実装します。CFML コード内の try/catch ハンドラーで直接処理されない例外は、すべてこのメソッドに送られます。このメソッドは、cfthrow タグを使用して、そこで処理しないエラーをすべて ColdFusion に渡して {{}} を処理させることができます。
  • cferror タグは、アプリケーションの初期化コード内で使用します。これは cfcomponent タグの後の、通常はアプリケーションの This スコープ変数を設定するコードの後に記述します。これらのタグでは、onError メソッドを実装しない場合のエラー処理方法、または onError メソッドでエラーが発生した場合の処理方法を指定します。また、アプリケーション固有の検証エラーハンドラーを実装することもできます。それには、たとえば次のようなタグを CFC の初期化コード内に記述します。

    <cferror type="VALIDATION" template="validationerrorhandler.cfm">

  • 以上のいずれの方法でも処理されないエラーは、ColdFusion のデフォルトのエラーメカニズムによって処理されます。デフォルトのメカニズムには、サイト全体のエラーハンドラー(ColdFusion Administrator で指定)や、ビルトインのデフォルトエラーページなどがあります。
    これらの方法を使用すれば、エラーメッセージにアプリケーション固有の情報(連絡先情報、アプリケーションやバージョンの識別子など)を含めることができ、また、アプリケーション内のすべてのエラーメッセージを一貫した方法で表示できます。Application.cfc ページを使用することで、アプリケーション全体にわたる高度なエラー処理を実装できます。たとえば、エラー処理メソッドで特定のメッセージを表示したり、構造化されたエラー処理メカニズムを実現することができます。

注意:onError メソッドは、アプリケーションイベントメソッド onSessionEnd および onApplicationEnd 内で発生したエラーを処理しますが、リクエストコンテキストが存在していないので、ユーザーに対してメッセージは表示されません。onError 関数を使用すると、セッション終了時またはアプリケーション終了時に発生したエラーがログに記録されます。

onError メソッドによるサーバーサイド検証エラーの処理

サーバー側検証エラーは、実際には ColdFusion 例外です。したがって、アプリケーションで onError メソッドを使用している場合はこのメソッドにエラーが送られるので、そこで処理するか ColdFusion に渡して処理させる必要があります。
サーバー側検証エラーを識別するには、Arguments.Exception.StackTrace フィールドに coldfusion.filter.FormValidationException が含まれるかどうかを確認します。その後、エラーを onError ルーチンで直接処理するか、またはこのエラーを再度投げて、ColdFusion デフォルトの検証エラーページか、Application.cfc 初期化コードの cferror タグで指定したページに処理させます。

例:onError メソッドによるエラー処理

次に示す Application.cfc ファイルには、エラーを次のように処理する onError メソッドが含まれています。

  • サーバー側検証エラーである場合は、ColdFusion にエラーを投げて処理させ、その結果として標準の検証エラーメッセージを表示します。
  • その他のタイプの例外である場合は、エラーが発生したイベントメソッドの名前を表示し、例外情報をダンプします。この例では、Application.cfc のメソッドではなく CFM ページでしかエラーを生成していないので、イベント名は常に空の文字列になります。

<cfcomponent>
<cfset This.name = "BugTestApplication">
<cffunction name="onError">
<!--- The onError method gets two arguments:
An exception structure, which is identical to a cfcatch variable.
The name of the Application.cfc method, if any, in which the error
happened.
<cfargument name="Except" required=true/>
<cfargument type="String" name = "EventName" required=true/>
<!--- Log all errors in an application-specific log file. --->
<cflog file="#This.Name#" type="error" text="Event Name: #Eventname#" >
<cflog file="#This.Name#" type="error" text="Message: #except.message#">
<!--- Throw validation errors to ColdFusion for handling. --->
<cfif Find("coldfusion.filter.FormValidationException",
Arguments.Except.StackTrace)>
<cfthrow object="#except#">
<cfelse>
<!--- You can replace this cfoutput tag with application-specific
error-handling code. --->
<cfoutput>
<p>Error Event: #EventName#</p>
<p>Error details:<br>
<cfdump var=#except#></p>
</cfoutput>
</cfif>
</cffunction>
</cfcomponent>

この例をテストするには、次のコードを含んだ CFML ページを Application.cfc ファイルと同じページに作成し、テキスト入力フィールドに、有効なテキストや有効でないテキストを入力します。

<cfform>
This box does Integer validation:
<cfinput name="intinput" type="Text" validate="integer" validateat="onServer"><br>
Check this box to throw an error on the action page:
<cfinput type="Checkbox" name="throwerror"><br>
<cfinput type="submit" name="submitit">
</cfform>
<cfif IsDefined("form.fieldnames")>
<cfif IsDefined("form.throwerror")>
<cfthrow type="ThrownError" message="This error was thrown from the bugTest action page.">
<cfelseif form.intinput NEQ "">
<h3>You entered the following valid data in the field</h3>
<cfoutput>#form.intinput#</cfoutput>
</cfif>
</cfif>

注意:サーバー側検証エラーについて詳しくは、データの検証を参照してください。

例:完全な Application.cfc

次の例は、すべてのアプリケーションイベントハンドラーの基本的な使用方法を示す、単純な Application.cfc ファイルです。

<cfcomponent>
<cfset This.name = "TestApplication">
<cfset This.Sessionmanagement=true>
<cfset This.Sessiontimeout="#createtimespan(0,0,10,0)#">
<cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">

<cffunction name="onApplicationStart">
<cftry>
<!--- Test whether the DB that this application uses is accessible
by selecting some data. --->
<cfquery name="testDB" dataSource="cfdocexamples" maxrows="2">
SELECT Emp_ID FROM employee
</cfquery>
<!--- If we get database error, report it to the user, log the error
information, and do not start the application. --->
<cfcatch type="database">
<cfoutput>
This application encountered an error.<br>
Please contact support.
</cfoutput>
<cflog file="#This.Name#" type="error"
text="cfdocexamples DB not available. message: #cfcatch.message#
Detail: #cfcatch.detail# Native Error: #cfcatch.NativeErrorCode#">
<cfreturn False>
</cfcatch>
</cftry>
<cflog file="#This.Name#" type="Information" text="Application Started">
<!--- You do not have to lock code in the onApplicationStart method that sets Application scope variables. --->
<cfscript>
Application.availableResources=0;
Application.counter1=1;
Application.sessions=0;
</cfscript>
<!--- You do not need to return True if you don't set the cffunction returntype attribute. --->
</cffunction>

<cffunction name="onApplicationEnd">
<cfargument name="ApplicationScope" required=true/>
<cflog file="#This.Name#" type="Information"
text="Application #ApplicationScope.applicationname# Ended">
</cffunction>


<cffunction name="onRequestStart">
<!--- Authentication code, generated by the Dreamweaver Login Wizard,
makes sure that a user is logged in, and if not displays a login page. --->
<cfinclude template="mm_wizard_application_include.cfm">
<!--- If it's time for maintenance, tell users to come back later. --->
<cfscript>
if ((Hour(now()) gt 1) and (Hour(now()) lt 3)) {
WriteOutput("The system is undergoing periodic maintenance.
Please return after 3:00 AM Eastern time.");
return false;
} else {
this.start=now();
}
</cfscript>
</cffunction>

<cffunction name="onRequest">
<cfargument name = "targetPage" type="String" required=true/>
<cfsavecontent variable="content">
<cfinclude template=#Arguments.targetPage#>
</cfsavecontent>
<!--- This is a minimal example of an onRequest filter. --->
<cfoutput>
#replace(content, "report", "MyCompany Quarterly Report", "all")#
</cfoutput>
</cffunction>

<!--- Display a different footer for logged in users than for guest users or
users who have not logged in. --->

<cffunction name="onRequestEnd">
<cfargument type="String" name = "targetTemplate" required=true/>
<cfset theAuthuser=getauthuser()>
<cfif ((theAuthUser EQ "guest") OR (theAuthUser EQ ""))>
<cfinclude template="noauthuserfooter.cfm">
<cfelse>
<cfinclude template="authuserfooter.cfm">
</cfif>
</cffunction>

<cffunction name="onSessionStart">
<cfscript>
Session.started = now();
Session.shoppingCart = StructNew();
Session.shoppingCart.items =0;
</cfscript>
<cflock timeout="5" throwontimeout="No" type="EXCLUSIVE" scope="SESSION">
<cfset Application.sessions = Application.sessions + 1>
</cflock>
<cflog file="#This.Name#" type="Information" text="Session:
#Session.sessionid# started">
</cffunction>

<cffunction name="onSessionEnd">
<cfargument name = "SessionScope" required=true/>
<cflog file="#This.Name#" type="Information" text="Session:
#arguments.SessionScope.sessionid# ended">
</cffunction>

<cffunction name="onError">
<cfargument name="Exception" required=true/>
<cfargument type="String" name = "EventName" required=true/>
<!--- Log all errors. --->
<cflog file="#This.Name#" type="error" text="Event Name: #Eventname#">
<cflog file="#This.Name#" type="error" text="Message: #exception.message#">
<!--- Some exceptions, including server-side validation errors, do not
generate a rootcause structure. --->
<cfif isdefined("exception.rootcause")>
<cflog file="#This.Name#" type="error"
text="Root Cause Message: #exception.rootcause.message#">
</cfif>
<!--- Display an error message if there is a page context. --->
<cfif NOT (Arguments.EventName IS onSessionEnd) OR
(Arguments.EventName IS onApplicationEnd)>
<cfoutput>
<h2>An unexpected error occurred.</h2>
<p>Please provide the following information to technical support:</p>
<p>Error Event: #EventName#</p>
<p>Error details:<br>
<cfdump var=#exception#></p>
</cfoutput>
</cfif>
</cffunction>

</cfcomponent>

ヘルプをすばやく簡単に入手

新規ユーザーの場合

Adobe MAX 2025

Adobe MAX Japan
クリエイターの祭典

2025 年 2 月 13 日
東京ビッグサイト