スクリプト言語は、Java、C++、Visual Basic などのプログラミング言語と、HTML との中間に位置する言語です。一般に、HTML はテキストの整形やリンク付けに使われ、プログラミング言語は多数の複雑な命令をコンピュータに指示するために使われますが、スクリプト言語はいわばその中間的な役割を果すものです。ただし、関数などの機能を見ると単純な HTML 文書というよりもむしろプログラミング言語に近いものといえます。スクリプト言語とプログラミング言語との最大の違いは、スクリプト言語の構文や規則がプログラミング言語のものよりも厳密でなく、簡単であるという点です。
スクリプト エンジンは、スクリプトを処理する COM (Component Object Model) オブジェクトで構成されています。Active Server Pages では、スクリプト エンジンのためのホスト環境が提供され、.asp ファイルの中のスクリプトはこれらのエンジンに渡されて処理されます。スクリプト エンジンは、ASP のスクリプト処理で使われる個々のスクリプト言語ごとに専用のものを Web サーバー上にインストールする必要があります。たとえば、VBScript は Active Server Pages のデフォルト言語ですが、Active Server Pages が VBScript を処理できるように VBScript 用のエンジンが COM オブジェクトとして常駐しており、Active Server Pages から常にそのオブジェクトにアクセスできます。同様に、VBScript 以外の JScript、REXX、Perl などの言語についても、Active Server Pages でそれらの言語のためのスクリプト処理環境を提供することができます。
Active Server Pages によって、Web の開発者は、ブラウザがサポートしているスクリプト言語の種類に関係なく、開発に使用しているさまざまなスクリプト言語を使ってプロシージャを記述し、完成させることができます。つまり、1 つの .asp ファイルの中で複数の種類のスクリプト言語を使用できます。これには、スクリプト プロシージャの先頭で HTML タグを使い、スクリプト言語を識別するようにします。
また、スクリプトの読み取りおよび処理はサーバー側で行われるため、.asp ファイルを要求するクライアント ブラウザがそのスクリプトをサポートする必要がなくなります。
VBScript は、主要スクリプト用として使われるデフォルトのスクリプト言語です。主要スクリプトを使用する場合、区切り記号 <% および %> を使いますが、この場合これらのスクリプト区切り記号で囲まれた部分には VBScript のコマンドとして有効などのようなコマンドでも記述できます。そして、Active Server Pages は区切り記号内部にあるこれらのコマンドを VBScript として処理します。Active Server Pages では、任意のスクリプト言語を主要スクリプト言語として設定でき、ページ単位で設定するか、または使用している Web サーバー上の全ページに対して設定できます。
すべてのアプリケーションの全ページに対する主要スクリプト言語を変更するには、レジストリ内のエントリ DefaultScriptLanguage の値を変更する必要があります。このレジストリ エントリの詳細については、「レジストリ エントリの設定」を参照してください。
主要スクリプト言語の設定方法は、設定する言語が Object.Method の構文をサポートしているかどうかによって異なります。以下ではこれらの設定方法について詳しく説明します。
Object.Method 構文をサポートしており、パラメータをかっこで囲む VBScript や JScript などの言語の場合は、コマンド ラインを .asp ファイルの先頭に追加することで、その 1 ページに対する主要スクリプト言語を変更することができます。このコマンドの構文を次に示します。
<%@ LANGUAGE = ScriptingLanguage %>
ここで ScriptingLanguage は、対象となるページに設定する主要スクリプト言語です。
ページの主要スクリプト言語を設定するときは、次の点に注意してください。
@ と LANGUAGE の間に空白文字を入れる。
<% および %>) の間には、@、および LANGUAGE = ScriptingLanguage 以外の要素は記述しない。
ページの主要スクリプト言語の設定で以上の点が守られていない場合は、エラーとなります。
Object.Method 構文をサポートしていない言語を主要スクリプト言語として使用するためには、まず LanguageEngines レジストリ キーを作成し、対応する言語名のサブキーと値をそのキーに持たせることが必要です。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
\W3SVC
\ASP
\LanguageEngines
\LanguageName
Value: Write REG_SZ: Response.WriteEquiv |
Value: WriteBlock REG_SZ: Response.WriteBlockEquiv |
ここで LanguageName は、設定する言語の名前です。Response.WriteEquiv および Response.WriteBlockEquiv は、それぞれ言語の Response.Write および Response.WriteBlock の各構文に相当するものです。縦棒 (|) は、式および HTML ブロックを送るために Active Server Pages が使用する挿入記号です。通常、式および HTML ブロックは Response.Write メソッドおよび Response.WriteBlock メソッドを使って処理されます。以上のレジストリ作業は、別のスクリプト言語をインストールする際に自動的に行われることがあります。
注意 スクリプト言語の中には、空白文字や改行文字を厳密に区別するものがあります。このような言語の場合、上に示した方法でレジストリ エントリを変更しても、その言語を主要スクリプト言語として使用できないことがあります。このような場合には、スクリプト疑似命令 <% ... %> や HTML を Active Server Pages に自動的に処理させる代わりに、HTML ブロックを手動でブラウザに書き込むという方法によって、主要スクリプト言語として使用することができます。または、スクリプト言語の関数をタグ付きのスクリプト ブロック (<SCRIPT> ... </SCRIPT>) の内部に記述し、それらをほかの言語から呼び出すという方法もあります。
Active Server Pages の優れた機能の 1 つに、複数のスクリプト言語のプロシージャを 1 つの .asp ファイルの中にまとめておくことができる、という機能があります。この機能を使えば、個々のスクリプト言語の特長を活かしながら、特定の作業用のプロシージャを作成することができます。
プロシージャとは、特定の作業を実行するスクリプト コマンドの集まりのことです。スクリプトでは独自のプロシージャを定義し、それを何度も呼び出すことができます。プロシージャの定義は <SCRIPT> タグと </SCRIPT> タグの間で記述できますが、宣言したスクリプト言語の規則に従う必要があります。または、プロシージャを主要スクリプトと同じ言語で記述するのであれば、スクリプト区切り記号 (<% と %>) の内部で定義することも可能です。
プロシージャの定義は、そのプロシージャを呼び出す同じ .asp ファイルの中で記述することができます。また、頻繁に使うプロシージャを共有の .asp ファイルの中に置き、サーバーサイド インクルード ステートメント (<!--#INCLUDE FILE= ...) を使って、そのプロシージャを呼び出すほかの .asp ファイルに挿入することもできます。さらに、これらの機能を ActiveX サーバー コンポーネントにパッケージとして組み込むことも可能です。
プロシージャを呼び出すには、コマンド内にそのプロシージャの名前を記述します。
VBScript では、プロシージャを呼び出すときにキーワード Call を使うこともできます。ただし、呼び出そうとしているプロシージャで引数が必要な場合は、その引数のリストをかっこで囲む必要があります。また、キーワード Call を省略する場合は、対応する引数リストのかっこも必ず省略する必要があります。Call 構文を使って組み込み関数やユーザー定義関数を呼び出した場合、その関数の戻り値は破棄されます。VBScript から JScript のプロシージャを呼び出す場合は、プロシージャ名の後に必ずかっこを付ける必要があります。引数がない場合には空のかっこ () を指定してください。
次の例では、2 つのスクリプト言語 (VBScript と JScript) を使ってプロシージャの作成と呼び出しを行っています。
<HTML>
<BODY>
<TABLE>
<% Call Echo %>
</TABLE>
<% Call PrintDate %>
</BODY>
</HTML>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Echo
Response.Write _
"<TR><TD>Name</TD><TD>Value</TD></TR>"
Set Params = Request.QueryString
For Each p in Params
Response.Write "<TR><TD>" & p & "</TD><TD>" & _
Params(p) & "</TD></TR>"
Next
End Sub
</SCRIPT>
<SCRIPT LANGUAGE=JScript RUNAT=Server>
function PrintDate()
{
var x
x = new Date()
Response.Write(x.toString())
}
</SCRIPT>
注意 VBScript で配列全体をプロシージャに渡すには、配列名の後に空のかっこ () を付けて指定します。JScript の場合は空の角かっこ [] を付けて指定します。
サーバー上で ASP とともに VBScript を使う際は、VBScript の 2 つの機能が使えなくなります。これは、Active Server Pages のスクリプトはサーバー上で実行されますが、このときユーザー インターフェイスを提供する InputBox と MsgBox の 2 つの VBScript ステートメントがサポートされなくなるためです。また、VBScript の関数 CreateObject および GetObject もサポートされなくなります。これらのステートメントを使った場合はエラーとなります。
VBScript の演算子、関数、ステートメント、オブジェクト、プロパティ、およびメソッドの一覧とそれらの詳細については、「VBScript ランゲージ リファレンス」を参照してください。
JScript の演算子、関数、ステートメント、オブジェクト、プロパティ、およびメソッドの一覧とそれらの詳細については、「JScript ランゲージ リファレンス」を参照してください。
VBScript では、Basic 言語の REM 形式およびアポストロフィ形式のコメントがサポートされています。HTML のコメントとは異なり、これらのコメントはスクリプトが処理されるときに削除されるため、クライアントに送られることはありません。
<%
REM この行と次の 2 行はコメント
'PrintTable 関数は配列中の
'全要素を出力します。
Call PrintTable(myarray())
%>
<%= で始まるため正しく動作しません。
<% i = i +1 'i の値を 1 増やす。このスクリプトは正しく動作する。%>
<%= name 'これは変数名を出力する。このスクリプトは失敗する。%>
JScript では、コメント文字 // がサポートされています。これらの文字を各コメント行ごとに使います。
<% Call PrintDate %>
<SCRIPT LANGUAGE=JScript RUNAT=Server>
function PrintDate()
{
var x
x = new Date()
Response.Write(x.getDate())
}
// プロシージャ PrintDate のための定義。
// このプロシージャは現在の日付をクライアント側ブラウザに送る。
</SCRIPT>