前処理ディレクティブ  

ASP (Active Server Pages : アクティブサーバーページ) には、C 言語および類似言語のコンパイラディレクティブとよく似た前処理ディレクティブが用意されています。ASP ディレクティブは、上記のプリコンパイルディレクティブと同様に、スクリプトが完了しクライアントに送信される前にある機能を実行するように、Web サーバーに指示します。Web サーバーは、スクリプト自身を解釈する前に他のディレクティブを実行します。<%= expression %> を除く ASP ディレクティブは、スクリプトの先頭行に置く必要があり、サーバーサイドインクルードファイルを使用して指定することはできません。これらのディレクティブのフォーマットは、前述の <%= expression %> ディレクティブを除き、次のとおりです。

<%@ DIRECTIVE=Value%>

ここで、DIRECTIVE はこのセクションで示す ASP ディレクティブの 1 つであり、Value はこのディレクティブの有効値です。@ 文字とディレクティブの間には、空白を入れる必要があります。また、前処理ディレクティブは、<%...%> 区切り文字内に配置する必要があります。

有効な ASP 前処理ディレクティブは次のとおりです。詳細については本章の後で説明します。

  • CODEPAGE
  • ENABLESESSIONSTATE
  • LANGUAGE
  • LCID
  • TRANSACTION
前処理ディレクティブ : コメントおよびトラブルシューティング  
 
 

@ 文字とディレクティブ間の空白、およびディレクティブをスクリプトの先頭行に配置するという要件は、構文的には ASP ディレクティブの最も重要な特徴です。このディレクティブを使用したときに発生する最も一般的なエラーは、空白を挿入しなかったか、スクリプトの先頭行にディレクティブを指定しなかったことによります。

<%= expression %>, を除く複数のディレクティブをスクリプトの先頭行に配置する必要がある場合に、どのようにそれらのディレクティブを指定するのかを自問するかもしれません。複数のディレクティブを指定するには、次の構文を使用します。

<%@ DIRECTIVE1=ValueDIRECTIVE2=Value %>

各ディレクティブの間に少なくとも 1 つの空白を挿入する必要があります。また、等号 (=) の前後に空白を挿入することはできません。

CODEPAGE  
<%@CODEPAGE=uintCodePage%>
 

サーバー上のスクリプトの解釈に使用する文字セット (またはコードページ) を設定します。各種の言語とロケールは、固有のコードページを使用します。このディレクティブには、サーバー上のスクリプトを解釈する機能が備わっています。この機能は、Session オブジェクトの CodePage プロパティにある、クライアントに送信された HTML をクライアント側で解釈する機能と類似しています。ただし、CODEPAGE 前処理ディレクティブがスクリプト自身の解釈方法を示すのに対して、Session オブジェクトの CodePage プロパティは結果の HTML の処理方法を示すことに注意してください。

 
パラメータ
uintCodePage

符号なしの整数値で、ASP スクリプトを実行している Web サーバー用の有効なコードページに対応します。

 
<%@ CODEPAGE=932%>

' This code sets the code page to OEM 932, which is
' used for Japanese Kanji.
 
メモ

同じスクリプト内に、CODEPAGE ディレクティブと Session オブジェクトの CodePage プロパティの両方を指定できます。この場合、CODEPAGE ディレクティブの符号なしの整数セットを使用してサーバー側のスクリプトを解釈し、Session オブジェクトの CodePage プロパティのコードページセットを使用してクライアント情報を解釈できます。

 
ENABLESESSIONSTATE  
<%@ ENABLESESSIONSTATE=True|False%>
 

ユーザー固有のセッション情報の格納をオン (True) またはオフ (False) にします。この値はデフォルトで True です。

 
パラメータ

なし

 
<%@ ENABLESESSIONSTATE=False%>

' This code prevents the web server from storing
' user session information.
 
メモ

レジストリでもセッション状態の格納を有効にできますが、このディレクティブでは、より大幅な柔軟性がしかもスクリプトごとに得られます。レジストリ設定を使用してセッション状態の情報を制御している場合、このディレクティブを使用すると、その設定が上書きされます。

このディレクティブを False に設定すると、情報をセッションスコープの変数またはオブジェクトに格納できなくなります。このため、必要に応じて、各ユーザー情報を保持するために他のメソッドに依存する必要があります。ただし、次に示すいくつかの利点があります。

    クッキーを使用しているクライアントのブラウザに依存しません。

    Web サーバーによるサーバースクリプトの処理速度が増大します。

 
LANGUAGE  
<%@ LANGUAGE=ScriptingEngine%>
 

ASP 内のスクリプトの処理で Web サーバーが使用する、デフォルトのスクリプトエンジンを設定します。デフォルトで VBScript に設定されます。

 
パラメータ
ScriptingEngine

