サーバーサイドインクルード  

サーバーサイドインクルードを使用すると、前処理ディレクティブと同じように、ファイルの最終変更日などのさまざまな値、または完全なファイルをスクリプトに組み込むことができます。IIS でサポートされるサーバーサイドインクルードディレクティブは次のとおりです。

#config

クライアントブラウザに返されるエラーメッセージ、日付、およびファイルサイズのフォーマットを設定します。

#echo

環境変数の値をクライアントの HTML ページに挿入します。これは Request オブジェクトの ServerVariables コレクションのさまざまな要素と同じです。

#exec

コマンドラインのシェルコマンドまたはアプリケーションの結果を挿入します。

#flastmod

現在のページの最終更新日時を挿入します。

#fsize

現在のファイルのファイルサイズを挿入します。

#include

別のファイルのコンテンツを現在のファイルに挿入します。

すべてのディレクティブが HTML で許可されます。ただし、HTML および ASP ページの両方で許可されるのは、#include ディレクティブのみです。ここでは、#include ディレクティブのみについて説明します。

サーバーサイドインクルード : コメントおよびトラブルシューティング  
 
 

ファイルの組み込みは、再利用可能なコードを記述するための優れた方法です。この方法は、ほとんどすべてのスクリプトのコードで、データベースへの接続を確立する、必要がなくなったときに接続を閉じる、などの目的で頻繁に使用されます。サーバーサイドインクルードファイルは特定のファイル拡張子で終わる必要はありませんが、Microsoft では、プロジェクトで ASP スクリプトとインクルードファイルの簡単に管理できるセットを維持する方法として、.INC 拡張子を推奨しています。サーバーサイドインクルードファイルでは、巡回インクルードを実行したり、本章で前述した前処理ディレクティブを含むことはできません。ファイルのセットはお互いのファイルを組み込むことはできません。

#include  
<!-- #include PathType = "strFileName" -->
 
<!-- #include PathType = "strFileName" -->

#include サーバーサイドインクルードを使用すると、指定したファイルのコンテンツを HTML コンテンツまたは ASP スクリプトに挿入できます。#includeサーバーサイドインクルードのステートメントは HTML コメントで囲む必要があります。このようにしないと、サーバーサイドインクルードのテキストはそのまま表示されます。

 
パラメータ
PathType

strFileName パラメータで指定されるパスのタイプ。PathType の使用可能な値を、次の表に示します。

PathType の値

説明

File

strFileName パラメータの値を現在のディレクトリからの相対パスとして扱います。

Virtual

strFileName パラメータの値を完全な仮想パスとして扱います。

strFileName

strFileName パラメータは、HTML コンテンツに挿入するコンテンツがあるファイル名を表します。

IIS 5.0 では、ファイルを組み込むための 2 番目の方法が導入されました。次のフォーマットで <SCRIPT> タグを SRC 属性と組み合わせて使用できます。

<SCRIPT LANGUAGE = "VBScript" RUNAT=SERVER SRC="strFileName">
</SCRIPT>

前のコードでは、strFileName パラメータは INCLUDE ディレクティブで使用されるものと同じであり、絶対パスまたは相対パスとすることができます。

 
例 1

次のスクリプトには、単純な "先頭に戻る" のコード行、水平線、およびグラフィックのみが含まれています。

<!--ReturnTop.INC -->
<CENTER>
<HR>
Click <A HREF = #top>here</A> to go back to the top of the page.<BR>
<IMG SRC = "/Images/CorpLogo.GIF"></CENTER><BR>

このファイルを、ページの先頭に戻る必要がある任意の部分に組み込むことができます。

<HTML>
<HEAD><TITLE>Include Example</TITLE></HEAD>
<BODY>
<%
[CODE TO RETRIEVE GLOSSARY TERMS FROM SQL SERVER DATABASE]
' Filter the recordset to include only the A's.
adoRecGlossary.Filter = "UPPER(SUBSTRING(GlossTerm, 1)) = 'A'"

' Iterate through the items in the filtered recordset.
Do While Not adoRecGlossary.EOF
%>
    Term: <%=adoRecGlossary("GlossTerm")%><BR>
    Definition: <%=adoRecGlossary("GlossDef")%><BR>
<%  
    adoRecGlossary.MoveNext
Loop

' Next include the link to top file:
%>
<!-- #include virtual = "/Includes/ReturnTop.INC" -->

<%
' Repeat for the next letter...
. . . [additional code]
%>
</BODY>
</HTML>
 
例 2

次のスクリプトには、SRC メソッドと組み合わせた <SCRIPT> タグを使用してファイルに組み込まれる ASP コードが含まれています。

' ReturnTop2.INC
Response.Write "<CENTER>"
Response.Write "<HR>"
Response.Write "Click <A HREF = #top>here</A> to go back to the top of the page.<BR>"
Response.Write "<IMG SRC = "/Images/CorpLogo.GIF"></CENTER><BR>"

このファイルを、ページの先頭に戻る必要がある任意の部分に組み込むことができます。

<HTML>
<HEAD>
<TITLE>Include Example 2</TITLE>
</HEAD>
This page will now include a file...<BR>
<SCRIPT LANGUAGE="VBScript" RUNAT="SERVER" SRC="ReturnTop2.INC">
</SCRIPT>
.
.
.
 
