Requestオブジェクトの使い方

 

ASPRequestオブジェクトには、コレクション、プロパティ、メソッドがります。ここでは、Requestオブジェクトの各種コレクションについて説明します。

 

  Request.QueryStringコレクション

RequestオブジェクトのQueryStringコレクションは、HTTPQueryStringの値を取得することができます。HTTPQueryStringは、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

 

14if len(request.QueryString) > 0では、QueryStringがあるか調べています。送信ボタンをクリックしたときブラウザは、フォームから入力したデータをQueryStringとして渡します。行16-19では、QueryStringコレクションの各種情報をResponse.Writeメソッドでブラウザに表示させています。

 

 

Request.QueryString                     è Name=Kasai&Gender=male

Request.QueryString.Count          è 2

Request.QueryString(“Name”)       è Kasai

Request.QueryString(“Gender”)    è male

 

 

Tip

QueryStringASPファイル間で継承するには:

 

QueryStringASPファイル間で継承するには、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, Femalecheckedを保存しています。

 

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には、フォームのエレメント(HTMLname=で指定した名称)を指定します。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-3ASPソースの行5の<form>タグには、action=で自分自身を指定していますので、送信ボタンをクリックするとRequestForm.aspが再ロードされます。また、行5<form>タグにmethod=”postの指定がありますので、ブラウザはフォームのエレメント名と値をHTTPヘッダーとしてRequestForm.aspに渡します。

 

14if 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”)     è Kasai

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-5ASPの行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") = "Kasai Akio"

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=Kasai+Akio&Psw=Nice%2BGuy&ID=100

èUser(Name)=Kasai Akio

èUser(Psw)=Nice+Guy

èUser(ID)=100

 

 

図 Request.Cookiesコレクションのサンプル

 

Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「Cookiesコレクション」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、IISIEに送信したHTMLが表示されます。このサンプルは、クライント別のアクセス件数をCookieに登録して管理しています。

 

図のASPの行8Response.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メソッドで訪問回数をブラウザに送信しています。