Server オブジェクト |
Server オブジェクトには、Active Server Pages アプリケーションで使用できる、その他のいくつかの機能が用意されています。そのメソッドのほとんどはまれにしか使用されませんが、CreateObject、Execute、および Transfer の 3 つのメソッドと、Server オブジェクトの 1 つのプロパティ ScriptTimeout は非常に有用です。これらは、多くのスクリプトで使用します。 Server オブジェクトは、その名前が示すように Web サーバーそのものを表し、その多くの機能は、クライアント要求やサーバー応答の通常の処理の際に Web サーバー自体が使用する機能です。

コメントおよびトラブルシューティング |
Server オブジェクトのプロパティとメソッドの使用は単純です。通常、Server オブジェクトの機能を正しい構文と共に使用すると、意図したとおりの結果が得られます。エラーが発生した場合は、IIS そのものの設定やインストールに問題があることを示しています。

ScriptTimeout |
Server.ScriptTimeout [ = lngNumSeconds]
Web サーバーがスクリプトの処理を継続する最大時間を示します。このプロパティの値を設定しない場合、初期設定値は 90 秒になります。
パラメータ
lngNumSeconds タイムアウトしてクライアントに ASP エラーを送信するようになるまでの、Web サーバーがスクリプトの処理を継続する秒数。
例
    <%

    ' The following code sets the amount of time before the
    ' script times out to 100 seconds. If the script takes
    ' more time than 100 seconds, the script will time out and
    ' a timeout error will be sent to the client.
    Server.ScriptTimeout = 100

    %>
メモ
ScriptTimeout プロパティ値の設定に使用する数値は、 IIS メタベースの AspScriptTimeout プロパティで設定する数値以上である必要があります。それ以外の場合、設定は無視されます。たとえば、IIS メタベースでの AspScriptTimeout の初期設定値は 90 秒です。ScriptTimeout プロパティを使用して、メタベースでの設定を最初に変更しないでこの時間を 10 秒に減少しても、スクリプトは 90 秒後にタイムアウトします。 IIS メタベースの AspScriptTimeout プロパティの値を減少することを検討する必要があります。90 秒は、Web 要求の処理を待機するには長い時間です。1 分半も待つことができるユーザーはほとんどいないものです。ただし、アプリケーションで長いタイムアウト設定が必要な場合は、一時的な "お待ちください . . ." ページを使用し、その OnLoad イベントがその次に長いスクリプトまたは ASP ページを呼び出すようにします。これにより、待機時間が長くなることを伝える通知をユーザーに表示できます。 この技法について次のコードで示します。InfoSearch.ASP スクリプトを呼び出す必要があるとします。また、このスクリプトは 1 つのパラメータ strSrchItem を受け取り、このタスクを完了するには最大 2 分かかるとします。InfoSearch.ASP をすぐに呼び出す代わりに、次のページを呼び出すことができます。
    <HTML>
    <HEAD><TITLE>Search Wait</TITLE></HEAD>
    <BODY LANGUAGE="VBScript" OnLoad = "PageLoad( )">
    Please wait, your request is being processed...
    <SCRIPT LANGUAGE="VBScript">
    Sub PageLoad( )
    Parent.Location.HREF = _
    "InfoSearch.ASP?<%=Request.ServerVariables("QUERY_STRING")%>"
    End Sub
    </SCRIPT>
    </BODY>
    </HTML>
このスクリプトが読み込まれると、長いスクリプトのページが呼び出され、Request オブジェクトの ServerVariables コレクションから取得された元のクエリー文字列が送信されます。詳細については、第 7 章を参照してください。これにより、スクリプトが処理を完了するまで空白の画面を表示することなく、すぐにユーザーにフィードバックを提供できます。

