Requestオブジェクトの使い方
ASPのRequestオブジェクトには、コレクション、プロパティ、メソッドがります。ここでは、Requestオブジェクトの各種コレクションについて説明します。
● Request.QueryStringコレクション
RequestオブジェクトのQueryStringコレクションは、HTTPのQueryStringの値を取得することができます。HTTPのQueryStringは、urlの最後に疑問符(?)を付加して指定します。(関数にたとえると、urlが関数名、QueryStringが引数に相当します)
MyFuncion(Name,Age)
http://www.accweb.com?Name=Kasai&Age=25
urlの?以降の部分がQueryStringです。QueryStringは、関数の引数と同様名前を付けて値を指定することができます。複数の名前を指定するときは、&Ageのように(&)を付加します。たとえば、HTMLの<a>タグにQueryStringを追加するには以下のように記述します。
<a href=”http//www.accweb.com?Name=Kasai&Age=25”>My Info</a>
“Name=Kasai&Age=25”の部分がQueryStringです。
フォームから入力したデータをQueryStringコレクションで取得するには、<form>タグのmethod=”get”を指定する必要がります。
|
Request.QueryString(variable)[(index)|.Count] |
variable(オプション)には、QueryStringの変数名(名前)を指定します。index(オプション)には、配列変数の要素数(1から始まる要素数)を指定します。.Countプロパティは、配列変数の要素数(1から始まる要素数)を返します。
Sample.asp?Name=Akio&Name=Sachiko&Name=Chinatu
Request.QueryString(“Name”).Count ‘ è 3
Request.QueryString(“Name”)(1) ‘ è Akio
Request.QueryString(“Name”)(2) ‘ è Sachiko
Request.QueryString(“Name”)(3) ‘ è Chinatu
QueryStringコレクションの変数名(variable)は省略することができます。変数名を省略したとき、.Countプロパティには異なる変数名の個数が返されます。また、QueryStringには、すべての変数名と値が返されます。
Sample.asp?Name=Akio&Age=25
Request.QueryString.Count ‘ è 2
Request.QueryString ‘ è Name=Akio&Age=25
|
|
図 Request.QueryStringコレクションのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「QueryStringコレクション」をクリックしてください。Internet Explorerの左側のフレームにはASPのソースが表示されます。右側のフレームに表示されている氏名のテキストボックスに”Kasai”、性別のラジオボタンから”男”をチェックしたら、送信ボタンをクリックしてください。図のASPソースの行5の<form>タグには、action=で自分自身を指定していますので、送信ボタンをクリックするとRequestQueryString.aspが再ロードされます。また、行5の<form>タグにmethod=”get”の指定がありますので、ブラウザはフォームから入力された氏名と性別のデータをQueryStringとしてRequestQueryString.aspに渡します。
RequestQueryString.asp?Name=Kasai&Gender=male
行14のif len(request.QueryString) > 0では、QueryStringがあるか調べています。送信ボタンをクリックしたときブラウザは、フォームから入力したデータをQueryStringとして渡します。行16-19では、QueryStringコレクションの各種情報をResponse.Writeメソッドでブラウザに表示させています。
Request.QueryString ‘ è Name=Kasai&Gender=male
Request.QueryString.Count ‘ è 2
Request.QueryString(“Name”) ‘ è
Request.QueryString(“Gender”) ‘ è male
Tip
|
QueryStringをASPファイル間で継承するには: QueryStringをASPファイル間で継承するには、HTMLの<a>タグのhref=、<form>タグのaction=、response.Redirect()メソッドなどにASPファイル名を記述するとき、(?)と<%=request.QueryString%>を挿入します。これでカレントのASPファイルに渡されたQueryStringを次のASPファイルに継承することができます。 <% @language=vbscript %> <% option explicit %> <html> <body> <li><a href="link1.asp?<%=request.QueryString%>">Link1</a><br> <li><a href="link2.asp?<%=request.QueryString%>">Link2</a><br> <li><a href="link3.asp?<%=request.QueryString%>">Link3</a><br> <form action=”sample.asp? <%=request.QueryString%>”> ・・・ </form> <% response.Redirect(“sample.asp? <%=request.QueryString%>”) %> </body> </html> |
Tip
|
フォームから入力されたデータをfor…nextループで取得するには: Request.QueryString.Countを使用すると、for…nextループでフォームから入力されたデータを取得することができます。フォームから入力したデータは、Request.QueryString(i)でインデックス(要素数)を指定して取得します。たとえば、Request.QueryString(1)では、氏名の値が取得できます。同様に、Request.QueryString(2)では性別の値が取得できます。 if len(request.QueryString) > 0 then response.write("<hr>") for
intI = 1 to request.QueryString.Count response.write(request.QueryString(intI) & "<br>") next end if for…nextループの代わりにfor each…nextループを使用することもできます。 if len(request.QueryString) > 0 then response.write("<hr>") for
each strName in request.QueryString response.write(strName & “=>” & _ request.QueryString(strName) & "<br>") next end if |
Tip
|
フォームから入力したデータを再ロードされたときに再表示するには: ASPファイルが再ロードされたときに、すでに入力されているデータをフォームに再表示すると使い勝手のよいWebページになります。図5-4-1のサンプルを例に、データをフォームに再表示する方法を説明します。 HTMLの<form>・・・</form>に配置されている、<input type=”text”>, <input type=”radio”>などのタグを表示させるとき、事前にフォームにデータが入力されているかRequest.QueryStringコレクションで調べます。フォームにデータが入力されているときは、Request.QueryStirngに変数名(タグ名)を指定して値を取得して<input>タグのvalue=に設定します。
図 フォームが再ロードされたときすでに入力されているデータを再表示するサンプル 図のASPソースの行12では、QueryStringがあるか調べています。行13では、Request.QueryString(“Name”)で氏名の値を取得して変数Nameに保存しています。行14-18では、Request.QueryString(“Gender”)で性別の値を取得して、変数Male, Femaleに”checked”を保存しています。 行22では、<input type=”text”>タグのvalue=に変数Nameの値を設定しています。<%=Name%>は、<% Response.Write(Name)%>の省略形です。行23-24では、<input type=”radio”>タグに”checked”を挿入しています。たとえば、性別のラジオボタンから「男」がチェックされたときは、 <input type=”radio” value=”male” name=”Gender” checked> のようなHTMLタグが生成されます。この場合、「男」のラジオボタンがチェックされた状態で表示されます。 |
Tip
|
request.QueryStringコレクションから値を取得するコードを自動生成するには: HTMLの<form method=”get”>・・・</form>タグに<input type=”text”>タグでテキストボックスを定義したとき、テキストボックスの値を取得するコードを自動生成するには以下のようなASPスクリプトを作成します。 InputForm.asp: <html> <body> <form action="GetForm.asp" method="get"> Name: <input type="text" name="Name"> <br> Email: <input type="text" name="Email"> <br> <input type="submit"> </form> </body> </html> GetForm.asp: <html> <body> <% for each strName in request.QueryString response.write "dim str" & strName & " : str" & strName _ & " = request.QueryString('" & strName & "')" & "<br>" next %> </body> </html> InputForm.aspからクエリ送信のボタンをクリックして、GetForm.aspがロードされると以下のようなdimステートメントが自動生成されます。 è dim strName : strName = request.QueryString('Name') è dim strEmail : strEmail = request.QueryString('Email') このステートメントをコピー&貼り付けすればフォームから値を取得するコーディングが完了です。 |
Request.Formコレクション
RequestオブジェクトのFormコレクションは、フォームから入力したすべての値を取得することができます。Request.Formコレクションを使用するには、HTMLの<form>タグにmethod=”post”を指定する必要があります。
|
Request.Form(element)[(index)|.Count] |
elementには、フォームのエレメント(HTMLのname=で指定した名称)を指定します。indexには、配列変数の要素数(1から始まる要素数)を指定します。.Countプロパティは、配列変の要素数(1から始まる要素数)を返します。
<form action=”Sample.asp” method=”post”>
<input type=”text” name=”Name” value=”Akio”><br>
<input type=”text” name=”Name” value=”Sachiko”><br>
<input type=”text” name=”Name” value=”Chinatu”><br>
</form>
Request.Form(“Name”).Count ‘ è 3
Request.Form(“Name”)(1) ‘ è Akio
Request.Form(“Name”)(2) ‘ è Sachiko
Request.Form(“Name”)(3) ‘ è Chinatu
Formコレクションのelementは省略することができます。elementを省略すると、フォームのすべてのエレメントを返します。
<form action=”Sample.asp” method=”post”>
<input type=”text” name=”Name” value=”Akio”><br>
<input type=”text” name=”Age” value=”25”><br>
</form>
Request.Form.Count ‘ è 2
Request.Form ‘ è Name=Akio&Age=25
|
|
図 Request.Formコレクションのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「Formコレクション」をクリックしてください。Internet Explorerの左側のフレームにはASPのソースが表示されます。右側のフレームに表示されている氏名のテキストボックスに”Kasai”、性別のラジオボタンから”男”をチェックしたら、送信ボタンをクリックしてください。図5-4-3のASPソースの行5の<form>タグには、action=で自分自身を指定していますので、送信ボタンをクリックするとRequestForm.aspが再ロードされます。また、行5の<form>タグにmethod=”post”の指定がありますので、ブラウザはフォームのエレメント名と値をHTTPヘッダーとしてRequestForm.aspに渡します。
行14のif len(request.form) > 0では、フォームのエレメントを調べています。フォームに何もデータを入力しないで送信ボタンをクリックすると、Request.Formコレクションには、”Name=”が返されます。つまり、Name=がブランクの値で渡ります。行16-19では、Formコレクションの各種情報をResponse.Writeメソッドでブラウザに表示させています。
Request.Form ‘ è Name=Kasai&Gender=male
Request.Count ‘ è 2
Request.Form(“Name”) ‘
è
Request.Form(“Gender”) ‘ è male
Tip
|
フォームから入力されたデータをfor…nextループで取得するには: Request.Form.Countを使用すると、for…nextループでフォームから入力されたデータを取得することができます。フォームから入力したデータは、Request.Form(i)でインデックス(要素数)を指定して取得します。たとえば、Request.Form(1)では、氏名の値が取得できます。同様に、Request.Form(2)では性別の値が取得できます。 if len(request.Form) > 0 then response.write(“<hr>”) for intI = 1 to request.Form.Count response.write(request.Form(intI) & “<br>”) next end if for…nextループの代わりにfor each…nextループを使用することもできます。 if len(request.Form) > 0 then response.write(“<hr>”) for each strName in request.Form response.write(strName & “=>” & _ request.Form(strName) & “<br>”) next end if |
Tip
|
フォームから入力したデータを再ロードされたときに再表示するには: ASPファイルが再ロードされたときに、すでに入力されているデータをフォームに再表示すると使い勝手のよいWebページになります。図のサンプルを例に、データをフォームに再表示する方法を説明します。 HTMLの<form>・・・</form>に配置されている、<input type=”text”>、<input type=”radio”>などのタグを表示させるとき、事前にフォームにデータが入力されているかRequest.Formコレクションで調べます。フォームにデータが入力されているときは、Request.Formにエレメント(タグ名)を指定して値を取得して<input>タグのvalue=に設定します。
図 フォームが再ロードされたときにすでに入力されているデータを再表示するサンプル 行13では、Request.Form(“Name”)で氏名の値を取得して変数Nameに保存しています。行14-18では、Request.Form(“Gender”)で性別の値を取得して、変数Male、 Femaleに”checked”を保存しています。 行22では、<input type=”text”>タグのvalue=に変数Nameの値を設定しています。<%=Name%>は、<%Response.Write(Name)%>の省略形です。行23-24では、<input type=”radio”>タグに”checked”属性を挿入しています。たとえば、性別のラジオボタンから「男」がチェックされたときは、 <input type=”radio” value=”male” checked> のようなHTMLタグが生成されます。この場合、「男」のラジオボタンがチェックされた状態で表示されます。 |
Tip
|
request.Formコレクションから値を取得するコードを自動生成するには: HTMLの<form method=”post”>・・・</form>タグに<input type=”text”>タグでテキストボックスを定義したとき、テキストボックスの値を取得するコードを自動生成するには以下のようなASPスクリプトを作成します。 InputForm.asp: <html> <body> <form action="GetForm.asp" method="post"> Name: <input type="text" name="Name"> <br> Email: <input type="text" name="Email"> <br> <input type="submit"> </form> </body> </html> GetForm.asp: <html> <body> <% for each strName in request.Form response.write "dim str" & strName & " : str" & strName _ & " = request.Form('" & strName & "')" & "<br>" next %> </body> </html> InputForm.aspからクエリ送信のボタンをクリックして、GetForm.aspがロードされると以下のようなdimステートメントが自動生成されます。 è dim strName : strName = request.Form('Name') è dim strEmail : strEmail = request.Form('Email') このステートメントをコピー&貼り付けすればフォームから値を取得するコーディングが完了です。 |
● Request.ServerVariablesコレクション
RequestオブジェクトのServerVariablesコレクションは、HTTPヘッダーの各種情報を取得することができます。
|
Request.ServerVariables (variable) |
variableには、表に示すようなサーバー変数を指定します。HTTP_REFERERは、リンク元のurlを取得するのに便利です。たとえば、Yahooの検索エンジン経由で訪問したときは、Yahooのカテゴリのurlが報告されます。
Request.ServerVariables(“HTTP_REFERER”)
èhttp://dir.yahoo.co.jp/Computers_and_Internet/Software/General_Business_Softwares/Databases/Access/
HTTP_USER_AGENTは、ブラウザの種類、バージョン番号を取得するのに便利です。
Request.ServerVariables(“HTTP_USER_AGENT”)
èMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)
表 Request.ServerVariablesコレクションのサーバー変数(一部)
|
サーバー変数 |
意味 |
|
ALL_HTTP |
HTTPヘッダーのすべての情報を返します。ヘッダー情報の先頭に”HTTP_”が付加されます。 |
|
ALL_RAW |
HTTPヘッダーの生データを返します。 |
|
HTTP_COOKIE |
Cookie情報を返します。 |
|
HTTP_REFERER |
リンク元のURLを返します。リンク元を求めるのに役立ちます。 |
|
HTTP_USER_AGENT |
ブラウザの情報を返します。 |
|
LOCAL_ADDR |
サーバーのアドレスを返します。 |
|
LOGON_USER |
ログインしたアカウント情報を返します。 |
|
PATH_INFO |
表示されているページのurlを返します。 |
|
QUERY_STRING |
QueryStringを返します。 |
|
REMOTE_ADDR |
リモートホストのIPアドレスを返します。 |
|
REMOTE_HOST |
リモートホストの名前を返します。 |
|
REMOTE_USER |
リモートユーザー名を返します。 |
|
REQUEST_METHOD |
フォームのメソッド(get/post)を返します。 |
|
SCRIPT_NAME |
表示されているページのurlを返します。 |
|
SERVER_NAME |
サーバー名を返します。 |
|
SERVER_PROTOCOL |
サーバーのプロトコルを返します。 例:HTTP/1.1 |
|
SERVER_SOFTWARE |
サーバーソフト名とバージョン番号を返します。 例:Microsoft-IIS/5.1 |
|
URL |
urlの基本情報を返します。 |
|
|
図 Request.ServerVariablesコレクションのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「ServerVariablesコレクション」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISからIEに送信されたHTMLが表示されます。図5-4-5のASPの行7-10では、for each…nextループですべてのServerVariablesの変数名と値を表示させています。for eachの変数strNameには、ServerVariablesの変数名(ALL_HTTP, ALL_RAW,・・・)が格納されます。行8-9では、Response.Writeメソッドで変数名と変数の値をブラウザに送信しています。
Response.Write “<b>” & strName & “:<.b>” _
Response.ServerVariables(strName) & “<br>”
・・・
èSERVER_PROTOCOL: HTTP/1.1
èSERVER_SOFTWARE: Microsoft-IIS/5.1
・・・
表には、一部のサーバー変数しか記述されていませんが、このサンプルにはすべてのサーバー変数と内容が表示されます。Request.ServerVariablesコレクションを使用するときに参考にすると便利です。
● Request.Cookiesコレクション
RequestオブジェクトのCookiesコレクションは、Cookieの情報を取得することができます。また、.HasKeysプロパティでCookieにキーが存在するか調べてキーその値を取得することもできます。
|
Request.Cookies(name)[(key) | .HasKeys] |
nameには、Cookieの名前を指定します。keyは、Cookieのキーを取得するときに指定します。.HasKeysプロパティは、Cookieにキーがあるか調べるときに使用します。キーがあるときはTrue, ないときはFalseを返えします。
for each…nextループでCookieのコレクションと、キーのコレクションを同時に取得することができます。
Response.Cookies("User")("ID") = "100"
Response.Cookies("User")("Name") =
"
Response.Cookies("User")("Psw") = "Nice+Guy"
for each strName in Request.Cookies
Response.Write(strName & "=" & Request.Cookies(strName) & "<br>")
if Request.Cookies(strName).HasKeys then
for each strKey in Request.Cookies(strName)
Response.Write(strName & "(" & strKey & ")=" & _
Request.Cookies(strName)(strKey) & "<br>")
next
end if
next
for each…nextループの実行結果:
èUser=Name=
èUser(Name)=
èUser(Psw)=Nice+Guy
èUser(ID)=100
|
|
図 Request.Cookiesコレクションのサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「Cookiesコレクション」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISがIEに送信したHTMLが表示されます。このサンプルは、クライント別のアクセス件数をCookieに登録して管理しています。
図のASPの行8のResponse.Cookiesコレクションでは、Expires属性にdate + 365を設定してCookieの有効期限を1年にしています。行9-13では、Request.Cookiesコレクションに”RepeatCnt”のCookieがあるか調べています。Cookieが登録されていないときは、変数intCntを1に初期化します。Cookieが登録されているときは、+1加算してintCntに保存します。行14では、Response.Cookiesの”RepeatCnt”を+1して訪問回数を更新しています。行15-16では、Response.Writeメソッドで訪問回数をブラウザに送信しています。