メモ

INCLUDE ディレクティブを使用すると、HTML または ASP コード、あるいはその 2 つの組み合わせが含まれたファイルを組み込むことができます。前述の例のように SCRIPT タグを使用して組み込むファイルには、ASP コードのみが含まれている必要があります。

例では、インクルードファイルを使用して、必要となる冗長な作業の量を減らす方法を示していますが、これらの例は非常に単純です。別の例として、データベースの DSN、ユーザー名、およびパスワードを含むインクルードファイルがあるとします。このインクルードファイルは、サイト全体で使用できます。これにより、ユーザー名とパスワードの変更が非常に簡単になります。つまり、インクルードファイル内で変更するだけで済みます。

#includeサーバーサイドインクルードを使用して ASP のコンテンツを組み込む場合は、いずれのスクリプトでも <%...%> のペアを使用する必要があります。それ以外の場合、ファイルのコンテンツは通常の HTML コードとして扱われます。

このサーバーサイドインクルードの 1 つの使用方法として、データベースアクセス情報など、頻繁に使用するスクリプトの部分をローカライズする方法があります。この方法を使用すると、ユーザー名とパスワードをすばやく効率的に変更できます。#include サーバーサイドインクルードをこの方法で使用する場合は、組み込むファイルが適切に保護されていることを確認します。

別のファイルに組み込まれるファイル内にファイルを組み込むことができます。指定したファイルのコンテンツを同じスクリプトに複数回組み込むこともできます。この 1 つの例が、単純なエラー処理スクリプトにあります。たとえば、次のファイルを考えます。

<%
If Err.Number <> 0 Then
%>
<HTML>
<HEAD><TITLE>Error Notice</TITLE></HEAD>
<BODY>
There has been an error in your script (<%=Request.
ServerVariables("SCRIPT_NAME")%>.<BR>
Please contact customer service at 1-800-555-HELP and tell 
them that you've experienced an error in (<%=Request.
ServerVariables("SCRIPT_NAME")%> and that the parameters sent to the 
script were the following:<BR>
(<%=Request.ServerVariables("QUERY_STRING")%>.<BR><BR>
We apologize for the inconvenience.
</BODY>
</HTML>
<%
End If
%>

このファイル (この例では ERROR.INC) は、スクリプトでエラーが発生する可能性のある任意の場所に組み込むことができます。たとえば、次のコード ERROR.INC は、ADO 接続が確立され、Recordset オブジェクトが作成された後に組み込まれます。この形式のエラートラップが動作するためには、Response オブジェクトの Buffer プロパティが True に設定されている必要があります。

<%Response.Buffer = True%>
<HTML>
<HEAD><TITLE>Database Info Page</TITLE></HEAD>
<BODY>
<%
Set adoCon = Server.CreateObject("ADODB.Connection")
AdoCon.Open "MyDatabase"
%>
<!-- #include virtual = "/Accessory/ERROR.INC" -->
<%
Set adoRec = adoCon.Execute ("SELECT * FROM TopSales")
%>
<!-- #include virtual = "/Accessory/ERROR.INC" -->
<%
. . . [additional code]
%>
</BODY>

このスクリプトでは、データベース接続を開いたときか、レコードセットを作成するときにエラーが発生した場合、標準のエラー通知およびヘルプの電話番号が含まれた、ERROR.INC ファイルのコンテンツがユーザーに表示されます。

ファイルを組み込むときは、組み込まれたファイルに現在のファイルが含まれないようにします。現在のファイルが含まれていると、Web サーバーでサービスを停止するエラーが発生し、Web サービスを停止して再開始しなければならなくなります。

また、サーバーサイドインクルードが任意のスクリプトコードよりも前に処理されるようにすることが重要です。このため、組み込むファイルを動的に指定することはできません。たとえば、次のスクリプトではランタイムエラーになります。

<%
Dim strFileName
strFileName = "/Apps/CustomConstants.INC"
%>
<!-- #include file="<%=strFileName%>"-->

最後に、サーバーサイドインクルードはスクリプト区切り文字 (<%...%>)、<SCRIPT></SCRIPT> タグ、および <OBJECT></OBJECT> タグの外側に配置する必要があります。たとえば、次のコードではランタイムエラーが発生します。このコードには閉じる %> 区切り文字がありません。

<%
Dim strLastName
strLastName = "Weissinger"

<!-- #include file="/Apps/CustomConstants.INC"-->

次のコードでもエラーが発生します。

<SCRIPT LANGUAGE="VBScript">
Sub btnHello_Click( )
   Dim strLastName
    strLastName = "Weissinger"

    <!-- #include file="/Apps/CustomConstants.INC"-->

End Sub
</SCRIPT>

これは、HTML と ASP ファイルの両方で使用できる唯一のサーバーサイドインクルードです。ファイルで #include サーバーサイドインクルードを使用する場合、そのファイルの拡張子は、サーバーサイドインクルードを解釈するダイナミックリンクライブラリ SSINC.DLL にマップされる拡張子の 1 つである必要があります。