CreateObject |
Set objMyObject = Server.CreateObject(strProgId)
サーバー上のオブジェクトをインスタンス化します。オブジェクトがインスタンス化されると、ASP の組み込みオブジェクトのプロパティやメソッドを使用するのと同じように、そのプロパティとメソッドを使用できるようになります。これらのオブジェクトをインスタンス化する DLL は、IIS のインストールとは別に Web サーバーコンピュータにインストールおよび登録する必要があります。
パラメータ
  objMyObject インスタンス化するオブジェクトへの参照を含む変数の名前。 strProgId オブジェクトをインスタンス化するクラスのプログラム ID。strProgId パラメータのフォーマットは次のとおりです。
      [LibraryName.]Component[.Version]
  この値はレジストリにあり、レジストリでコンポーネントの DLL が登録される方法を表します。DLL 名を含むこともありますが、多くの場合は含みません。たとえば、Ad Rotator オブジェクトをインスタンス化する DLL は adrot.dll です。ただし、その ProgID は、次のレジストリキーの初期設定値で定義されるように MSWC.AdRotator.1 になります。
      HKEY_CLASSES_ROOT\CLSID\{1621F7C0-60AC-11CF-9427-444553540000}\ProgID
これは、登録された DLL の ProgID であり、登録名に加えてバージョン情報も含まれます。ただし、使用するコンピュータに同じ DLL の複数の異なるバージョンが登録されることがあります。このような場合、VersionIndependentProgID レジストリキーの初期設定値を使用して、最新バージョンの DLL をインスタンス化できます。この例 (ad rotator) では、バージョンに依存しない ProgID は MSWC.AdRotator です。
例
    <%

    ' The following code uses the CreateObject method of
    ' the Server object to instantiate an Ad Rotator object
    ' on the server.
    Dim objAdRotator

    Set objAdRotator = Server.CreateObject("MSWC.AdRotator")

    %>
メモ
クライアントブラウザが、オブジェクトを含む ASP スクリプトを要求した場合、ASP はオブジェクトをインスタンス化し、デフォルトのコンストラクタ機能が存在する場合はその機能を実行します。次に、スクリプトを処理する直前に、OnStartPage イベントハンドラを定義しているページの各オブジェクトの OnStartPage メソッドを呼び出します。OnStartPage メソッドにより、オブジェクトは ObjectContext オブジェクトを使用して、組み込み型の ASP オブジェクトへのポインタを取得できます。サーバーコンポーネントの ObjectContext オブジェクトと OnStartPage メソッドの詳細については、本マニュアルでは説明していません。詳細については、O'Reilly & Associates 社発行の Shelley Powers 氏の著書『Developing ASP Components』を参照してください。 CreateObject メソッドを使用すると、 ページレベル スコープでサーバーサイドオブジェクトを作成できます。ただし、Application_ OnStart または Session_OnStart イベントで CreateObject が呼び出されないことが条件です。この場合、オブジェクトはそれぞれアプリケーションレベルスコープまたはセッションレベルスコープでインスタンス化されます。ページの最後で、ページレベル スコープのオブジェクトは削除され、占有していたメモリは解放されます。 アプリケーションスコープを持つオブジェクトを作成するには、Application_OnStart イベント (第 4 章を参照) で CreateObject メソッドを呼び出すか、<OBJECT> タグを "GLOBAL.ASA" ファイルで使用し、SCOPE パラメータを Application に設定します。"GLOBAL.ASA" ファイルの詳細については、第 11 章を参照してください。 同じように、セッションスコープを持つアプリケーションを作成するには、Session_OnStart イベントで CreateObject メソッドを呼び出すか (第 10 章を参照)、<OBJECT> タグを "GLOBAL.ASA" ファイルで使用し、SCOPE パラメータを Session に設定します。また、次の例のように Session 変数を使用し、CreateObject を使ってインスタンス化されたオブジェクトを保持できます。
    Set Session("objMyAdRot") = _
        Server.CreateObject("MSWC.AdRotator")
