SlideShare a Scribd company logo
1 of 40
Download to read offline
ASP.NETの仕組み


あおい情報システム
どっとねっとふぁん(http://dotnetfan.org/)
        小野 修司
Webアプリケーションの特徴
 「ブラウザ」と「サーバ」間でのやりとりを繰り返すことで
 一連の処理を行う
  ブラウザ
    サーバにリクエストをあげる(リクエストの実態は文字列)
    サーバから受け取ったHTML(JavaScriptを含む)を解釈してユー
     ザインタフェースを表示する
  サーバ
    ブラウザから受け取ったリクエストに応じた処理を行い、HTMLを
     組み立ててブラウザに返す
        HTMLというソースコードを生成しているといえる
        文字列(リクエスト)を受け取って文字列(HTML)を返す
         サーバの処理の本質は文字列操作といえる
    複数のブラウザからのリクエストを同時に処理する

 サーバへのリクエストがあって、はじめてレスポンスが返る
  サーバから一方的にデータを送りつけることはできない

 サーバはステート(前回のリクエスト状態等)を持たない
  ブラウザから次のリクエストが送られることを予期しない
ASP.NETの特徴
 PostBackが基本
   formタグのaction先が自分自身
      ASP等ではaction先を別のページにし、データ入力ペー
       ジとデータ処理ページを分けるのが一般的だった
   イベントドリブン型の開発のための仕掛け


 コンパイルによる処理速度向上
   aspxファイルはソースコード化されコンパイル
   最初の実行開始時にdllが作成される
      ソースの修正等をしなければdllはそのまま利用される
   実行時にメソッド単位でJITコンパイルされるのは
   Windowsアプリ等と同じ
ASP.NETの実行環境

 IIS6まで
  IISのインストール後、.NET Frameworkをイン
   ストールする
  逆になってしまった場合はaspnet_regiis.exeを
   利用して修復可能
  .NET Framework 2.0 以降をインストールする
   と、IISの管理ツールに.NET Frameworkのバー
   ジョン管理が追加される
    Ver 1.1までの場合はaspnet_regiisにて管理
    Ver 3.0、3.5での実行はVer2.0を指定する
IIS6上のWebアプリケーション
 フォルダをアプリケーションとして「設定」する
  仮想ディレクトリでも実フォルダでも可能
  標準で仮想ディレクトリを追加すると、アプリケーショ
   ンとして設定済みとなる
  仮想ディレクトリはアプリケーションとして設定せず、
   単に実ディレクトリ構成とは異なるフォルダ階層を実現
   するためにも利用可能

 アプリケーションの設定とは
  Windowsアプリケーションの1つのexeファイルと個々の
   アプリケーション設定が対応するイメージ
  アプリケーションの境界
   Frameworkのバージョン
   セキュリティ/アクセス制御
IIS6の認証とASP.NETの認証
 IIS側でも認証設定が可能
  匿名
  基本認証
  統合 Windows 認証

 ASP.NETにも認証機能がある
  Form認証
    DBベース
    Active Directoryベース
    Form認証を簡単に利用できるコントロール群を提供
  Windwos認証

 ASP.NETの認証機能を利用するほうが細かい設定が容易
  IIS側は匿名を許可しておく
開発サーバとIISの違い
 VS2005以降には開発サーバが含まれており、その上で
  動作検証が可能
 開発サーバとIISでは動作が異なる
  ファイルマッピング
   開発サーバ - すべてのファイルがASP.NETによって処理され
    る
   IIS - アプリケーションの構成でASP.NETに関連づけられた拡
    張子のファイルのみASP.NETによって処理される
   開発サーバではweb.configによるアクセス制御が画像ファイ
    ル等にも影響する
  実行ユーザ
   開発サーバ - ログイン中のユーザの権限で実行される
   IIS - ASPNETユーザまたはNetwork Serviceユーザの権限で実
    行される
   ファイルへの書き込み等を行っている場合に注意
IIS7とASP.NET

 ASP.NETを有効にすることで実行可能

 IIS7はASP.NETをベースに進化したものと
  考えてよい
  ファイルはすべてASP.NETによって処理される
  実行ユーザはNT AUTHORITYNETWORK
   SERVICE
  ASP.NETの設定とIIS7の設定ツールが一体化し
   ている
   一部web.configの書き方が異なるので注意
ASP.NETの設定
 マシン全体の設定
    C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG
      machine.config
      web.config
    デフォルトの設定についてはconfigに記述されていないものも
      初期起動時の速度を早くするため、ハードコーディングされている
      ドキュメントにて確認できるものもある

 アプリケーション単位の設定
  アプリケーションとして設定されているフォルダに存在する
   web.config
  設定の種類によってはこの場所に記述しないと有効にならないもの
   がある
  マシン全体の設定を引き継ぐ

 下層のフォルダ単位の設定
    各フォルダに存在するweb.config
    アプリケーション単位のweb.config内に含めることも可能
    上位フォルダの設定を引き継ぐ
ASP.NET 2.0と3.5

 web.configの違いでしかない
  VS2008で対象となるFrameworkを変更すると、
  web.configが書き換わる

  .NET Framework 2.0、3.0、3.5はすべて2.0のCLRを
  利用する
   ASP.NET では、3.0は2.0から何も変化がなかったため
    通常利用しない

  Ver 3.5では言語のコンパイラが新しくなり、いく
  かのdllが追加された
   web.configに追加されたdllの参照と利用するコンパイ
    ラの設定が追加される
リクエストが処理されるしくみ
概要
1. ブラウザからリクエストがあがる
2. httpコンテキストが作られる
3. アプリケーションイベントが発生する
        アプリケーションイベントの発生順序は固定
        ページの処理が行われる
        ページイベントが発生する
        ページイベントの発生順序は固定
        ポストバック時はコントロールイベント、ポスト
         バックイベントが発生する
4. レスポンスが返される
        ページ、httpコンテキストのインスタンスは破棄
HttpContext
   リクエストがあがってきてレスポンスを返すまで生存している
       グローバル変数のような意味を持つインスタンスとなっている
   以下のようなデータを格納
       リクエストの内容
       レスポンスの内容
       アプリケーションオブジェクト
       セッションオブジェクト
       キャッシュデータ
       ユーザ情報
   httpコンテキストの内容を書き換えることでASP.NETの動作を変え
    ることが可能
       例:URLリライト
         Context.Rewritepath
   現在のコンテキストはHttpContext.Currentで取得
       Pageの中ではContextプロパティで取得可能
       独自クラスの中でHttpContext.Currentを利用
アプリケーションイベント
   アプリケーションイベントの発生順序は固定
   HttpApplicationクラスのドキュメントで確認
     BeginRequest                リクエストの処理開始時に発生
     AuthenticateRequest         認証の開始時に発生
     PostAuthenticateRequest     認証の終了時に発生
     AuthorizeRequest            承認の開始時に発生
     PostAuthorizeRequest        承認の終了時に発生
     ResolveRequestCache         キャッシュの処理の開始時に発生
     PostResolveRequestCache     キャッシュの処理の終了時に発生
     PostMapRequestHandler       ハンドラの生成後に発生
     AcquireRequestState         セッション等の状態の取得時に発生
     PostAcquireRequestState     セッション等の状態の取得後に発生
     PreRequestHandlerExecute    ハンドラの実行前に発生
     PostRequestHandlerExecute   ハンドラの実行後に発生
     ReleaseRequestState         セッション等の状態の開放時に発生
     PostReleaseRequestState     セッション等の状態の開放後に発生
     UpdateRequestCache          キャッシュの状態更新時に発生
     PostUpdateRequestCache      キャッシュの状態更新後に発生
     EndRequest                  リクエストの処理終了時に発生
   Global.asax内で個々のイベントにたいする処理を記述可能
HttpModule

 アプリケーションイベントをトリガにし
  て実行する処理をまとめて登録するしく
  み
 IHttpModuleインタフェースを継承したク
  ラスで最低限InitメソッドとDisposeメソッ
  ドを実装する
  Initメソッド-アプリケーションイベントにプ
   ライベートメソッドを登録する
  Disposeメソッド-通常は空でよい
 作成したクラスをweb.configで登録する
実装済のHttpModule
 マシンレベルのweb.configで登録
   System.Web.Caching.OutputCacheModule
   System.Web.SessionState.SessionStateModule
   System.Web.Security.WindowsAuthenticationModule
   System.Web.Security.FormsAuthenticationModule
   System.Web.Security.PassportAuthenticationModule
   System.Web.Security.RoleManagerModule
   System.Web.Security.UrlAuthorizationModule
   System.Web.Security.FileAuthorizationModule
   System.Web.Security.AnonymousIdentificationModule
   System.Web.Profile.ProfileModule
   System.Web.Mobile.ErrorHandlerModule
   System.ServiceModel.Activation.HttpModule

 ASP.NETの基本的な動作はHttpModuleで実装されている
 IIS7のモジュールとしてHttpModuleを利用可
ページ毎の処理
HttpHandlerの設定
   マシンレベルのweb.config
    <httpHandlers>
     …
     <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory"
       validate="True"/>
     <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory"
       validate="True"/>
      <add path="*.asmx" verb="*"
       type="System.Web.Services.Protocols.WebServiceHandlerFactory,
       System.Web.Services, Version=2.0.0.0, Culture=neutral,
       PublicKeyToken=b03f5f7f11d50a3a" validate="False"/>
     …
     <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler"
       validate="True"/>
     …
    </httpHandlers>

   拡張子をどのクラスが処理するかを設定
       IISからASP.NETに制御が渡されていることが前提
aspxファイル
 System.Web.UI.Pageクラスを継承
   IHttpHandlerインターフェイスを継承している

 内部に多くのコントロールを持つ
   通常ツールボックスからのドラッグ アンド ドロップで追加

 ページライフサイクル
   ページのインスタンスはリクエスト毎に生成され消滅する
    初期表示時のインスタンスとポストバック時のインスタンス
     に関連は存在しない(ステートレス)
   ページが生成して消滅するまでにページイベントが決まっ
   た順番で発生する
動作サンプル

 Default.aspx
   Trace=“true”をPageディレクティブに記述
   テキストボックス、ボタン、ラベルを追加


 Default.aspx.cs
    protected void Button1_Click(object sender, EventArgs e)
      {
        Trace.Warn("ボタンクリック時の処理");
        Label1.Text = TextBox1.Text;
      }
コントロールのツリー
 _Page
     LiteralControl       - DOCTYPE、HTMLタグ
     HtmlHead             - headタグ
       HtmlTitle          - titleタグ
     LiteralControl       - bodyタグ
     HtmlForm             - formタグ
         LiteralControl   - divタグ
         TextBox          - テキストボックス
         LiteralControl   - 改行コード(CRLF)
         Button           - ボタン
         LiteralControl   - 改行コード + brタグ
         Label            - ラベル
         LiteralControl   - 改行コード + div終了タグ
     LiteralContorl       - body、html終了タグ

 ソースコードで対応を確認
コントロールツリー

 aspx内のすべての要素がコントロール化
 されPageクラスを根とするツリー構造内
 で管理される
  文字列 → LiteralControl
  ツリーの階層構造 = タグの階層構造
コントロールの種類
   HTMLコントロール
       HTMLツールボックスからドラッグ アンド ドロップ
       コントロールツリーではLiteralControlとなり、サーバ上のプログラムで
        制御できない
       記述した内容そのままがHTMLとなる

   HTMLサーバコントロール
       HTMLコントロールにrunat=“server”を追加
       サーバ上のプログラムで制御可能
       記述した内容がほぼそのままHTMLとなる

   Webコントロール
       標準ツールボックスからドラッグ アンド ドロップ
       サーバ上のプログラムで制御可能
       プロパティの状態によって生成されるHTMLが変わる
         TextBoxのTextMode(SingleLine、Password、MultiLine)
       ViewStateを利用し、ポストバック前後の自分の状態を保持する
       ViewStateとポストデータを比較し、イベントを発生させる
       カレンダー、データグリッドのように内部的にコントロールを持つ複合
        コントロールも存在する
ページイベント
    初期表示時                        ポストバック時
     Begin PreInit                 Begin PreInit
     End PreInit                   End PreInit
     Begin Init                    Begin Init
     End Init                      End Init
     Begin InitComplete            Begin InitComplete
     End InitComplete              End InitComplete
                                   Begin LoadState
                                   End LoadState
                                   Begin ProcessPostData
                                   End ProcessPostData
     Begin PreLoad                 Begin PreLoad
     End PreLoad                   End PreLoad
     Begin Load                    Begin Load
     End Load                      End Load
                                   Begin ProcessPostData Second Try
                                   End ProcessPostData Second Try
                                   Begin Raise ChangedEvents
                                   End Raise ChangedEvents
                                   Begin Raise PostBackEvent
                                   End Raise PostBackEvent
     Begin LoadComplete            Begin LoadComplete
     End LoadComplete              End LoadComplete
     Begin PreRender               Begin PreRender
     End PreRender                 End PreRender
     Begin PreRenderComplete       Begin PreRenderComplete
     End PreRenderComplete         End PreRenderComplete
     Begin SaveState               Begin SaveState
     End SaveState                 End SaveState
     Begin SaveStateComplete       Begin SaveStateComplete
     End SaveStateComplete         End SaveStateComplete
     Begin Render                  Begin Render
     End Render                    End Render
ページイベントによる処理
 初期化
 コントロールツリーの作成
 リクエスト読み込み
    ポストバック時のみ
    ビューステート、ポストデータを各コントロールに割り当て
 コントロールイベント
    ポストバック時のみ
    ビューステートとポストデータの違いからコントロールイベント
     が発生
 ポストバックイベント
    ポストバック時のみ
    ポストバックの原因となったイベントが発生
 レンダリング
    各コントロールがプロパティの状態を元に自分自身をHTML化し、
     レスポンスに追加
ASP.NETでのプログラミング作業とは

 Webアプリでのサーバの作業はHTML(文字列)を
 組み立てること

 ASP.NETでは各種コントロールを導入することで
 直接文字列を組み立てることはなくなっている
  HTMLをどう生成するかは個々のコントロールの責任
  コントロールはプロパティの値を元にそれに合わせた
   HTMLを生成する
  Renderのタイミングまでにコントロールのプロパティを
   適切に操作する作業がASP.NETでのプログラミング作業
  ページイベント、コントロールイベントを理解し、プロ
   パティの操作に適切なタイミングを選択する必要がある
リクエストが処理されるしくみのおさらい
ページ遷移
 ASP.NETの基本はPostBackであるためformタ
  グによるページ遷移は難しい
  HTMLコントロールとしてのformタグは利用可能
     だが、Webコントロールと組み合わせると使い方
     が難しい

 通常利用されるページ遷移の方法
    リンク
    リダイレクト
    トランスファー
    別ページポストバック
リンク

 ユーザのクリックにより指定先のURLを表示
  リンク先が異なるWebアプリケーションでも遷移
  が可能
   ASP.NETのサイトに限らない
  GETメソッドを利用した遷移
    クエリ文字列を利用したデータの引渡しは可能
    URLの長さに制限あり
リダイレクト
 サーバの処理中にリダイレクトを記述する
  Response.Redirect(”遷移先URL”);
  実際にはブラウザに対して指定したURLにGET
  メソッドを発行するよう指示するレスポンスが
  送られる
   ブラウザとのやりとりが発生する
  リンク先やリンク元が異なるWebアプリケーション
  でも遷移が可能
   ASP.NETのサイトに限らない
  GETメソッドを利用した遷移
    クエリ文字列を利用したデータの引渡しは可能
    URLの長さには制限あり
トランスファー
 サーバの処理中にトランスファーを記述する
  Server.Transfer(“遷移先URL”);
  実際には指定したページのインスタンスが生成され、
     そのページの処理が開始される
    トランスファーの遷移先は同一のWebアプリケーション
     内に限定される
    1つのリクエストの処理の中で実行されるページのイ
     ンスタンスが置き換わるため、ブラウザのURLは遷移前
     のまま変わらない
    1つのリクエストの処理の中で実行されるページが置き
     換わるため、ページの認証、承認といったアプリケー
     ションイベントは遷移前のページに対して行われ、遷
     移後のページに対しては実行されない
    一般的には使わない
トランスファーのイメージ
別ページポストバック
 ボタン、リンクボタン、イメージボタンの
  PostBackUrlオプションに遷移先を設定する
 ボタンクリックにより指定した遷移先が呼び
  出される
  POSTメソッドを利用した呼び出しが行われる
  JavaScriptを利用してformのポスト先を書き換えて
   いる
  遷移した先が同一Webアプリケーションであれば
   PreviousPageTypeディレクティブを設定して遷移元
   で公開しているプロパティの値を取得可能
ステート保持
 Webアプリケーションの基本はステートレス
  ページの遷移時だけでなく、ポストバック時も以
  前の状態を保持できない
 アプリケーションとして一連の処理を実行す
  るためには様々な長さでステートを保持でき
  る必要がある
  ポストバック間
  ページ遷移間
  ユーザが処理を行っている間
  アプリケーションが起動している間
ポストバック間でのステート保持

 ViewState
   WebコントロールはデフォルトでViewStateを利用
   する
     ページ単位、コントロール単位で制御可能
   プログラムから独自に利用することも可能
     格納できるのはシリアライズ可能なオブジェクト
     取得時に型を設定する必要がある
   データ量に注意する必要がある
     DataGrid等とSqlDataSourceを組み合わせてページン
      グ/ソーティングを行っている場合、表示される
      データは該当するページ内のものだが、ViewStateに
      は抽出されたすべてのデータが含まれる
     通信量の増大が体感実行速度に影響
ページ遷移間でのステート保持

 ページ遷移の方法によって利用できるものが異
  なる
     リンク:クエリ文字列
     リダイレクト:クエリ文字列
     トランスファー:クエリ文字列、HttpContext.Items
     ページ間ポストバック:POSTデータ、ViewState

 HttpContext.Items
   IDictionary型-keyを設定してobjectを格納できる
   HttpContextはリクエストの処理の間を通じて存在して
      おり、トランスファー実行時のページ間でのデータの
      受け渡しが可能
ユーザが処理を行っている間の
ステート保持
   クッキー
       ブラウザ側で値を保持
       リクエスト時に毎回ブラウザからサーバに送られる
       有効期間を設定可能
         ブラウザを閉じても存続させることが可能
       格納できる長さに制限あり
       ブラウザの設定によっては利用不可

   セッションオブジェクト
       デフォルトではセッションの判定(セッションキーを保持している)にクッ
        キーを利用
       デフォルトではサーバ上のメモリにデータを格納する
       格納できるデータはシリアライズ可能なもの
       セッションキーを保持しているブラウザから一定期間アクセスがない場合に
        データは破棄される
         httpはブラウザからのリクエストではじめて処理が開始されるので、サーバ側
          ではリクエストを待っているしかない
         Web.configで一定期間の設定を変更可能
セッション利用の設定変更
   クッキーレス
        <system.web>
          <sessionState cookieless="UseUri"/>
        </system.web>
       携帯等クッキーを利用できないブラウザを想定する場合に設定
       セッションキーがURLに埋め込まれる


   データの保存場所
        <system.web>
          <sessionState mode=“InProc"/>
        </system.web>
       InProc
           サーバ上のメモリ内に格納される
           Session_OnEndが発生するのはこの状態のみ
       StateServer
           複数台のサーバがある場合、その中の一台のメモリ上に格納される
           セッションを格納するサーバでStateServerのサービスを起動する必要がある
       SQLServer
           データベース上に格納される
           aspnet_regsql.exeツールを利用してセッション状態を保持するデータベースをインストールする
           セッションデータはアクセスがない状態で一定時間が経過したタイミングで削除される
アプリケーションが起動している間の
ステート保持

  アプリケーションオブジェクト
   格納できるデータはシリアライズ可能なもの
   書き込み時には競合に注意
     Application.Lock()、Application.UnLock()を利用する
     Lock、UnLockはファイル書き込み等の排他制御に利用す
      ることも可能
     処理速度を低下させる場合もあるので利用には注意
   Webアプリケーションは一定時間リクエストをまった
   く受け取らなかった場合に終了することに注意
     httpはブラウザからのリクエストではじめて処理が開始さ
      れるので、サーバ側ではリクエストを待っているしかな
      い
     Web.configで一定期間の設定を変更可能
     次にリクエストを受け取ったときに起動が行われる
まとめ
 ASP.NETは柔軟な拡張性を持ったフレーム
  ワーク
  HttpContext、HttpModule、HttpHandlerが理解でき
   れば独自の拡張を施すことも可能
  Dynamic Data、ASP.NET MVC等がよい例


 Webアプリケーションの本質は文字列操作で
 ある
  ASP.NETはコントロール(クラス)を利用し、イ
   ベントドリブンでの開発を可能にしている
  ASP.NETの仕組みが理解できていれば、生の文字
   列操作レベルの細かい制御を組み込むことも可能

More Related Content

What's hot

Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編なべ
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugToshiaki Maki
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Bootなべ
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSKazuhiro Kotsutsumi
 
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装miso- soup3
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすKUNITO Atsunori
 
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版junichi anno
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょKohki Nakashima
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村Koichi Uchimura
 
cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法賢 秋穂
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説Cherry Pie Web
 

What's hot (20)

HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
20090328
2009032820090328
20090328
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Boot
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
 
Spring と TDD
Spring と TDDSpring と TDD
Spring と TDD
 
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
 
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Spring AMQP × RabbitMQ
Spring AMQP × RabbitMQSpring AMQP × RabbitMQ
Spring AMQP × RabbitMQ
 
cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
 

Similar to 20081003

Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編なべ
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレットTakashi Makino
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版junichi anno
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門Yuji Nojima
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介Shotaro Suzuki
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイtoyoshi
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
Spring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションSpring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションToshiaki Maki
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 miso- soup3
 

Similar to 20081003 (20)

Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレット
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
20090212
2009021220090212
20090212
 
構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版
 
20061125
2006112520061125
20061125
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
G0042 h
G0042 hG0042 h
G0042 h
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイ
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
Spring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションSpring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーション
 
20111203
2011120320111203
20111203
 
Version管理 1
Version管理 1Version管理 1
Version管理 1
 
Apache Tapestry
Apache TapestryApache Tapestry
Apache Tapestry
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 

More from 小野 修司 (20)

20140322
2014032220140322
20140322
 
20121215
2012121520121215
20121215
 
20120616
2012061620120616
20120616
 
20120609
2012060920120609
20120609
 
20120425
2012042520120425
20120425
 
20120128
2012012820120128
20120128
 
20110607
2011060720110607
20110607
 
20100313
2010031320100313
20100313
 
20100224
2010022420100224
20100224
 
20100218 lt
20100218 lt20100218 lt
20100218 lt
 
20100218
2010021820100218
20100218
 
20091207
2009120720091207
20091207
 
20090711
2009071120090711
20090711
 
20090606
2009060620090606
20090606
 
20090418
2009041820090418
20090418
 
20080630
2008063020080630
20080630
 
20080627 2
20080627 220080627 2
20080627 2
 
20080627 1
20080627 120080627 1
20080627 1
 
20080213
2008021320080213
20080213
 
20080201
2008020120080201
20080201
 

20081003

  • 2. Webアプリケーションの特徴  「ブラウザ」と「サーバ」間でのやりとりを繰り返すことで 一連の処理を行う  ブラウザ  サーバにリクエストをあげる(リクエストの実態は文字列)  サーバから受け取ったHTML(JavaScriptを含む)を解釈してユー ザインタフェースを表示する  サーバ  ブラウザから受け取ったリクエストに応じた処理を行い、HTMLを 組み立ててブラウザに返す  HTMLというソースコードを生成しているといえる  文字列(リクエスト)を受け取って文字列(HTML)を返す サーバの処理の本質は文字列操作といえる  複数のブラウザからのリクエストを同時に処理する  サーバへのリクエストがあって、はじめてレスポンスが返る  サーバから一方的にデータを送りつけることはできない  サーバはステート(前回のリクエスト状態等)を持たない  ブラウザから次のリクエストが送られることを予期しない
  • 3. ASP.NETの特徴  PostBackが基本  formタグのaction先が自分自身  ASP等ではaction先を別のページにし、データ入力ペー ジとデータ処理ページを分けるのが一般的だった  イベントドリブン型の開発のための仕掛け  コンパイルによる処理速度向上  aspxファイルはソースコード化されコンパイル  最初の実行開始時にdllが作成される  ソースの修正等をしなければdllはそのまま利用される  実行時にメソッド単位でJITコンパイルされるのは Windowsアプリ等と同じ
  • 4. ASP.NETの実行環境  IIS6まで  IISのインストール後、.NET Frameworkをイン ストールする  逆になってしまった場合はaspnet_regiis.exeを 利用して修復可能  .NET Framework 2.0 以降をインストールする と、IISの管理ツールに.NET Frameworkのバー ジョン管理が追加される  Ver 1.1までの場合はaspnet_regiisにて管理  Ver 3.0、3.5での実行はVer2.0を指定する
  • 5. IIS6上のWebアプリケーション  フォルダをアプリケーションとして「設定」する  仮想ディレクトリでも実フォルダでも可能  標準で仮想ディレクトリを追加すると、アプリケーショ ンとして設定済みとなる  仮想ディレクトリはアプリケーションとして設定せず、 単に実ディレクトリ構成とは異なるフォルダ階層を実現 するためにも利用可能  アプリケーションの設定とは  Windowsアプリケーションの1つのexeファイルと個々の アプリケーション設定が対応するイメージ  アプリケーションの境界  Frameworkのバージョン  セキュリティ/アクセス制御
  • 6. IIS6の認証とASP.NETの認証  IIS側でも認証設定が可能  匿名  基本認証  統合 Windows 認証  ASP.NETにも認証機能がある  Form認証  DBベース  Active Directoryベース  Form認証を簡単に利用できるコントロール群を提供  Windwos認証  ASP.NETの認証機能を利用するほうが細かい設定が容易  IIS側は匿名を許可しておく
  • 7. 開発サーバとIISの違い  VS2005以降には開発サーバが含まれており、その上で 動作検証が可能  開発サーバとIISでは動作が異なる  ファイルマッピング  開発サーバ - すべてのファイルがASP.NETによって処理され る  IIS - アプリケーションの構成でASP.NETに関連づけられた拡 張子のファイルのみASP.NETによって処理される  開発サーバではweb.configによるアクセス制御が画像ファイ ル等にも影響する  実行ユーザ  開発サーバ - ログイン中のユーザの権限で実行される  IIS - ASPNETユーザまたはNetwork Serviceユーザの権限で実 行される  ファイルへの書き込み等を行っている場合に注意
  • 8. IIS7とASP.NET  ASP.NETを有効にすることで実行可能  IIS7はASP.NETをベースに進化したものと 考えてよい  ファイルはすべてASP.NETによって処理される  実行ユーザはNT AUTHORITYNETWORK SERVICE  ASP.NETの設定とIIS7の設定ツールが一体化し ている  一部web.configの書き方が異なるので注意
  • 9. ASP.NETの設定  マシン全体の設定  C:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG  machine.config  web.config  デフォルトの設定についてはconfigに記述されていないものも  初期起動時の速度を早くするため、ハードコーディングされている  ドキュメントにて確認できるものもある  アプリケーション単位の設定  アプリケーションとして設定されているフォルダに存在する web.config  設定の種類によってはこの場所に記述しないと有効にならないもの がある  マシン全体の設定を引き継ぐ  下層のフォルダ単位の設定  各フォルダに存在するweb.config  アプリケーション単位のweb.config内に含めることも可能  上位フォルダの設定を引き継ぐ
  • 10. ASP.NET 2.0と3.5  web.configの違いでしかない  VS2008で対象となるFrameworkを変更すると、 web.configが書き換わる  .NET Framework 2.0、3.0、3.5はすべて2.0のCLRを 利用する  ASP.NET では、3.0は2.0から何も変化がなかったため 通常利用しない  Ver 3.5では言語のコンパイラが新しくなり、いく かのdllが追加された  web.configに追加されたdllの参照と利用するコンパイ ラの設定が追加される
  • 12. 概要 1. ブラウザからリクエストがあがる 2. httpコンテキストが作られる 3. アプリケーションイベントが発生する  アプリケーションイベントの発生順序は固定  ページの処理が行われる  ページイベントが発生する  ページイベントの発生順序は固定  ポストバック時はコントロールイベント、ポスト バックイベントが発生する 4. レスポンスが返される  ページ、httpコンテキストのインスタンスは破棄
  • 13. HttpContext  リクエストがあがってきてレスポンスを返すまで生存している  グローバル変数のような意味を持つインスタンスとなっている  以下のようなデータを格納  リクエストの内容  レスポンスの内容  アプリケーションオブジェクト  セッションオブジェクト  キャッシュデータ  ユーザ情報  httpコンテキストの内容を書き換えることでASP.NETの動作を変え ることが可能  例:URLリライト  Context.Rewritepath  現在のコンテキストはHttpContext.Currentで取得  Pageの中ではContextプロパティで取得可能  独自クラスの中でHttpContext.Currentを利用
  • 14. アプリケーションイベント  アプリケーションイベントの発生順序は固定  HttpApplicationクラスのドキュメントで確認 BeginRequest リクエストの処理開始時に発生 AuthenticateRequest 認証の開始時に発生 PostAuthenticateRequest 認証の終了時に発生 AuthorizeRequest 承認の開始時に発生 PostAuthorizeRequest 承認の終了時に発生 ResolveRequestCache キャッシュの処理の開始時に発生 PostResolveRequestCache キャッシュの処理の終了時に発生 PostMapRequestHandler ハンドラの生成後に発生 AcquireRequestState セッション等の状態の取得時に発生 PostAcquireRequestState セッション等の状態の取得後に発生 PreRequestHandlerExecute ハンドラの実行前に発生 PostRequestHandlerExecute ハンドラの実行後に発生 ReleaseRequestState セッション等の状態の開放時に発生 PostReleaseRequestState セッション等の状態の開放後に発生 UpdateRequestCache キャッシュの状態更新時に発生 PostUpdateRequestCache キャッシュの状態更新後に発生 EndRequest リクエストの処理終了時に発生  Global.asax内で個々のイベントにたいする処理を記述可能
  • 15. HttpModule  アプリケーションイベントをトリガにし て実行する処理をまとめて登録するしく み  IHttpModuleインタフェースを継承したク ラスで最低限InitメソッドとDisposeメソッ ドを実装する  Initメソッド-アプリケーションイベントにプ ライベートメソッドを登録する  Disposeメソッド-通常は空でよい  作成したクラスをweb.configで登録する
  • 16. 実装済のHttpModule  マシンレベルのweb.configで登録 System.Web.Caching.OutputCacheModule System.Web.SessionState.SessionStateModule System.Web.Security.WindowsAuthenticationModule System.Web.Security.FormsAuthenticationModule System.Web.Security.PassportAuthenticationModule System.Web.Security.RoleManagerModule System.Web.Security.UrlAuthorizationModule System.Web.Security.FileAuthorizationModule System.Web.Security.AnonymousIdentificationModule System.Web.Profile.ProfileModule System.Web.Mobile.ErrorHandlerModule System.ServiceModel.Activation.HttpModule  ASP.NETの基本的な動作はHttpModuleで実装されている  IIS7のモジュールとしてHttpModuleを利用可
  • 18. HttpHandlerの設定  マシンレベルのweb.config <httpHandlers> … <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True"/> <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True"/> <add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="False"/> … <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/> … </httpHandlers>  拡張子をどのクラスが処理するかを設定  IISからASP.NETに制御が渡されていることが前提
  • 19. aspxファイル  System.Web.UI.Pageクラスを継承  IHttpHandlerインターフェイスを継承している  内部に多くのコントロールを持つ  通常ツールボックスからのドラッグ アンド ドロップで追加  ページライフサイクル  ページのインスタンスはリクエスト毎に生成され消滅する  初期表示時のインスタンスとポストバック時のインスタンス に関連は存在しない(ステートレス)  ページが生成して消滅するまでにページイベントが決まっ た順番で発生する
  • 20. 動作サンプル  Default.aspx  Trace=“true”をPageディレクティブに記述  テキストボックス、ボタン、ラベルを追加  Default.aspx.cs protected void Button1_Click(object sender, EventArgs e) { Trace.Warn("ボタンクリック時の処理"); Label1.Text = TextBox1.Text; }
  • 21. コントロールのツリー  _Page  LiteralControl - DOCTYPE、HTMLタグ  HtmlHead - headタグ  HtmlTitle - titleタグ  LiteralControl - bodyタグ  HtmlForm - formタグ  LiteralControl - divタグ  TextBox - テキストボックス  LiteralControl - 改行コード(CRLF)  Button - ボタン  LiteralControl - 改行コード + brタグ  Label - ラベル  LiteralControl - 改行コード + div終了タグ  LiteralContorl - body、html終了タグ  ソースコードで対応を確認
  • 22. コントロールツリー  aspx内のすべての要素がコントロール化 されPageクラスを根とするツリー構造内 で管理される  文字列 → LiteralControl  ツリーの階層構造 = タグの階層構造
  • 23. コントロールの種類  HTMLコントロール  HTMLツールボックスからドラッグ アンド ドロップ  コントロールツリーではLiteralControlとなり、サーバ上のプログラムで 制御できない  記述した内容そのままがHTMLとなる  HTMLサーバコントロール  HTMLコントロールにrunat=“server”を追加  サーバ上のプログラムで制御可能  記述した内容がほぼそのままHTMLとなる  Webコントロール  標準ツールボックスからドラッグ アンド ドロップ  サーバ上のプログラムで制御可能  プロパティの状態によって生成されるHTMLが変わる  TextBoxのTextMode(SingleLine、Password、MultiLine)  ViewStateを利用し、ポストバック前後の自分の状態を保持する  ViewStateとポストデータを比較し、イベントを発生させる  カレンダー、データグリッドのように内部的にコントロールを持つ複合 コントロールも存在する
  • 24. ページイベント  初期表示時  ポストバック時 Begin PreInit Begin PreInit End PreInit End PreInit Begin Init Begin Init End Init End Init Begin InitComplete Begin InitComplete End InitComplete End InitComplete Begin LoadState End LoadState Begin ProcessPostData End ProcessPostData Begin PreLoad Begin PreLoad End PreLoad End PreLoad Begin Load Begin Load End Load End Load Begin ProcessPostData Second Try End ProcessPostData Second Try Begin Raise ChangedEvents End Raise ChangedEvents Begin Raise PostBackEvent End Raise PostBackEvent Begin LoadComplete Begin LoadComplete End LoadComplete End LoadComplete Begin PreRender Begin PreRender End PreRender End PreRender Begin PreRenderComplete Begin PreRenderComplete End PreRenderComplete End PreRenderComplete Begin SaveState Begin SaveState End SaveState End SaveState Begin SaveStateComplete Begin SaveStateComplete End SaveStateComplete End SaveStateComplete Begin Render Begin Render End Render End Render
  • 25. ページイベントによる処理  初期化  コントロールツリーの作成  リクエスト読み込み  ポストバック時のみ  ビューステート、ポストデータを各コントロールに割り当て  コントロールイベント  ポストバック時のみ  ビューステートとポストデータの違いからコントロールイベント が発生  ポストバックイベント  ポストバック時のみ  ポストバックの原因となったイベントが発生  レンダリング  各コントロールがプロパティの状態を元に自分自身をHTML化し、 レスポンスに追加
  • 26. ASP.NETでのプログラミング作業とは  Webアプリでのサーバの作業はHTML(文字列)を 組み立てること  ASP.NETでは各種コントロールを導入することで 直接文字列を組み立てることはなくなっている  HTMLをどう生成するかは個々のコントロールの責任  コントロールはプロパティの値を元にそれに合わせた HTMLを生成する  Renderのタイミングまでにコントロールのプロパティを 適切に操作する作業がASP.NETでのプログラミング作業  ページイベント、コントロールイベントを理解し、プロ パティの操作に適切なタイミングを選択する必要がある
  • 28. ページ遷移  ASP.NETの基本はPostBackであるためformタ グによるページ遷移は難しい  HTMLコントロールとしてのformタグは利用可能 だが、Webコントロールと組み合わせると使い方 が難しい  通常利用されるページ遷移の方法  リンク  リダイレクト  トランスファー  別ページポストバック
  • 29. リンク  ユーザのクリックにより指定先のURLを表示  リンク先が異なるWebアプリケーションでも遷移 が可能  ASP.NETのサイトに限らない  GETメソッドを利用した遷移  クエリ文字列を利用したデータの引渡しは可能  URLの長さに制限あり
  • 30. リダイレクト  サーバの処理中にリダイレクトを記述する  Response.Redirect(”遷移先URL”);  実際にはブラウザに対して指定したURLにGET メソッドを発行するよう指示するレスポンスが 送られる  ブラウザとのやりとりが発生する  リンク先やリンク元が異なるWebアプリケーション でも遷移が可能  ASP.NETのサイトに限らない  GETメソッドを利用した遷移  クエリ文字列を利用したデータの引渡しは可能  URLの長さには制限あり
  • 31. トランスファー  サーバの処理中にトランスファーを記述する  Server.Transfer(“遷移先URL”);  実際には指定したページのインスタンスが生成され、 そのページの処理が開始される  トランスファーの遷移先は同一のWebアプリケーション 内に限定される  1つのリクエストの処理の中で実行されるページのイ ンスタンスが置き換わるため、ブラウザのURLは遷移前 のまま変わらない  1つのリクエストの処理の中で実行されるページが置き 換わるため、ページの認証、承認といったアプリケー ションイベントは遷移前のページに対して行われ、遷 移後のページに対しては実行されない  一般的には使わない
  • 33. 別ページポストバック  ボタン、リンクボタン、イメージボタンの PostBackUrlオプションに遷移先を設定する  ボタンクリックにより指定した遷移先が呼び 出される  POSTメソッドを利用した呼び出しが行われる  JavaScriptを利用してformのポスト先を書き換えて いる  遷移した先が同一Webアプリケーションであれば PreviousPageTypeディレクティブを設定して遷移元 で公開しているプロパティの値を取得可能
  • 34. ステート保持  Webアプリケーションの基本はステートレス  ページの遷移時だけでなく、ポストバック時も以 前の状態を保持できない  アプリケーションとして一連の処理を実行す るためには様々な長さでステートを保持でき る必要がある  ポストバック間  ページ遷移間  ユーザが処理を行っている間  アプリケーションが起動している間
  • 35. ポストバック間でのステート保持  ViewState  WebコントロールはデフォルトでViewStateを利用 する  ページ単位、コントロール単位で制御可能  プログラムから独自に利用することも可能  格納できるのはシリアライズ可能なオブジェクト  取得時に型を設定する必要がある  データ量に注意する必要がある  DataGrid等とSqlDataSourceを組み合わせてページン グ/ソーティングを行っている場合、表示される データは該当するページ内のものだが、ViewStateに は抽出されたすべてのデータが含まれる  通信量の増大が体感実行速度に影響
  • 36. ページ遷移間でのステート保持  ページ遷移の方法によって利用できるものが異 なる  リンク:クエリ文字列  リダイレクト:クエリ文字列  トランスファー:クエリ文字列、HttpContext.Items  ページ間ポストバック:POSTデータ、ViewState  HttpContext.Items  IDictionary型-keyを設定してobjectを格納できる  HttpContextはリクエストの処理の間を通じて存在して おり、トランスファー実行時のページ間でのデータの 受け渡しが可能
  • 37. ユーザが処理を行っている間の ステート保持  クッキー  ブラウザ側で値を保持  リクエスト時に毎回ブラウザからサーバに送られる  有効期間を設定可能  ブラウザを閉じても存続させることが可能  格納できる長さに制限あり  ブラウザの設定によっては利用不可  セッションオブジェクト  デフォルトではセッションの判定(セッションキーを保持している)にクッ キーを利用  デフォルトではサーバ上のメモリにデータを格納する  格納できるデータはシリアライズ可能なもの  セッションキーを保持しているブラウザから一定期間アクセスがない場合に データは破棄される  httpはブラウザからのリクエストではじめて処理が開始されるので、サーバ側 ではリクエストを待っているしかない  Web.configで一定期間の設定を変更可能
  • 38. セッション利用の設定変更  クッキーレス <system.web> <sessionState cookieless="UseUri"/> </system.web>  携帯等クッキーを利用できないブラウザを想定する場合に設定  セッションキーがURLに埋め込まれる  データの保存場所 <system.web> <sessionState mode=“InProc"/> </system.web>  InProc  サーバ上のメモリ内に格納される  Session_OnEndが発生するのはこの状態のみ  StateServer  複数台のサーバがある場合、その中の一台のメモリ上に格納される  セッションを格納するサーバでStateServerのサービスを起動する必要がある  SQLServer  データベース上に格納される  aspnet_regsql.exeツールを利用してセッション状態を保持するデータベースをインストールする  セッションデータはアクセスがない状態で一定時間が経過したタイミングで削除される
  • 39. アプリケーションが起動している間の ステート保持  アプリケーションオブジェクト  格納できるデータはシリアライズ可能なもの  書き込み時には競合に注意  Application.Lock()、Application.UnLock()を利用する  Lock、UnLockはファイル書き込み等の排他制御に利用す ることも可能  処理速度を低下させる場合もあるので利用には注意  Webアプリケーションは一定時間リクエストをまった く受け取らなかった場合に終了することに注意  httpはブラウザからのリクエストではじめて処理が開始さ れるので、サーバ側ではリクエストを待っているしかな い  Web.configで一定期間の設定を変更可能  次にリクエストを受け取ったときに起動が行われる
  • 40. まとめ  ASP.NETは柔軟な拡張性を持ったフレーム ワーク  HttpContext、HttpModule、HttpHandlerが理解でき れば独自の拡張を施すことも可能  Dynamic Data、ASP.NET MVC等がよい例  Webアプリケーションの本質は文字列操作で ある  ASP.NETはコントロール(クラス)を利用し、イ ベントドリブンでの開発を可能にしている  ASP.NETの仕組みが理解できていれば、生の文字 列操作レベルの細かい制御を組み込むことも可能