IIS (インターネットインフォメーションサーバー) が認識できる有効なスクリプトエンジンです。有効なスクリプトエンジンとしては、VBScript、JScript、PerlScript、Python、および REXX があります。

 
<%@ LANGUAGE="JScript"%>

' This code sets the language for the current page to
' JScript, Microsoft's interpretation of the JavaScript
' scripting language. All script on this page will be 
' interpreted using the JScript DLL.
 
メモ

LANGUAGE ディレクティブを設定しても、スクリプトページ上で他のスクリプトエンジンの使用が禁止されるわけではありません。現在のページ上のスクリプトを解釈するデフォルトのスクリプトエンジンが設定されるだけです。次の例では、ページのデフォルトのスクリプトエンジンを JScript に設定しながら、特定のプロシージャに VBScript を使用する方法を示します。

<%@ LANGUAGE="JScript"%>
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub ShowReport( )
	' This script will be interpreted using the VBScript 
	' scripting engine. 
End Sub
</SCRIPT>

また、LANGUAGE ディレクティブの値を設定しても、クライアント側で使用されるスクリプトエンジンには影響を与えません。たとえば、サーバー側のスクリプトの LANGUAGE を PerlScript に設定した場合でも、次の例のようにクライアント側の <SCRIPT> タグの LANGUAGE 属性を JScript に設定できます。

<%@ LANGUAGE="PerlScript"%>

<%
' All server-side script is interpreted using the PerlScript
' scripting engine.
%>

HTML here...
<SCRIPT LANGUAGE="JScript">
function btnReport_onClick
    ' This script will be interpreted using the JScript 
    ' scripting engine.
End Sub
</SCRIPT>

IIS では、VBScript と JScript のスクリプトエンジンのみインストールされています。他のすべてのスクリプトエンジンは、別途取得してインストールする必要があります。

 
LCID  
<%@ LCID=dwordLCID%>
 

指定されたスクリプトに有効なロケール ID を設定します。このディレクティブは、サーバー側のデータに使用する各種のフォーマット (日付、時刻など) を指定します。

 
パラメータ
dwordLCID

有効なロケール ID を表すダブルワード値 (32 ビット符号なし)です。

 
<%@ LCID=1036%>

' This code sets the locale ID for the server-side
' script to that for French.
 
メモ

CODEPAGE ディレクティブを設定しても、Session オブジェクトの CodePage プロパティ、およびクライアント側で使用される文字セットに影響がないのと同様、LCID ディレクティブを設定しても、 クライアント側で使用される LCID に影響はありません。ただし、LCID 前処理ディレクティブがスクリプト自身の解釈方法を示すのに対して、Session オブジェクトの LCID プロパティは結果の HTML の処理方法を示すことに注意してください。

 
TRANSACTION  
<%@ TRANSACTION=strValue%>
 

スクリプト全体を単一のトランザクションとして処理するように、Web サーバーに指示します。スクリプトでトランザクションを必要とするように設定すると、Web サーバーは Microsoft Transaction Server を使用して、スクリプト全体を 1 つの単位 (またはトランザクション) として処理するか、まったく処理しないようにします。現時点では、トランザクションでデータベース操作のみ可能です。

 
パラメータ
strValue

strValue パラメータに指定できる値は次のとおりです。

Required

現在のスクリプトでトランザクションが必要なことを Web サーバーに指示します。

Requires_New

現在のスクリプトで新しいトランザクションが必要なことを Web サーバーに指示します。

Supported

トランザクションを開始しないことを Web サーバーに指示します。

Not_Supported

トランザクションを開始しないことを Web サーバーに指示します。

 
<%@ TRANSACTION=Required%>

' This code instructs the web server to start a new
' transaction for the current script.
 
メモ

TRANSACTION ディレクティブの値は文字列ではありません。このため、空白を含む値にはアンダースコアを使用する必要があります (Requires_New および Not_Supported)。第 6 章で説明したように、トランザクション内では 1 つのスクリプトのみカプセル化できます。TRANSACTION ディレクティブがトランザクションスクリプトの最初の行に指定されていることを確認する必要があります。それ以外の場合、エラーが発生します。最後に、トランザクション内の GLOBAL.ASA コードはカプセル化できません。

トランザクション内でカプセル化されたスクリプトでエラーが発生した場合、Microsoft Transaction Server は、トランザクションをサポートする任意のアクションをロールバックします。現時点では、データベースアクションのみトランザクションをサポートします。たとえば、MTS ベースのトランザクションでは、すべてのディスク処理がサポートされているわけではなく、これらの処理は手動でロールバックする必要があります。