アプリケーションレベルスコープを持つアプリケーションは、Application_OnEnd イベントが発生するまで削除されません。ユーザーのセッションの終了時または Session オブジェクトの Abandon メソッドが呼び出されたときに、セッションスコープオブジェクトも同様に削除されます。詳細については、第 10 章を参照してください。 オブジェクトをインスタンス化した後は、次のサンプルコードのように、その値をキーワード Nothing に設定して削除できます。
    Set objMyAdRot = Nothing
オブジェクト変数の値を単純に置き換えて、元のオブジェクトに使用されていたメモリを解放することもできます。
    Set objMyAdRot = strSomeOtherValue
CreateObject を使用して、組み込みオブジェクトの 1 つのインスタンスを作成することはできません。たとえば、次のコードではランタイムエラーが発生します。
    Set objMySession = Server.CreateObject("Session") ' WRONG

Execute |
Server.Execute (strPath)
Execute メソッドを使用すると、他の ASP スクリプト内から ASP スクリプトを呼び出して実行できます。呼び出されたメソッドが実行を終了すると、Server.Execute メソッドを呼び出した ASP ページに制御が返ります。Execute メソッドを使用すると、複雑なアプリケーションを、必要なときに呼び出し可能なモジュール式の再利用可能コンポーネントに分割できます。Execute メソッドは ASP 3.0/IIS 5.0 の新機能です。
パラメータ
strPath 実行する ASP スクリプトへの絶対パスまたは相対パス。このメソッドを使用して実行できるのは、現在のアプリケーションのアプリケーション空間内にあるスクリプトのみです。
例
この例では、現在のユーザーが "No Ad" のメンバーでない場合に限り、Execute メソッドを使用して最初のスクリプトにより、テキスト広告を表示する 2 番目のスクリプトが呼び出されます。
    **** BEGIN ExecuteExamplePage.ASP ********
    <HTML>
    <HEAD>
    <TITLE>
    Execute Example Form
    </TITLE>
    </HEAD>
    <BODY>
    <%
    ' This script executes an advertisement if the current
    ' user is not a member of the "No advertisement" club.

    ' Dimension Local variables.
    Dim blnNoAdClub

    ' Test Session variable.
    Session("blnNoAdClub") = False

    ' Set variables.
    blnNoAdClub = Session("blnNoAdClub")

    ' If the user belongs in the "No Ad" club don't show an ad.
    If Not(blnNoAdClub) Then
    	Server.Execute ("DisplayAdvertisement.asp")
    End If
    %>

    FROM HERE DOWN IS ALL CONTENT FROM ExecuteExampleForm.asp<BR>

    This page may or may not have an advertisement line at the top.

    </BODY>
    </HTML>
    **** END ExecuteExamplePage.ASP ********

    **** BEGIN DisplayAdvertisement.ASP ********
    <%
    Dim intSal
    Dim strPos
    Dim strAdString

    ' Test Session variable.
    Session("intSal") = 4
    Session("strPos") = "vp"

    intSal = Session("intSal")
    strPos = Session("strPos")

    ' Initialize first part of ad banner text.
    strAdString = "Click here to request a credit card"

    ' Add credit limit phrase to ad.
    Select Case intSal
    	Case 0 ' From $10K to $20K in salary.
    		strAdString = strAdString & " with a limit of up to $5000"
    	Case 1 ' From $20K+ to $40K in salary.
    		strAdString = strAdString & " with a limit of up to $10000"
    	Case 2 ' From $40K+ to $60K in salary.
    		strAdString = strAdString & " with a limit of up to $20000"
    	Case 3 ' From $60K+ to $80K in salary.
    		strAdString = strAdString & " with a limit of up to $50000"
    	Case 4 ' From $80K+ in salary.
    		strAdString = strAdString & " with a limit of up to $100000"
    	Case Else ' Assume lowest salary range.
    		strAdString = strAdString & " with no limit"
    End Select

    ' Add exclusivity phrase if necessary.
    If UCase(strPos) = "VP" Then
    	strAdString = strAdString & " just for executives!"
    Else
    	strAdString = strAdString & "!"
    End If

    ' Display advertisement text string.
    Response.Write "<FONT SIZE="5" COLOR = "red">" & strAdString & "</FONT><BR><BR>"

    %>
    **** END DisplayAdvertisement.ASP ********
