HttpContextオブジェクトによるページ遷移
いままで作成してきたサンプルはいろいろなイベントの記述をしてきました。例えば、ボタンを押したら・・・ページが読み込まれたら・・・等です。。Webアプリケーションを作成する上で出てくるイベントとして、アプリケーションレベルのイベントと、セッションレベルのイベントがあります。
ここで、アプリケーションレベルとセッションレベルに関してみてみましょう。アプリケーションレベルはアプリケーション毎、つまり、ソフトウェアそのもので発生するイベントです。もうひとつはセッションレベル、つまり、接続ユーザーごとに発生するイベントです。
それらのレベルには次のようなイベントが用意されています。
■ Application_StartとApplication_End
Webアプリケーションの起動時と終了時に実行されるイベントプロシージャです。この起動と終了はApplicationオブジェクトが生成される、もしくは破棄される時に発生します。このApplicationオブジェクトはWebアプリケーション毎にひとつだけ生成されるようになっています。
■ Application_BeginRequestとApplication_endRequest
HTTPによる要求の開始時と終了時に実行されるイベントプロシージャです。ポストバックによってデータを送信するときに発生します。
■ Application_Error
Webアプリケーション内で、例外(エラー)が発生すると実行されるイベントプロシージャです。
■ Session_StartとSession_End
ASP.NETが管理するセッションの開始時と終了時に実行されるイベントプロシージャです。セッションはWebブラウザからWebアプリケーションにHTTPによる要求が出されたときに確立され、タイムアウトかプログラムによる切断がされるまで継続されます。このセッションが開始されるときにSessionオブジェクトが生成され、セッションが破棄されたときにSessionオブジェクトも破棄されます。
アプリケーション毎にデータを扱う、つまり、利用ユーザーが共有利用できる仕組みも用意されています。それは、Application変数です。また、セッション毎にデータを扱う仕組みもあります。それは、Session変数です。
プロジェクトの種類 |
ASP.NET Webアプリケーション |
プロジェクト名 |
GlobalTest |
サンプルダウンロード
○ デザイン
次の図のようにコントロールを配置してください。
コントロールの配置例
「新しい項目の追加」でWebサイトに「Global.asax」ファイルを追加してください。
新しい項目の追加
○ プログラム
Default.aspx.vb
- Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
- 'Session_StartイベントやSession_EndイベントでApplicationオブジェクトに保存した値を表示
- Me.Label1.Text = Me.Application("Count")
- End Sub
- Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
- 'Sessionをキャンセルをする
- Session.Abandon()
- End Sub
- Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
- '存在しないページへ遷移
- Me.Response.Redirect("hogehoge.aspx")
- End Sub
Global.asaxの記述をします。各イベントプロシージャの処理の記述をしてください。
Global.asax
- Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
- ' アプリケーションのスタートアップで実行するコードです
- ' デバッグウィンドウにメッセージを表示する
- System.Diagnostics.Debug.WriteLine("アプリケーションの開始")
- Me.Application("Count") = 0
- End Sub
- Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
- ' アプリケーションのシャットダウンで実行するコードです
- ' デバッグウィンドウにメッセージを表示する
- System.Diagnostics.Debug.WriteLine("アプリケーションの終了")
- End Sub
- Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
- ' ハンドルされていないエラーが発生したときに実行するコードです
- ' 発生した例外をクリアしてプログラムコードを続行
- System.Diagnostics.Debug.WriteLine("例外の発生")
- ' Application_Errorイベントハンドラでは続けて表示するWebページを指定する必要がある。
- ' 表示するWebページはWeb.Configファイルで指定することもできる。
- Me.Server.Transfer("Default.aspx")
- End Sub
- Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
- ' 新規セッションを開始したときに実行するコードです
- ' デバッグウィンドウに表示して、Application変数を変化させる
- System.Diagnostics.Debug.WriteLine("セッションの開始")
- Me.Application.Lock()
- Me.Application("Count") = Int32.Parse(Me.Application("Count")) + 1
- Me.Application.UnLock()
- End Sub
- Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
- ' セッションが終了したときに実行するコードです
- ' メモ: Web.config ファイル内で sessionstate モードが InProc に設定されているときのみ、
- ' Session_End イベントが発生します。session モードが StateServer か、または SQLServer に
- ' 設定されている場合、イベントは発生しません。
- ' デバッグウィンドウにメッセージを表示して、Application変数を変化させる。
- System.Diagnostics.Debug.WriteLine("セッションの終了")
- Me.Application.Lock()
- Me.Application("Count") = Int32.Parse(Me.Application("Count")) - 1
- Me.Application.UnLock()
- End Sub
- '追加
- Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
- ' デバッグウィンドウにメッセージを表示する
- System.Diagnostics.Debug.WriteLine("要求の開始")
- End Sub
- '追加
- Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As System.EventArgs)
- ' デバッグウィンドウにメッセージを表示する
- System.Diagnostics.Debug.WriteLine("要求の終了")
- End Sub
- '追加
- Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs)
- ' デバッグウィンドウにメッセージを表示する
- System.Diagnostics.Debug.WriteLine("認証要求の発生")
- End Sub
○ 実行結果
index.aspxを実行してください。
実行結果
現在、接続中のセッションの数が表示されるようになります。アプリケーション開始時に、Application変数を0で初期化し、セッション開始時にインクリメントし、セッション終了時にデクリメントするようにしています。
アプリケーションレベルでの処理の状態は、出力ウィンドウでも確認することができます。複数ブラウザを起動してテストをしましょう。
前へ 次へ