ASP講座シリーズ(12) ブラウザへのコンテンツ送信
著者:Eve Cole
更新時間:2009-05-30 19:59:00
ASP スクリプトを処理する場合、ASP 区切り文字または <SCRIPT> タグ内に含まれていないテキストまたはグラフィックはブラウザにそのまま返されます。 Response オブジェクトを使用して、コンテンツをブラウザに明示的に送信できます。
コンテンツの送信 ASP 区切り文字またはプロシージャ内からブラウザにコンテンツを送信するには、Response オブジェクトの Write メソッドを使用できます。たとえば、次のステートメントは、ユーザーがこのページにアクセスしたかどうかに応じて、異なる挨拶を送信できます。
<%
FirstTime = True の場合
Response.「<H3 ALIGN=CENTER>概要ページへようこそ</H3>」と書き込みます。
それ以外
Response.Write "<H3 ALIGN=CENTER>概要ページへようこそ</H3>"
終了の場合
%>
プロシージャの外では、Response.Write を使用してコンテンツをユーザーに送り返す必要はありません。スクリプト区切り文字の内側にないコンテンツはブラウザに直接送信され、ブラウザによってフォーマットされて表示されます。たとえば、次のスクリプト プロセスの出力は上記のスクリプトと同じになります。
<H3 整列=中央>
<% 初めての場合は %>
概要ページへようこそ。
<%その他%>
概要ページへようこそ。
<% % の場合は終了>
</H3>
出力を 1 回だけ返す必要がある場合、または既存の HTML テキストにステートメントを追加すると便利な場合は、スクリプト コマンドと HTML を混合して使用します。ステートメントを区切り文字で区切らない場合、またはブラウザに返される文字列を作成する場合は、Response.Write を使用します。たとえば、HTML テーブルから返された値を使用してテーブル行を作成するテキスト文字列を構築できます。
Response.Write "<TR><TD>" & Request.Form("FirstName") _
& "</TD><TD>" & Request.Form("姓") & "</TD></TR>"
コンテンツのタイプの設定 Web サーバーは、ファイルをブラウザに返すときに、ファイルに含まれるコンテンツのタイプもブラウザに伝えます。これにより、ブラウザはファイル自体を表示できるか、別のアプリケーションを呼び出す必要があるかを判断できるようになります。たとえば、ネットワーク サーバーが Microsoft Excel テーブルを返した場合、ブラウザは Microsoft Excel のコピーを呼び出してページを表示する必要があります。 Web サーバーは、ファイルの拡張子を MIME タイプ テーブルにマッピングすることでファイル タイプを識別します。
Response オブジェクトの ContentType プロパティを使用して、ユーザーに送信されるコンテンツの HTTP コンテンツ タイプ文字列を設定できます。たとえば、次のコマンドはチャネル定義のコンテンツ タイプを設定します。
<% Response.ContentType = "application/x-cdf" %>
チャネルの詳細については、このトピックの「動的チャネルの作成」を参照してください。
その他の一般的なコンテンツ タイプには、text/plain (解釈された HTML ステートメントではなくテキスト コンテンツとして返される場合)、text/gif (GIF 画像の場合)、および video/quicktime (Apple QuickTime® 形式のムービーの場合) があります。 MIME タイプの標準セットが定義されており、Web サーバーまたは Web ブラウザでサポートされています。 Microsoft Web サーバーがサポートしているコンテンツの種類を確認するには、インターネット サービス マネージャーを使用して Web サイトのプロパティ ページを開き、[HTTP ヘッダー] タブをクリックして、[ファイルの種類] タブをクリックします。
ブラウザをリダイレクトする Redirect メソッドを使用して、コンテンツをユーザーに送信する代わりにブラウザを別の URL にリダイレクトします。たとえば、顧客 ID を受け取るためにユーザーがホームページからアプリケーションに入力したことを確認したい場合は、顧客 ID 番号を持っているかどうかを確認し、持っていない場合はホームページにリダイレクトできます。
<%
Session("CustomerID") = 0 の場合
Response.リダイレクト「homepage.asp」
終了の場合
%>
バッファがすでに開いている場合を除き、コンテンツまたはヘッダーがブラウザに返される前に、ブラウザをリダイレクトする必要があります。 Response.Redirect ステートメントをページの先頭の <HTML> タグの前に配置すると、ブラウザーにコンテンツが返されなくなります。コンテンツまたはヘッダーをブラウザーに返した後に Response.Redirect を使用すると、エラー メッセージが表示されます。
ページの中央で Response.Redirect を使用している場合は、次のセクションで説明するように、Response.Buffer プロパティとともに使用します。
バッファされたコンテンツ デフォルトでは、Web サーバーは ASP ページを処理するときに HTML およびスクリプトの処理結果を返します。ただし、ユーザーに何かを送信する前に、ページ上のすべてのサーバー スクリプト コマンドを処理するように、Response オブジェクトの Buffer プロパティを設定できます。
バッファリング技術を使用して、ページ処理プロセスのどの時点よりも前にコンテンツをユーザーに送信しないかを決定できます。 Response オブジェクトの Redirect メソッドを使用してユーザーを別のページにリダイレクトしたり、Response オブジェクトの Clear メソッドを使用してバッファをクリアして別のコンテンツをユーザーに送信したりすることもできます。以下の例では両方の方法を使用しています。
<%
'バッファリングを有効にします。このステートメントは <HTML> タグの前に指定する必要があります。
Response.Buffer = True %>
<html>
<本文>
。
。
。
<%
Request("FName") = "" の場合
応答.クリア
Response.Redirect "/samples/test.html"
それ以外
Response.Write Request("FName")
終了の場合
%>
</body>
</html>
Response.Buffer を使用して、スクリプトが HTTP ヘッダーを変更する前に Web サーバーが HTTP ヘッダーを返さないようにすることもできます。 Response.Expires や Response.Redirect などの一部のプロパティとメソッドは、HTTP ヘッダーを変更します。
Buffer プロパティがスクリプトで設定され、Flush メソッドが呼び出されない場合、サーバーはユーザーが発行したキープアライブ要求を維持します。このスクリプトの習慣を身に付けると、サーバーはユーザー要求ごとに新しい接続を作成する必要がなくなるため、サーバーのパフォーマンスを向上させることができます (サーバー、ユーザー、およびプロキシ サーバーがキープアライブ要件をサポートしていると仮定します)。ただし、このアプローチの潜在的な欠点の 1 つは、ユーザーが現在の ASP ファイル内のすべてのスクリプトを処理するまで、ユーザーに対する応答がバッファーに表示されないことです。より長く複雑なスクリプトの場合、ユーザーはこのページが表示されるまでに長時間待たなければならない場合があります。
デフォルトでは、ASP アプリケーションのバッファリングはオフになっています。インターネット サービス マネージャーを使用して、ASP アプリケーション全体のバッファーを有効にすることができます。
プロキシ サーバーがページをキャッシュできるようにする プロキシ サーバーを介して、アプリケーションはユーザーにページを送信できます。プロキシ サーバーは、ユーザーのブラウザに代わって Web サイトから Web ページを要求します。プロキシ サーバーは HTML ページをキャッシュするので、同じページに対する繰り返しのリクエストをブラウザーに迅速かつ効率的に返すことができます。プロキシ サーバーはリクエストを実行して Web ページをキャッシュし、ネットワークと Web サーバーの負荷を軽減します。
キャッシュは HTML ページではうまく機能しますが、動的に生成された情報を含む ASP ページではうまく機能しません。たとえば、株式市場の状況や大量のビジネスを示す在庫リストに関するレポートには、即時情報が必要です。 1時間前の情報は現時点では非常に不正確です。カスタマイズされたホームページなど、アプリケーションが個人情報を返す場合、ユーザーは別のユーザーの個人情報を見ることができないことが予想されます。
デフォルトでは、ASP コマンド プロキシ サーバー自体は ASP ページをキャッシュできません (ただし、イメージ、ビットマップ、小さなアプリケーション、およびキャッシュされたページ上のその他の参照はキャッシュされます)。 Response.CacheControl プロパティを使用して、特定のページのキャッシュを許可するようにキャッシュ コントロール HTTP ヘッダー フィールドを設定できます。 Response.CacheControl のデフォルト値は文字列「Private」で、プロキシ サーバーがこのページをキャッシュするのを防ぎます。キャッシュを許可するには、キャッシュ制御ヘッダー フィールドを Public に設定します。
<% Response.CacheControl = "パブリック" %>
ページ コンテンツを送信する前に HTTP ヘッダーをブラウザーまたはプロキシ サーバーに送信する必要があるため、Response.CacheControl プロパティを設定するか、Response.Buffer を使用して、HTML タグの前にページをキャッシュすることができます。
Cache Control ヘッダー フィールドは、HTTP 1.1 仕様の一部です。有効期限が切れたヘッダー フィールドは送信されないため、HTTP 1.0 のみをサポートするプロキシ サーバーでは ASP ページをキャッシュできません。
ブラウザーがページをキャッシュしないようにします。各ブラウザーのバージョンには、ページをキャッシュするかどうかに関する独自の仕様があります。ブラウザーが ASP ページをキャッシュしないようにするには、Response.Expires を使用して有効期限ヘッダーを設定します。
<% 応答.期限切れ = 0 %>
値 0 を指定すると、キャッシュされたページが強制的に期限切れになります。ページを送信する前に HTTP ヘッダーをブラウザに送信する必要があるため、HTML タグの前に Response.Expires 属性を配置するか、Response.Buffer を使用することによってページをキャッシュできます。
動的チャネルの作成
Internet Explorer 4.0 には、Web プランナーが共通のテーマを持つ Web ページをチャネルに組み合わせるために使用できる新機能があります。ブラウザでは、チャネルはチャネル タイトル バーに表示され、ユーザーはアイコンをクリックしてチャネルにアクセスします。チャネルはバックグラウンドで自動的に更新され、ユーザーはブラウザで最新のページをダウンロードするためにサイトにアクセスする必要はありません。チャネルは、一連の関連 Web ページを参照するための高速かつ直接的なパスをユーザーに提供し、これらの Web ページは自動的に更新されます。
ASP を使用すると、ユーザーの設定を収集するスクリプトを作成し、チャネルを動的に作成できます。チャネル定義ファイル (.cdf) は、チャネル コンテンツの構成と順序を確立します。 .cdf ファイル内のコマンドは HTML マークアップと同じ構文を使用するため、理解しやすく、スクリプトから生成することが容易になります。チャネル定義ファイルを作成する ASP スクリプトを作成する場合、スクリプトでは .cdx 拡張子が使用されます。 ASP が .cdx 拡張子を持つファイルを読み取ると、application/x-cdf コンテンツ タイプが自動的に送信され、ブラウザーにチャネル定義を使用してバイトを解釈するように指示します。拡張子として .cdx を使用しない場合、スクリプトは Response.ContentType を使用してコンテンツ タイプを application/x-cdf に手動で設定する必要があります。
ここではチャネルの使用方法の例を示します。次の HTML フォームは、ユーザーにチャネルの選択を求めます。送信されると、フォームは .cdx ファイル内のスクリプトを呼び出してチャネル定義を作成します。
<P> 希望のチャンネルを選択します。 </P>
<FORM METHOD="POST" ACTION="chan.cdx">
<P><INPUT TYPE=CHECKBOX NAME=映画> 映画
<P><INPUT TYPE=CHECKBOX NAME=スポーツ> スポーツ
<P><入力タイプ="送信" 値="送信">
</FORM>
Chan.cdx 内のスクリプトは、リクエストとともに送信されたテーブルの値に基づいてチャネル定義を作成します。
<% If Request.Form("Movies") <> "" then %>
<チャンネル>
ムービーページのチャンネル定義ステートメント
</チャンネル>
<% % の場合は終了>
<% If Request.Form("Sports") <> "" then %>
<チャンネル>
スポーツ ページのチャネル定義ステートメント
</チャンネル>
<% % の場合は終了>
サーバーへのファイルの送信 ブラウザは、Posting Acceptor アプリケーションを使用して、ファイルを Web サーバーに送信できます。 Posting Acceptor がファイルをアップロードすると、受信した各ファイルの名前と場所をリストした URL エンコードされたフォーム フィールドが送信されます。ファイルをアップロードするスクリプトに郵便処理 URL を追加して、ASP スクリプトを呼び出してこれらのフィールド名を処理できます。たとえば、ファイルの名前と場所を記載した電子メールをシステム管理者に自動的に送信するスクリプトを作成できます。