連載
» 2002年07月18日 00時00分 公開

連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― :第4回 ASP.NETページのフレームワーク(前編)― コードビハインドとPageクラス ― (2/3)

[田口景介,著]

Pageクラス

 以上のように、scriptエレメント内部に定義したメソッドはすべてPageクラスの派生クラスのメンバとして定義される。従って、こうしたメソッドの内部では、前回解説したIsPostBackプロパティのように、Pageクラスのメソッドやプロパティへアクセスすることが可能だ。PageクラスにはIsPostBackプロパティ以外にもいくつか利用頻度の高いプロパティやメソッドが定義されているので、ここでPageクラスのメンバについて解説しておこう。

 Pageクラスには非常にたくさんのメソッドとプロパティが定義されているが、頻繁に利用されるメンバはそれほど多くはない。比較的利用頻度が高いと思われるPageクラスのメンバをピックアップして、次の2つの表に示す。

プロパティ 機能
Application System.Web.HttpApplicationState 同一のアプリケーションでの複数のセッションで共有される情報を保存しておくコレクション
IsPostBack bool ポストバックされたリクエストを処理していればtrue
IsValid bool ページに含まれるすべての検証サーバ・コントロールの検証に成功するとtrue
Request HttpRequest クライアントから送信された情報が格納されたオブジェクト
Response HttpResponse クライアントへの出力をコントロールするオブジェクト
Server HttpServerUtility ユーティリティ的なメソッドが定義されたクラス
Session HttpSessionState セッションが処理されている間、維持され続ける情報を保存しておくコレクション
Trace TraceContext トレース情報の出力に利用するオブジェクト。詳しくは後述
Pageクラスの主要なプロパティ

メソッド 機能
MapPath 仮想パスを物理パスに変換する
Validate ページに含まれるすべての検証サーバ・コントロールの検証を行う
Pageクラスの主要なメソッド

 ASPの経験があれば、見慣れたプロパティがそろっていることに気付くだろう。Request、Response、Serverオブジェクトは、これなくしてはASPアプリケーションが成立しないとさえいえるASPの御三家オブジェクトであるし、ApplicationやSessionオブジェクトもおなじみのオブジェクトであろう。見慣れないプロパティは、IsPostBack、IsValid、Traceプロパティぐらいのはずだ。IsValidプロパティとValidateメソッドを参照するサーバ・コントロールの検証については次回以降解説する予定でいるので、ここではRequest、Response、Serverプロパティについて解説していく。

■PageクラスのRequestプロパティ

 名前が示すとおり、Requestプロパティには、クライアントからサーバへ送信されたリクエストにまつわる情報が格納されているHttpRequest型オブジェクトである。基本的に、クライアントから送信されたHTTPリクエストが解析され、アクセスしやすい形で構造化されたオブジェクトだと考えればよい。

 ただし、リクエストに含まれる情報のうち最もアクセス頻度が高いと思われる、フォームに入力された情報は、サーバ・コントロール・オブジェクトを通してアクセスできるので、Requestプロパティの使用頻度はそれほど高くはない。主に、リスト4.4に示すように、GETメソッドを利用してURLの一部として送信されたパラメータへアクセスするとき、またはリスト4.5に示すように、クライアントから送信されたクッキーを参照するときなど、フォーム以外の情報へアクセスするために利用することになるだろう。

<%@ PAGE LANGUAGE="C#" %>
<html>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
  if (!isPostBack) {
    TextBox1.Text = Request.QueryString["query"];
  }
}
</script>
<body>
<form runat="server">
<asp:TextBox id="TextBox1" runat="server" />
<asp:Button Text="Submit" />
</form>
</body>
</html>

リスト4.4 GETメソッドで送信されたパラメータを取得するASP.NETページ
(「http://〜/?query=hoge」の形式でアクセスされた場合の例)

<%@ PAGE LANGUAGE="C#" %>
<html>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
  String[] keys = Request.Cookies.AllKeys;
  for (int i = 0; i < keys.Length; i++) {
    Response.Write(keys[i] + ":" + Request.Cookies[keys[i]] + "<br>");
  }
}
</script>
<body>
</body>
</html>

リスト4.5 クライアントから送信されたクッキーの一覧を表示するASP.NETページ

 また、HttpRequestクラスにはデバッグに便利なSaveAsメソッドが用意されている。このメソッドを、

Request.SaveAs("c:\\debug.txt", true);

のように呼び出せば、リスト4.6に示すように、クライアントから送られてきたリクエストが生の状態でファイルに保存することができる。

POST /aspnet/Request/hoge03.aspx HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 153
         .
         .
__VIEWSTATE=dDwyMDA1MzM2OTYxOzs%2BKFxIkT0e9AQPgtAR8MNLbB0jNGI
%3D&t1=%E3%81%82%&_ctl1=Submit

リスト4.6 HttpRequest.SaveAsメソッドの出力例

 HttpRequestクラスの主要なプロパティとメソッドを次に挙げておく。

プロパティ 機能
Form NameValueCollection フォーム変数が格納されたコレクション。サーバ・コントロールcの値はRequest.Form["c"]で参照できる
QueryString NameValueCollection GETメソッドを利用して、URLの一部として送信されたパラメータを含むコレクション。「http://〜/default.aspx?filename=sample.txt」としてリクエストされたとき、filenameの値(sample.txt)は「Request.QueryString["filename"]」で参照できる
ServerVariables NameValueCollection CONTENT_LENGTHやREMOTE_ADDRといったサーバ変数が格納されたコレクション。このコレクションに格納された情報の大半は、HttpRequestクラスのプロパティとしてアクセスできる
Cookies HttpCookieCollection クライアントから送信されたクッキーが格納されたコレクション
Params NameValueCollection QueryString、Form、ServerVariables、Cookiesの各要素がすべて格納されたコレクション
Files HttpFileCollection フォームからアップロードされたファイルが格納されたコレクション
HttpRequestクラスの主要なプロパティ

メソッド 機能
SaveAs クライアントから送信された情報をそのままファイルに保存する
MapPath 引数に指定された仮想パスに対応する物理パスを戻す
HttpRequestクラスの主要メソッド

  

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。