メモ
Execute メソッドは、必要な場合にのみ呼び出すことができる、管理しやすく再利用可能なコードのコンポーネントにアプリケーションを分割するための、ASP 開発者にとって優れた方法です。これまで、ASP 開発者はページの実行をプログラム的に他のページにリダイレクトするか、#INCLUDE プリプロセッサディレクティブを使用して他のファイルを組み込む必要がありました。ページの実行をプログラム的に他のページにリダイレクトする場合は、ブラウザの要求をリダイレクトするためにヘッダをブラウザに送信する必要があるので、これは実行速度を低下させる手法です。いずれの方法もあまり便利ではありませんでした。既に説明したように、Server オブジェクトの Redirect メソッド (本章で後述します) では、処理が遅いページに対して、サーバーからクライアント、クライアントからサーバーへの別の呼び出しを行います。#INCLUDE ディレクティブは、ファイルシステムから組み込まれたファイルを取得すること、そのファイルを現在のスクリプトに挿入すること、および組み込み元のスクリプトで使用されない場合でも組み込まれたすべてのコードを解釈することを ASP ISAPI フィルタに強制します。 一方、Execute メソッドを使用すると、呼び出し元のスクリプトのロジックで必要な場合に限り、他のスクリプトをプログラム的に実行できます。つまり、Execute メソッドを使用すると、動的にスクリプトを組み込むことができます。 他のスクリプトと同様に、Execute メソッドを通じて呼び出されたスクリプトは、応答に含まれている HTTP ヘッダを追加または変更できます。ただし、スタンドアローンスクリプトと同様、呼び出されたスクリプトが応答の送信後に HTTP ヘッダを追加または変更する場合はエラーが発生します。 各スクリプト (呼び出し元のスクリプトおよび呼び出されるスクリプト) の変数スコープは異なります。たとえば、次のコードでは、両方のスクリプトに strName という変数があるとします。
    CALLING SCRIPT
    <%
    Dim strName
    strName = "Sam"
    Server.Execute("CalledScript.asp")
    %>

    CalledScript.asp
    <%
    Dim strName
    Response.Write strName
    %>
前の例では、strName が両方のスクリプトで宣言されています。ただし、2 番目のスクリプトでは初期化されません。この例では、Response.Write の結果、Response には何も書き込まれません。これは、呼び出されたスクリプトで strName の値が定義されていないからです。 ASP ページが Server.Execute を呼び出して他の ASP ページに分岐する場合、最初の ASP ページのすべての組み込み型の ASP オブジェクトは、呼び出されたスクリプトに渡されます。たとえば、Request オブジェクトの Form コレクションの任意の値は、Server オブジェクトの Execute メソッドへの呼び出しによって呼び出された ASP ページで利用できます。 Microsoft のマニュアルによれば、Execute メソッドでは、呼び出された URL の最後に QueryString パラメータを追加できます。ただし、本マニュアルの追加時点 (2000 年 3 月) では、URL に QueryString を追加するとエラーが発生します。Microsoft 技術サポートによれば、これは IIS 5.0 の既知のバグであり、修正プログラムが開発されているところです。 最後に、トランザクション型に設定したスクリプト内から Execute メソッドを使用してスクリプトを呼び出し、呼び出されたスクリプトによってトランザクションが中止される場合は、呼び出されたページの OnTransactionAbort イベントが最初に呼び出され、呼び出されたスクリプトが実行を完了した後に、呼び出し元のページの OnTransactionAbort イベントが実行されます。たとえば、次のスクリプト CallingScript.ASP がさらに CalledScript.ASP スクリプトを呼び出すとします。
    CALLINGSCRIPT.ASP
    <%@ TRANSACTION=Required%>
    <%
    Server.Execute "CalledScript.asp?strName=bob"
    Sub OnTransactionAbort( )
    	'Clean up code for CallingScript.asp.
    End Sub

    Sub OnTransactionCommit( )
    	Commit code for CalledScript.asp.
    End Sub

    CALLEDSCRIPT.ASP
    <%@ TRANSACTION=Required%>
    <%
    .
    .
    .
    'Processing code....
    .
    .
    .
    OnTransactionAbort( )
    	'Clean up code for CalledScript.asp.
    End Sub

    OnTransactionCommit( )
    	Commit code for CalledScript.asp.
    End Sub
