Responseオブジェクトの使い方
ASPのResponseオブジェクトには、コレクション、プロパティ、メソッドがあります。ここでは、Responseオブジェクトでサポートしているコレクション、プロパティ、メソッドについて説明します。
● Response.Writeメソッド
ResponseオブジェクトのWriteメソッドは、引数で指定されたHTMLをブラウザに送信します。
|
Response.Write string or Response.Write(string) |
stringには、文字列または変数名を指定します。たとえば、Response.Write “Hello!”のように文字列を指定するとブラウザに「Hello!」が送信されます。stringには、テキスト文字の他にHTMLタグも混在させることができます。
Response.Write “Hello<br>World”
この場合、ブラウザには”Hello<br>World”が送信されて改行されて表示されます。Response.Writeメソッドには省略形が用意されていて、<%=・・・%>のように記述することができます。
<% Response.Write(“Hello”) %>
<% =”Hello” %>
|
|
図 Response.Writeメソッドのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示したら、「Writeメソッド」をクリックしてください。Internet Explorerの左側のフレームにはASPファイルのソースが表示されます。右側のフレームには、HTMLファイルの内容が表示されます。図の行6では、dimステートメントで変数を宣言しています。行7-8では、変数strTextにHTMLの<h2>・・・</h2>タグとテキストを挿入して保存しています。行9では、ResponseオブジェクトのWriteメソッドで変数strTextの内容をブラウザに送信しています。Response.Writeメソッドで送信した結果が右側のフレームに表示されます。参考までにHTMLドキュメントのソースは以下のようになっています。
<html>
<body>
<h2>HTMLタグを使用して<br>書式を記述することができます。</h2>
</body>
</html>
HTMLの<h2>・・・</h2>の部分が、Response.Writeメソッドで送信された部分です。
Tip
|
Response.Writeメソッドで特殊文字を送信するには: Response.Writeメソッドで”<hr width=20%>”を送信するとブラウザに<hr width=20%>のように認識されません。ASPは”%>”の部分をASPのデリミタとして認識してしまいます。この不都合を回避するには、“<hr width=20% />”のようにHTMLの終了タグを挿入するか,”<hr width=’20%’>”のようにwidthの値をシングルクオテーション(‘)で囲みます。この他に、HTMLのキャラクターエンティティ(Character Entity)を使用して”>”を”>”のように記述する方法もあります。 Response.Write(“<hr width=20% />”) Response.Write(“<hr width=’20%’>”) Response.Write(“<hr width=20%>”) 文字列の中にダブルクオテーション(“)が含まれるときは、シングルクオテーションに書き換えて指定します。 Response.Write(“<img src=’bg.gif’>”) どうしてもダブルクオテーションにしたいときは、 Response.Write(“<img src=””bg.gif””>”) のように記述するとブラウザは、<img src=”bg.gif”>を受け取ります。 ブラウザにHTMLタグを認識させないで通常のテキストデータとして扱うようにするには、Server.HTMLEncode()メソッドを使用します。 Response.Write(Server.HTMLEncode(“<i>イタリック体</i>”) この場合、ブラウザには”<i>イタリック体</i>”のようにHTMLタグがデータとして表示されます。 |
Note
|
Response.Writeメソッドの記述方法について: ASPファイルにResponse.Writeメソッドを記述するには、Method1-3の3種類の方法があります。Method1は、HTMLベースのファイルにResponse.Writeメソッドの省略形を使用してASPスクリプトを挿入しています。この手法は、HTMLタグとASPスクリプトが混在しているためプログラムの流れを理解するのに時間がかかる欠点があります。 Method2は、完全なVBScriptのプログラムとして構成されています。HTMLタグとデータ双方をResponse.Writeメソッドでブラウザに送信しています。この手法は、プログラムの流れを理解するのが容易ですから保守性の良いアプリケーションになります。 Method3は、VBScript 5.0でサポートされたWith…End Withを使用してResponseオブジェクトのWriteメソッドを参照する負荷を軽減しています。プログラムのソースコードが短くコンパクトになりますので保守がさらに容易になります。 Method1-3のどの手法を採用するかは、何を重要視するかにより異なります。性能を重視するときは、Method1が適しています。性能より保守性を重視するときは、Method2/Method3が適しています。 Method1: <html> <body> The current date is: <%=Date %> </body> </html> Method2: <% Sub Response.Write "<html>" & vbcrlf Response.Write " <body>" & vbcrlf Response.Write " The current date is: " & Date & vbcrlf Response.Write " </body>" & vbcrlf Response.Write "</html>" & vbcrlf End Sub Call %> Method3: <% Sub With Response .Write "<html>" & vbcrlf .Write " <body>" & vbcrlf .Write " The current date is: " & Date & vbcrlf .Write " </body>" & vbcrlf .Write "</html>" & vbcrlf End With End Sub Call %> |
● Response.Redirectメソッド
ResponseオブジェクトのRedirectメソッドは、引数で指定されたurlにリダイレクトします。
|
Response.Redirect url or Response.Redirect(url) |
urlには、リダイレクトするurlを指定します。
Response.Redirect “http://www.microsoft.com”
|
|
図 Response.Redirectメソッドのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「Redirectメソッド」をクリックしてください。Internet Explorerの左側のフレームにはASPファイルのソースが表示されます。右側のフレームに表示されている、チェックボックスからInternet Explorerをチェックして実行ボタンをクリックします。実行ボタンをクリックすると、<form>タグのaction=で指定されたページがロードされます。このサンプルでは、自分自身を指定していますのでResponseRediect.aspファイルが再ロードされます。
図のASPファイルの行4では、RequestオブジェクトのFormコレクションでチェックボックスの値を調べています。たとえば、Internet Explorerのチェックボックスをクリックしたときは、Request.Form(“browser”)コレクションには”redirectIE.asp”が格納されています。(Request.Formコレクションについては5-4章で説明しています。)行5のResponse.Redirect(・・・)では、RedirectIE.aspをリダイレクトしています。RedirectIE.aspがロードされると、「このページはInternet Explorer用です」が表示されます。
RedirectIE.aspファイルには、以下のようなHTMLタグが記述されています。
<html>
<head>
<style>span {color: red; font-size: x-large; }</style>
</head>
<body>
<p>このページは
<span>Internet Explorer</span>用です</p>
</body>
</html>
チェックボックスからNetscape Navigatorをチェックして実行ボタンをクリックすると、RedirectNN.aspがリダイレクトされます。RedirectNN.aspがロードされると、「このページはNetscape Navigator用です」が表示されます。
RedirectNN.aspファイルには、以下のHTMLタグが記述されています。
<html>
<head>
<style>span{color: blue; font-size: x-large; }</style>
</head>
<body>
<p>このページは
<span>Netscape Navigator</span>用です</p>
</body>
</html>
|
|
図 Internet Explorerをチェックして実行ボタンをクリックしたときに表示されるページ
|
|
図 Netscape Navigatorをチェックして実行ボタンをクリックしたときに表示されるページ
Tip
|
Response.Redirectメソッドを使用しないで特定のurlに移動させるには: HTMLの<meta>タグを使用すると別のurlに移動させることができます。たとえば、以下のように記述するとブラウザは2秒後にwww.microsoft.comのサイトに移動します。 <meta http-equiv=refresh content=”2; url=http://www.microsoft.com”> 同様にクライアント側のJavaScriptを使用して別のurlに移動させることもできます。 <script language=”javascript”> window.location = “http://www.microsoft.com”; </script> |
Note
|
Response.RedirectとServer.Transferメソッドの違いについて: IIS5.0でServerオブジェクトにTransferメソッドが追加されました。Trasferメソッドは、Redirectメソッドと異なり、ページの新規オブジェクトを作成しないで制御のみ移動します。つまり、コール元に戻らないサブルーチンを呼び出すような感じです。このため、Redirectメソッドと比較すると高速です。 Internet Explorerのurlに http://localhost/accweb/samples/asp/RedirectMethod.asp を入力すると、Response.RedirectメソッドでMyUrl.aspがロードされます。MyUrl.aspは、Response.WriteメソッドでServer.Variables(“URL”)をブラウザに送信していますのでブラウザには”URL: /accweb/samples/asp/MyUrl.asp”が表示されます。 今度は、Internet Explorerのurlに http://localhost/accweb/samples/asp/transfermethod.asp を入力すると、Server.TrasferメソッドでMyUrl.aspに制御が移動します。MyUrl.aspは、Server.Variables(“URL”)をブラウザに送信しています。ところが、MyUrl.aspはブラウザにロードされていませんので“URL: /accweb/samples/asp/transfermethod.asp”が表示されます。 RedirectMethod.asp <% response.redirect("MyUrl.asp") %> TransferMethod.asp <% server.transfer("MyUrl.asp") %> MyUrl.asp <html> <body> <% response.write “URL: “ & request.ServerVariables("URL") %> </body> </html> |
● Response.BufferプロパティとResponse.Flushメソッド
ResponseオブジェクトのFlushメソッドは、バッファリンクされているHTMLデータを強制的にブラウザに送信します。Response.Flushメソッドを使用するときは、Response.BufferプロパティをTrueに設定する必要があります。
|
Response.Buffer=[True | False] |
BufferプロパティにTrueを指定したときは、Response.FlushまたはResponse.Endメソッドを発行するまで出力データがバッファリングされます。ただし、ページのすべての処理が完了したら強制的にブラウザに送信します。Falseを指定したときは、バッファリングしないで出力データをその都度ブラウザに送信します。Response.Bufferプロパティを指定するときは、<html>タグの前に記述します。
Response.Bufferプロパティは、IIS4.0ではFalseがデフォルトになっていましたが、IIS5.0以降では、Trueがデフォルトになっています。
|
Response.Flush |
ResponseオブジェクトのFlushメソッドは、バッファリングされている出力データを強制的にブラウザに送信します。Flushメソッドは、Response.Buffer=Trueのときのみ有効です。
|
|
図 Response.BufferプロパティとResponse.Flushメソッドのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「BufferプロパティとFlushメソッド」をクリックしてください。Internet Explorerの左側のフレームにASPのソースが表示されます。右側のフレームには、IISからIEに送信されたHTMLが表示されます。図のASPソースの行3では、Response.BufferプロパティにTrueを設定してバッファリングを有効にしています。Response.Bufferプロパティの設定は、<html>タグの前で行います。行4-11までのデータは、バッファリングされてIISのバッファに保存されてブラウザには送信されません。行12のResponse.FlushメソッドでIISのバッファの内容をブラウザに送信します。確認のために行12のResponse.FlushをResponse.Clearに書き換えて見てください。ブラウザには何も表示されません。
Tip
|
<html>タグの後にResponse.Redirectメソッドでリダイレクトするには: バッファリングしない状態(Response.Buffer=False)で、<html>タグの後にResponse.Redirectを使用してリダイレクトさせると「HTTP ヘッダーはすでにクライアントのブラウザに書き込まれています。・・・」のエラーになります。このエラーを回避するには、<html>タグの直前に<% Response.Buffer=True %>を挿入します。この場合、バッファリングされてHTTPヘッダーがブラウザに送信されないためリダイレクトが可能となります。IIS5.0以降では、Response.Buffer=Trueがデフォルトの設定になっています。 <% response.buffer=true %> <html> <head> <body> Response.Buffer=Trueを設定するとリダイレクトが可能になります. <% response.redirect "http://www.microsoft.com" %> </body> </html> |
● Response.BufferプロパティとResponse.Clearメソッド
ResponseオブジェクトのClearメソッドは、バッファリングされているHTMLデータを消去します。ただし、ClearメソッドはHTTPヘッダーを消去しませんので注意してください。Clearメソッドは、Response.Buffer=Trueのときのみ使用できます。
|
Response.Clear |
|
|
図 Response.BufferプロパティとResponse.Clearメソッドのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「BufferプロパティとClearメソッド」をクリックしてください。Internet Explorerの左側のフレームにASPのソースが表示されます。右側のフレームには、IISからIEに送信されたHTMLが表示されます。図のASPソースの行3では、Response.Buffer=Trueでバッファリングを有効にしています。行11のResponse.Clearメソッドでバッファの内容を消去しているため行4-10までのデータは表示されません。行12-16のデータはブラウザに送信されて表示されます。
念のために、IISからブラウザに送信されたHTMLデータを確認するには、マウスを右側のフレームに移動して右ボタンをクリックします。ショートカットメニューから「ソース表示」をクリックすると、以下の内容が表示されます。ブラウザには、ASPソースの行4-10までが消去されて行12-16のデータのみ送信されています。
<p>Bufferを<b>Clear</b>した後に送信したテキストは<br>
ブラウザに表示されます。
</p>
</body>
</html>
● Response.Endメソッド
ResponseオブジェクトのEndメソッドは、処理を中断してバッファリングされているHTMLデータをブラウザに送信します。バッファリングされているデータを表示させたくないときは、Response.Clearメソッドでバッファの内容を消去してから、Response.Endメソッドを発行します。
|
Response.End |
|
|
図 Response.Endメソッドのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「Endメソッド」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISがIEに送信したHTMLが表示されます。図のASPソースの行3には、Response.Buffer=Trueを設定してバッファリングを有効にしています。行9のResponse.Endメソッドでは、処理を中断してバッファリングされているHTMLデータをブラウザに送信します。処理が中断されるため、行10-14までのHTMLデータはブラウザには送信されません。
念のために、IISからブラウザに送信されたHTMLデータを確認するには、マウスを右側のフレームに移動して右ボタンをクリックします。ショートカットメニューから「ソース表示」をクリックすると、以下の内容が表示されます。ブラウザには、ASPソースの行4-8までが送信されて行10-14は処理が中断されたため送信されません。
<html>
<body>
<p>
<b>End</b>メソッドを実行すると<br>
ブラウザへの送信を中止します。
● Response.Expiresプロパティ
ResponseオブジェクトのExpiresプロパティでは、ページのキャッシュが無効となる時間を指定します。時間の単位は分で指定します。たとえば、Response.Expires=10のように指定すると、10分後にキャッシュが無効になりWebサーバーから最新のページをロードします。キャッシュを常に無効にするには、Response.Expires=-1のように負の時間を指定します。
|
Response.Expires=number |
|
|
図 Response.Expiresプロパティのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「Expiresプロパティ」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISからIEに送信されたHTMLが表示されます。図のASPソースの行3では、Response.Expiresプロパティに0を設定してキャッシュを常に無効にしています。Response.Expiresは、<html>タグの前に挿入します。行10では、Now関数でシステムの日時を表示させています。ページがキャッシュされないで常にWebサーバーからロードされるかどうか以下の手順で確認してください。
キャッシュが無効になっているか確認する手順:
①
サンプルの右側のフレームに表示されている現在の日時を書きとめたらurlをコピーします。Internet
Explorerに表示されているurl
http://localhost/accweb/viewAsp.asp?filename=samples/asp/ResponseExpires.asp
を選択したら右ボタンをクリックしてショートカットメニューから「コピー」をクリックします。
②
Internet Explorerのurlに”http://www.microsoft.com”を入力してマイクロソフトのWebサイトに移動します。
③
Internet Explorerのurlに①でコピーしたurlを貼り付けます。
※: Internet Explorerの「戻る」のボタンでサンプルに移動したときは前回表示された古いページが表示されます。
④ サンプルが表示されたら、①で書きとめておいた日時と現在表示されている日時を比較します。日時が変わっていればキャッシュが無効になっています。日時が変わっていなければキャッシュが有効になっています。
サンプルの行3をResponse.Expires=5のように書き換えて同じような手順で、今度はキャッシュが有効になっているか確認してください。
Note
|
Response.Expiresプロパティに設定する時間について: Response.Expires=0を指定すると、条件によりキャッシュが有効になったり無効になったりします。Webサーバーは、ASPファイルにResponse.Expires=の指定があるとキャッシュが無効となる日時を計算して、クライアントに送信します。もし、クライアントのパソコンがWebサーバーのパソコンより5分遅れているときは、5分間ページがキャッシュされてしまいます。この不都合を回避するには、Webサーバーとクライアントのパソコンの時間の誤差を考慮して余裕をもった時間(-1500)を指定します。-1500分を時間に換算すると25時間になります。この場合、Webサーバーとクライアントのパソコンに1時間の時間差があってもキャッシュが無効になって常に最新のページが送信されます。 |
Tip
|
window.openメソッドで表示させるページは常にキャッシュを無効にする: windowオブジェクトのopenメソッドでurlを指定してASPファイルを表示させるときは、キャッシュを無効にしないと前回表示された古いページが再表示されます。たとえば、Accessのテーブルの内容を表示するDisplay.aspファイルをwindow.open()メソッドで新規のウィンドウに表示させると、キャッシュされている古いページが表示されることがあります。この不都合を回避するには、Display.aspファイルの先頭にResponse.Expires=-1500を指定します。 |
● Response.IsClientConnectedプロパティ
ResponseオブジェクトのIsClientConnectedプロパティは、クライアントがWebサーバーに接続されているか調べることができます。プロパティの値がTrueなら接続、Falseなら切断されていることを意味します。
|
Response.IsClientConnected |
IsClientConnectedプロパティは、Session変数が有効かどうか調べるのに利用すると便利です。IsClientConnectedプロパティがFalseのときは、セッションが切断されてSession変数が解放されていますので参照することはできません。
|
|
図 Response.IsClientConnectedプロパティのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「IsClientConnectedプロパティ」をクリックしてください。Internet Expolerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISからIEに送信されたHTMLが表示されます。クライアントがWebサーバーに接続されているときは、「ユーザーはまだ接続されています」が表示されます。クライアントが切断されているときは、「ユーザーは既に切断されています」が表示されます。
Note
|
セッションタイムアウトについて: セッションタイムアウトとは、クライアントがWebサイトを訪問してからある一定の時間そのサイトをアクセスしないときにクライアントが切断されてクライアントを管理している資源が解放されることを意味します。セッションタイムアウトは、デフォルトで20分に設定されています。このセッションタイムアウトの時間は、SessionオブジェクトのTimeoutプロパティを設定することにより変更することができます。たとえば、セッションタイムアウトを5分に設定するときは以下のように記述します。 Session.Timeout = 5 なお、セッションタイムアウトの設定はIISの仮想ディレクトリのプロパティを表示させて変更することもできます。
図 IISの仮想ディレクトリのプロパティを表示させてセッションタイムアウトを再設定する例 |
● Response.Cookiesコレクション
ResponseオブジェクトのCookiesコレクションは、Cookieを作成して値を格納します。Cookieとは、ブラウザがクライアントのパソコンに記録しておく情報のことです。Cookieには、文字列、数値、日付、Boolean(True/False)型の情報を格納することができます。
|
Response.Cookies(name)[(key) |[.Domain | .Expires | .HasKeys | .Path |.Secure]] = value |
name(必須)には、Cookieの名前を指定します。key(オプション)には、Cookieのキーを指定します。.Expiresプロパティは、Cookieの有効期限(日付)を設定するときに使用します。有効期限を設定しなかったときはブラウザを終了させたときにCookieが削除されます。.HasKeysプロパティは、Cookieにキーが存在するか調べるときに使用します。
.Domainプロパティは、Cookieの取得を許可するドメインを指定するときに利用します。このプロパティには、デフォルトでCookieを作成したドメインが設定されます。通常、このプロパティは変更する必要ありません。
.Pathプロパティには、Cookieの取得を許可するASPファイルが格納されているディレクトリを指定します。.Pathで指定されたディレクトリに格納されているASPファイルのみCookieの取得が許可されます。このプロパティは、デフォルトでWebサイトのルートディレクトリが設定されています。(この場合、すべてのASPファイルがCookieの取得が許可されます。)通常、このプロパティは変更する必要ありません。
.Secureプロパティは、機密保護されていないプロトコルを許可するかどうかを設定します。Trueのときは、HTTPSプロトコルのときのみCookieの取得を許可します。Falseのときは、HTTP/HTTPS双方のプロトコルに対してCookieの取得を許可します。このプロパティは、デフォルトでFalseが設定されています。通常、このプロパティは変更する必要ありません。
Response.Cookies(“MyCookie”) = “string”
Response.Cookies(“MyCookie”).Expires = date + 365
Response.Cookies(“MyInfo”)(“Name”) = “
Response.Cookies(“MyInfo”)(“Age”) = 25
Response.Cookies(“MyInfo”)(“Male”) = True
Response.Cookies(“MyInfo”)(“Added”) = Date
|
|
図 Response.Cookiesコレクションのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次が表示されたら、「Cookiesコレクション」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISがIEに送信したHTMLが表示されます。このサンプルは、キー付きのCookieを作成してfor each…nextでCookieの情報を表示させています。
図のASPソースの行7-9では、Response.Cookiesコレクションでキー付きのCookieを作成しています。IDのキーには100、Nameのキーには”Kasai Akio”、Pswのキーには”Nice+Guy”を登録しています。
行12-23のfor each…nextでは、Response.CookiesコレクションからCookieを取得してブラウザに表示させています。行14-15では、Cookieの名前(strName)とResponse.Cookies(strName)で取得した値をブラウザに表示させています。
Response.Write(strName & “=” & _
Request.Cookies(strName) & “<br>”)
èUser=Name=
行16では、Cookieにキーが存在するか調べています。行17-20のfor each…nextループでは、Request.Cookies(strName)コレクションからキーを取得してキーの名前(strKey)とRequest.Cookies(strName)(strKey)で取得したキーの値をブラウザに表示させています。
Response.Write(strName & “(“ & strKey & “)=” & _
Request.Cookies(strName)(strKey) & “<br>”)
èUser(Name)=
èUser(Psw)=Nice+Guy
èUser(ID)=100