CalledScript.ASP スクリプトで、トランザクションを中止させるエラーが発生した場合、CalledScript.ASP の OnTransactionAbort イベントコードが実行され、次に CallingScript.ASP の OnTransactionAbort イベントコードが実行されます。

GetLastError |
Set objASPErr = Server.GetLastError ()
Server オブジェクトの GetLastError メソッドを使用すると、スクリプトで発生するエラーに関する情報を表示できます。GetLastError メソッドは 1 つの ASPError オブジェクトを返します。第 5 章を参照してください。返された ASPError オブジェクトを使用すると、エラー情報を表示するか、エラー情報にプログラム的に応答できます。GetLastError メソッドは ASP 3.0/IIS 5.0 の新機能です。
パラメータ
objASPErr GetLastError メソッドによって返された ASPError オブジェクトの名前。
例
    <%
    ' Instantiate an ASPError object using the GetLastError method of the
    ' Server object.
    Set objASPError = Server.GetLastError
    %>
    .
    .
    .
    HTML Display Etc.
    <%
    ' Use the properties of the ASPError object (returned by the GetLastError
    ' object) to display information about the error.

    ' *** FOR MORE INFORMATION, SEE THE ASPERROR OBJECT CHAPTER.

    Response.Write Server.HTMLEncode(objASPError.Category)
    If objASPError.ASPCode > " Then
        Response.Write Server.HTMLEncode(", " & objASPError.ASPCode)
    End If
    Response.Write Server.HTMLEncode(" (0x" & Hex(objASPError.Number) & ")" )
    & "<br>"
    If objASPError.ASPDescription > " Then
       Response.Write Server.HTMLEncode(objASPError.ASPDescription) & "<br>"
    ElseIf (objASPError.Description > ") Then
       Response.Write Server.HTMLEncode(objASPError.Description) & "<br>" End if
      .
      .
      .
メモ
このサンプルコード (IIS 5.0 に付属のデフォルトの 500-100.ASP スクリプトから派生) では、GetLast-Error メソッドを使用して ASPError オブジェクトをインスタンス化することでスクリプトが開始されます。次に、ASPError オブジェクトのプロパティを使用して、最後のエラーに関する情報を表示します。ASPError オブジェクトのプロパティの詳細については、第 5 章を参照してください。 また、エラーが発生するスクリプトで GetLastError メソッドを使用できないことに注意してください。たとえば、次のコードは意図したとおりに動作しません。
    <%
    On Error Resume Next
    Session("MyVar"3333) = "keyton"
    Set objError = Server.GetLastError( )
    Response.Write objError.ASPCode
    %>
On Error Resume Next ステートメントを使用したので、その後は GetLastError メソッドを使用してスクリプトでエラーに応答できると考える場合があるかもしれません。しかし、そのような動作は発生しません。IIS 5.0 はエラーにすぐに反応し、Server.Transfer メソッドを背後で使用して、クライアントをエラー処理ページにリダイレクトします。デフォルトでは、このエラーページは /iisHelp/Common/500-100.ASP です。GetLastError メソッドを使用してエラー処理をカスタマイズできるのは、このページです。 500-100.ASP エラー処理ページとスクリプトの一般的なエラー処理の詳細については、第 5 章を参照してください。 GetLastError メソッドは、前処理エラー、スクリプトのコンパイルエラー、およびランタイムエラーに使用できます。 GetLastError メソッドはクライアントにコンテンツが送信されていない場合にのみエラー情報を正常に返すことに注意してください。既にクライアントにコンテンツが送信されている場合は、GetLastError メソッドそのものによってエラーが発生します。このため、スクリプト内でさまざまなエラーを処理する必要があると思われる場合は、Response オブジェクトの Buffer プロパティを True に設定することをお勧めします。第 8 章を参照してください。
    Response.Buffer = True
GetLastError メソッドおよび GetLastError メソッドが返す ASPError オブジェクトの詳細については、第 5 章を参照してください。

HTMLEncode |
Server.HTMLEncode (strHTMLString)
HTML ページまたは ASP スクリプトに関連する実際の HTML コードを表示する必要があるときは、Server オブジェクトの HTMLEncode メソッドを使用する必要があります。Server オブジェクトの HTMLEncode メソッドを使用すると HTML 文字列をエンコードできるので、ブラウザでの表示時に、その HTML がテキストレイアウトの命令であるとは解釈されません。
パラメータ
strHTMLString クライアントコンピュータに表示するために HTML コードをエンコードする文字列。
例
    <%

    ' The following code encodes these HTML tags so that they can
    ' be displayed without interpretation on the client browser:
    ' <TABLE><TR><TD></TD></TR></TABLE>
    Dim strOldHTML
    Dim strNeutralCode

    strOldHTML = "<TABLE><TR><TD>"
    strNeutralCode = Server.HTMLEncode(strOldHTML)

    ' The variable strNeutralCode now holds the following code:
    ' &lt;TABLE&gt;&lt;TR&gt;&lt;TD&gt;
    ' but will be displayed on the client's machine as
    ' <TABLE><TR><TD>
    ' and the &lt;TABLE&gt;&lt;TR&gt;&lt;TD&gt; will be
    ' seen only if you view the source code on the client.
    Response.Write strNeutralCode

    %>
メモ
HTMLEncode メソッドは、簡単に使用できる単純なメソッドです。HTML ページのソースコードを表示したり、Web ページでのさまざまな HTML タグの使用を示すことができます。データベースクエリーの出力を表示する際にも非常に便利です。

MapPath |
Server.MapPath (strPath)
MapPath メソッドでは、仮想パスまたは相対パスを指定すると、サーバーの物理パスを調べることができます。
パラメータ
strPath 完全な仮想パス、またはサーバー上の現在のスクリプトのホームディレクトリのパスに相対的なパス。このメソッドでは、文字列がスラッシュ (/) またはバックスラッシュ (\) で始まるかにより、文字列を解釈する方法を判断します。strPath パラメータがこれらの文字列のいずれかで始まる場合、文字列は完全な仮想パスであると見なされます。それ以外の場合に返される物理パスは、Web サーバー上の現在のスクリプトの物理ディレクトリに相対的なパスです。
例
    <%

    ' The following line of code determines the physical path
    ' of the current script for later use.
    strSearchPath = _
       Server.MapPath("/searchscripts/start/searchstart.asp")

    ' This following code then uses the strSearchPath string to
    ' determine the file attributes for the current file for
    ' display in the client-side HTML.
    Set fs = Server.CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(strSearchPath)
    datFileLastModified = f.DateLastModified
    %>
    <HTML>
    <HEAD><TITLE>MapPath Example</TITLE></HEAD>
    <BODY>
    The current script was last modified <%=datFileLastModified%>.
    </BODY>
    </HTML>
メモ
MapPath メソッドを使用する場合、覚えておく必要がある重要な事項が 2 つあります。その最初の事項は、標準の MS-DOS 相対ディレクトリ表記 ("." および "..") をサポートしていないということです。そのため、次のコード行はランタイムエラーになります。
    strSearchPath = Server.MapPath("../start/searchstart.asp")
2 番目の事項は、MapPath メソッドは指定された物理ディレクトリが存在するかどうかを確認しないということです。そのため、このメソッドは、スクリプトコードに応じて Web サーバーで作成される新規ファイルの物理パスを調べる場合に便利です。 最後に、現在のファイルの物理パスを調べるには、Request オブジェクトの ServerVariables コレクションの PATH_INFO 要素を使用できます。詳細については、第 7 章を参照してください。たとえば、現在のスクリプトが searchstart.ASP であり、/searchscripts/start/ 仮想ディレクトリにあるとします。次のコード行は、strSearchPath の値を D:\apps\searchscripts\start\searchstart.ASP に設定します。
    strSearchPath = _
       Server.MapPath(Request.ServerVariables("PATH_INFO"))

Transfer |
Server.Transfer (strPath)
Transfer メソッドを使用すると、クライアントに HTTP 応答を送信することなく、1 つのスクリプトから別のスクリプトに実行をリダイレクトできます。Request オブジェクトやその他のオブジェクトなど、最初のスクリプトからのすべての情報を、2 番目のスクリプトで完全に利用できるようになります。Server.Execute とは異なり、Server.Transfer は、呼び出された ASP ページが実行を終了したときに、制御を Transfer メソッドを呼び出したスクリプトに返しません。このメソッドは ASP 3.0/IIS 5.0 の新機能です。
パラメータ
strPath 実行のリダイレクト先となる、2 番目のスクリプトの相対パスまたは絶対パス。
例
    ******** BEGIN Transfer Example: First Script ********

    <%
    ' Transfer Example: First Script

    ' First Script calls Second Script, which uses Transfer
    ' to redirect execution to Third Script.
    %>
    <HTML>
    <HEAD>
    <TITLE>
    Server.Transfer Example
    </TITLE>
    </HEAD>
    <BODY>
    <FORM ACTION="TransferExample_Process1.asp?qsvalue=hannah1" METHOD="post">
    First Name: <INPUT TYPE="text" NAME="txtFName" VALUE="><BR>
    Last Name: <INPUT TYPE="text" NAME="txtLName" VALUE="><BR>
    Address: <INPUT TYPE="text" NAME="txtAddress" VALUE="><BR>
    City: <INPUT TYPE="text" NAME="txtCity" VALUE=">&nbsp
    State: <INPUT TYPE="text" NAME="txtState" VALUE="><BR>
    Zipcode: <INPUT TYPE="text" NAME="txtZipcode" VALUE="><BR>
    <INPUT TYPE="submit" VALUE="Submit">
    </FORM>
    </BODY>
    </HTML>
    ******** END Transfer Example: First Script ********

    ******** BEGIN Transfer Example: Second Script ********
    <%
    Application("strExample1") = "ApplicationStringValue"
    Session("strExample2") = "SessionStringValue"
    Server.Transfer "TransferExample_Process2.asp"
    Application("strExample1") = "NEWApplicationStringValue"
    Session("strExample2") = "NEWSessionStringValue"
    %>
    ******** END Transfer Example: Second Script ********

    ******** Begin Transfer Example: Third Script ********
    <%
    ' Transfer Example: Third Page

    ' First Page calls Second Page, which uses Transfer
    ' to redirect execution to Third Page.
    %>
    <HTML>
    <HEAD>
    <TITLE>
    Server.Transfer Example
    </TITLE>
    </HEAD>
    <BODY>
    <%
    Response.Write "First Name: " & Request.Form("txtFName") & "<BR>"
    Response.Write "Last Name: " & Request.Form("txtLName") & "<BR>"
    Response.Write "Address: " & Request.Form("txtAddress") & "<BR>"
    Response.Write "City: " & Request.Form("txtCity") & "<BR>"
    Response.Write "State: " & Request.Form("txtState") & "<BR>"
    Response.Write "Zipcode: " & Request.Form("txtZipcode") & "<BR><BR>"

    Response.Write "Application Variable: " & Application("strExample1") & "<BR>"
    Response.Write "Session Variable: " & Session("strExample2") & "<BR>"

    %>

    </BODY>
    </HTML>
    ******** END Transfer Example: Third Script ********
メモ
このコードを使用する場合は、3 つのスクリプトを作成し、それらをブラウザでテストします。最終結果として、次のような出力が得られます。
    First Name: keyton
    Last Name: weissinger
    Address: 123 Main Street
    City: Somewhereville
    State: Alabama
    Zipcode: 30087

    Application Variable: ApplicationStringValue
    Session Variable: SessionStringValue
Transfer メソッドの呼び出し後に、Application および Session 変数はブロックのコードによって更新されません。 例で示すように、Transfer メソッドを呼び出すと、組み込み型の ASP オブジェクトからの最初のスクリプトで利用できるすべての情報は、2 番目のスクリプトでも利用可能になります。ただし、これはスクリプトレベル変数の場合には当てはまりません。最初のスクリプトで変数を宣言して初期化する場合は、2 番目のスクリプトでは変数は利用できません。 また、アプリケーションレベルスコープまたはセッションレベルスコープで変数がある場合、2 番目のスクリプトもこれらの変数にアクセスできます。2 番目のスクリプトが別のアプリケーション空間にある場合でも同様です。 Transfer メソッドに関して重要な事項が 2 つあります。その最初の事項は、クライアントに何らかの応答を送信後に Transfer メソッドを使用しようとすると、エラーが発生するということです。そのため、必要に応じて Response オブジェクトの Buffer プロパティを True に設定すると、この問題を回避できます。 Transfer メソッドに関して重要な 2 番目の事項は、Transfer メソッドを呼び出した後にはスクリプトが実行されないということです。たとえば、次の例では、3 番目および 4 番目のコード行は完全に無視されます。
    Session("intMyVar") = 1
    Server.Transfer "SomeOtherScript.asp"
    Session("intMyVar") = 2
    Session("intMyOtherVar") = 3
前のコードブロックの実行後にも、Session 変数 intMyVar は値 1 を持ち、intMyOtherVar 変数は、このコードブロックの実行前に他の場所で定義されていない限り、未定義のままになります。

URLEncode |
Server.URLEncode (strURL)
アドレス行でクエリー文字列として送信できる文字列をエンコードします。
パラメータ
strURL アドレス行でクエリー文字列としてエンコードして送信する文字列値。
例
    <%

    ' The following encodes the URL
    ' http://www.myserver.com/apps/search.asp
    Dim strOldURL
    Dim strNewURL

    strOldURL = "http://www.myserver.com/apps/search.asp"
    strNewURL = Server.URLEncode(strOldURL)

    ' This encoding results in the following string value being
    ' placed in the strNewURL variable:
    ' http%3A%2F%2Fwww%2Emyserver%2Ecom%2Fapps%2Fsearch%2Easp

    ' This new string value could be used in a query string to
    ' represent a "next script," as demonstrated here:

    %>
    <HTML>
    <HEAD><TITLE>URLEncode Example</TITLE></HEAD>
    <BODY>
    <FORM ACTION="/apps/CalcAndRedirect.asp?newURL=<%=strNewURL%>" METHOD = POST>
    <INPUT TYPE = TEXT NAME = "First Value">
    <INPUT TYPE = TEXT NAME = "Second Value">
    <INPUT TYPE = SUBMIT NAME = "Calculate Results">
    </FORM>
    </BODY>
    </HTML>
メモ
URLEncode メソッドは、HTMLEncode メソッドと同じように、単純で使いやすいメソッドです。POST メソッドを使用して情報をポストする代わりに、アドレス行で情報を送信する必要がある場合は、URLEncode メソッドを使用することが不可欠です。情報をエンコードせず、GET メソッドを通じて QueryString コレクションに配置する場合、送信されるデータによっては、その解釈は予期しないものになります。 クエリー文字列で情報を送信し (可視フレームから可視フレームへ)、アドレス行では送信しない場合、このエンコーディングは自動的に行われます。