(57)【特許請求の範囲】
【請求項１】
クライアントに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応するサーバ側制御オブジェクトの状態管理方法であって、
クライアント側ユーザインタフェース要素を処理するためのサーバ側制御オブジェクトを制御オブジェクト階層であって、前記ウェブページに対応する前記制御オブジェクト階層に作成する工程と、
前記制御オブジェクト階層における少なくとも１つの前記サーバ側制御オブジェクトの状態値を示す状態情報を含む搬送可能状態構造をクライアントから受信する工程と、
前記搬送可能状態構造から前記状態情報を抽出する工程と、
前記状態情報からの状態値がサーバ側制御オブジェクトに関連している場合、その状態値をサーバ側制御オブジェクトのプロパティにロードし、前記制御オブジェクト階層の少なくとも１つの前記サーバ側制御オブジェクトからウェブページの少なくとも一部を定義するオーサリング言語コードを生成し、および前記生成後に前記制御オブジェクト階層を廃棄する工程とを含むサーバ側制御オブジェクトの状態管理方法。
【請求項２】
前記抽出する工程において、
前記搬送可能状態構造から前記少なくとも１つの前記サーバ側制御オブジェクトのプロパティに関連する状態値を抽出する工程と、
前記搬送可能状態構造内の階層情報に基づき前記制御オブジェクト階層内の前記サーバ側制御オブジェクトの階層位置を認識する工程とを含む請求項１に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項３】
前記ロードする工程において、
識別処理によって識別された階層位置に基づき前記制御オブジェクト階層内の前記サーバ側制御オブジェクトを指示する工程と、
前記制御オブジェクト階層内の前記サーバ側制御オブジェクトの階層位置をトラバースする工程と、
前記サーバ側制御オブジェクトのプロパティに状態値を格納する工程とを含む請求項２に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項４】
前記搬送可能状態構造は、受信インテグリティコードをさらに含み、さらに、
前記搬送可能状態構造から前記受信インテグリティコードを読み出す工程と、
前記搬送可能状態構造に含まれる状態情報から計算インテグリティコードを計算する工程と、
前記受信インテグリティコードと前記計算インテグリティコードを比較し、前記搬送可能状態構造が有効かどうかを判断する工程とを含む請求項１乃至３のいずれかに記載のサーバ側制御オブジェクトの状態管理方法。
【請求項５】
前記受信する工程の後に、前記サーバ側制御オブジェクトのプロパティが初期状態となるように初期化する工程と、
前記サーバ側制御オブジェクトのプロパティの状態が前記初期状態から変化していないことを示す指標を設定する工程と、
プロパティに前記搬送可能状態構造からの状態値がロードされた場合、前記サーバ側制御オブジェクトのプロパティの状態が前記初期状態から変化したことを示すように前記指標を変更する工程とを含む請求項１に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項６】
前記プロパティがサーバ側データ格納フィールドに結合されたデータである場合、前記サーバ側制御オブジェクトのプロパティが、初期状態から変化していないことを示す指標を設定する工程をさらに含む請求項５に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項７】
前記制御オブジェクト階層内における前記各サーバ側制御オブジェクトをトラバースする工程と、
前記指標が、前記サーバ側制御オブジェクトの状態情報が初期状態から変化したことを表している場合、クライアントへ送り返すための前記搬送可能状態構造に前記サーバ側制御オブジェクトの状態情報を格納する工程とをさらに含む請求項５に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項８】
ウェブページを定義するオーサリング言語データを有するレスポンスによって、クライアントに前記搬送可能状態構造を送信する工程をさらに含む請求項７に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項９】
前記状態情報を格納する工程に応答して、前記搬送可能状態構造に含まれる状態情報からインテグリティコードを計算する工程と、
前記搬送可能状態構造に前記インテグリティコードを格納する工程と、
ウェブページを定義するオーサリング言語データを有するレスポンスによって、クライアントに前記搬送可能状態構造を送信する工程とをさらに含む請求項７に記載のサーバ側制御オブジェクトの状態管理方法。
【請求項１０】
オーサリング言語コードによって定義され、ウェブサーバに接続されたクライアントコンピュータシステム上で実行処理するブラウザによって解釈可能なウェブページであって、
前記オーサリング言語コードは、請求項１に記載のサーバ側制御オブジェクトの状態管理方法によってウェブサーバで生成され、
前記オーサリング言語コードは、前記制御オブジェクト階層の少なくとも１つの前記サーバ側制御オブジェクトの状態情報を格納する前記搬送可能状態構造を含むウェブページ。
【請求項１１】
クライアントに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応するサーバ側制御オブジェクトの状態を管理するコンピュータプロセスを実行処理するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記コンピュータプロセスは、
制御オブジェクト階層であって、前記ウェブページに対応する前記制御オブジェクト階層に前記サーバ側制御オブジェクトを作成して前記クライアント側ユーザインタフェース要素を処理する工程と、
前記制御オブジェクト階層の少なくとも１つの前記サーバ側制御オブジェクトの状態値を示す状態情報を含む搬送可能状態構造をクライアントから受信する工程と、
前記搬送可能状態構造から状態情報を抽出する工程と、
前記状態情報からの状態値が前記サーバ側制御オブジェクトと関連している場合、その状態値を前記サーバ側制御オブジェクトのプロパティにロードし、前記制御オブジェクト階層の少なくとも１つの前記サーバ側制御オブジェクトからウェブページの少なくとも一部を定義するオーサリング言語コードを生成し、および前記生成後に前記制御オブジェクト階層を廃棄する工程とを含むコンピュータ読み取り可能な記録媒体。
【請求項１２】
制御オブジェクト階層に作成され、クライアントに表示されるウェブページに組み込まれる複数のクライアント側ユーザインタフェース要素に対応する複数のサーバ側制御オブジェクトの状態を管理するコンピュータプロセスをコンピュータシステムにおいて実行するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記コンピュータプロセスは、
前記制御オブジェクト階層の１つ以上の前記サーバ側制御オブジェクトに関連する状態情報を含む搬送可能状態構造をクライアントから受信する工程と、
前記状態情報を非直列化して状態値、関連プロパティデータタイプおよび前記サーバ側制御オブジェクトのプロパティの階層情報を抽出する工程と、
前記階層情報に基づき前記制御オブジェクト階層内の前記サーバ側制御オブジェクトを探し当てる工程と、
前記状態値を前記サーバ側制御オブジェクトのプロパティにロードし、前記制御オブジェクト階層の少なくとも１つの前記サーバ側制御オブジェクトからウェブページの少なくとも一部を定義するオーサリング言語コードを生成し、および前記生成後に前記制御オブジェクト階層を廃棄する工程とを含むコンピュータ読み取り可能な記録媒体。
【請求項１３】
前記コンピュータプロセスは、前記ロードする工程以前に前記関連プロパティデータタイプを有するように状態値を変換する工程をさらに含む請求項１２に記載のコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記コンピュータプロセスは、前記受信する工程の後に、前記サーバ側制御オブジェクトのプロパティを初期状態となるように初期化する工程と、
前記サーバ側制御オブジェクトのプロパティが前記初期状態から変化していないことを示す指標を設定する工程と、
前記プロパティに前記搬送可能状態構造からの状態値がロードされた場合、前記サーバ側制御オブジェクトのプロパティの状態が初期状態から変化したことを示すように前記指標を変更する工程とを含む請求項１２に記載のコンピュータ読み取り可能な記録媒体。
【請求項１５】
前記ロードする工程が、前記制御オブジェクト階層の１つ以上の前記サーバ側制御オブジェクトをトラバースする工程を含み、
前記各サーバ側制御オブジェクトに対し、前記ロードする工程は、
前記サーバ側制御オブジェクトの状態が初期状態から変化したことを示す指標と関連する前記サーバ側制御オブジェクトからプロパティ値を抽出する工程と、
前記プロパティ値を、前記制御オブジェクト階層内の他の前記サーバ側制御オブジェクトからのプロパティ値を有する、クライアントへ送り返すための前記搬送可能状態構造に直列化する工程とをさらに含む請求項１２乃至１４のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記ロードする工程が、前記プロパティ値と関連する前記サーバ側制御オブジェクトからプロパティデータタイプを抽出する工程と、
前記プロパティデータタイプを、前記サーバ側制御オブジェクトのプロパティ値を有する、クライアントへ送り返すための前記搬送可能状態構造に直列化する工程とをさらに含む請求項１４に記載のコンピュータ読み取り可能な記録媒体。
【請求項１７】
前記ロードする工程が、クライアントへ送り返すための前記搬送可能状態構造に、前記制御オブジェクト階層の前記サーバ側制御オブジェクトに関する階層情報を格納する工程をさらに含む請求項１４に記載のコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記コンピュータプロセスが、ウェブページを定義するオーサリング言語データを有するレスポンスによってクライアントに前記搬送可能状態構造を送信する工程をさらに含む請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記コンピュータプロセスが、前記直列化する工程に応答して、前記搬送可能状態構造に格納された状態情報からインテグリティコードを計算する工程と、
前記搬送可能状態構造に前記インテグリティコードを格納する工程と、
ウェブページを定義するオーサリング言語データを有するレスポンスによって前記搬送可能状態構造をクライアントに送信する工程とをさらに含む請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
前記搬送可能状態構造は、受信インテグリティコードをさらに含み、さらに、前記搬送可能状態構造から前記受信インテグリティコードを読み出す工程と、
前記搬送可能状態構造に含まれる状態情報から計算インテグリティコードを計算する工程と、
前記受信インテグリティコードと前記計算インテグリティコードを比較し、前記搬送可能状態構造が有効かどうかを判断する工程とを含む請求項１２乃至１９のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【請求項２１】
クライアントコンピュータからの状態値およびデータタイプを格納する搬送可能状態構造を含むリクエストを処理するサーバコンピュータで実行処理されるソフトウェアモジュール群とソフトウェアオブジェクト群とのハンドラシステムであって、
ハンドラによって作成され、前記クライアントコンピュータに表示されたウェブページに含まれたクライアント側ユーザインタフェース要素と関連する階層的サーバ側制御オブジェクトであって、少なくとも１つのサーバ側制御オブジェクトはプロパティを含み、少なくとも１つのクライアント側ユーザインタフェース要素を定義するオーサリング言語コードを生成し、および前記生成後に前記階層が廃棄される階層的サーバ側制御オブジェクトと、
データタイプに基づき、前記搬送可能状態構造に受け取った状態値を前記サーバ側制御オブジェクトのプロパティに格納するローダモジュールと、
前記搬送可能状態構造に前記プロパティおよびデータタイプを格納する保存モジュールとを含むハンドラシステム。
【請求項２２】
状態値、関連階層情報および搬送可能状態構造からのデータタイプを抽出する読み出しモジュールと、
前記関連階層情報に基づき前記制御オブジェクト階層内で制御オブジェクトを指示するトラバースモジュールとをさらに含む請求項２１に記載のハンドラシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にウェブサーバフレームワークに関し、特にウェブページのクライアント側ユーザインタフェース要素を処理するサーバ側制御オブジェクトの状態の管理に関する。
【０００２】
【従来の技術】
典型的なウェブブラウザは、クライアントシステムにおいて表示するウェブページの外観および基本動作を規定するウェブサーバからデータを受け取る。典型的な手順としては、ユーザが、ワールドワイドウェブ上の資源のグローバルアドレスであるユニホームリソース（資源）ロケータ（以下、「URL」という）を特定し、所望のウェブサイトにアクセスする。一般に、用語「資源」とは、プログラムによってアクセスすることができるデータまたはルーチンのことである。URLの一例は、“ HYPERLINK "http://www.microsoft.com/ms.htm" http://www.microsoft.com/ms.htm ”である。このURL例の第１の部分は、通信に用いる所与のプロトコル（例えば“http”）を示している。第２の部分は、資源の所在を示すドメイン名（例えば“ HYPERLINK "http://www.microsoft.com" www.microsoft.com ”）を特定している。第３の部分はドメイン内の資源（例えば“ms.htm”と呼ばれるファイル）を特定している。これに従い、ブラウザは、 HYPERLINK "http://www.microsoft.com" www.microsoft.com ドメイン内のms.htmファイルに関連するデータを取り出すためのURL例に関連するHTTP(ハイパーテキストトランスポートプロトコル)リクエストを生成する。www.microsoft.comサイトをホストしているウェブサーバはHTTPリクエストを受け取り、要求されたウェブページまたは資源をクライアントシステムにHTTPレスポンスで戻し、ブラウザに表示する。
【０００３】
上記の例の"ms.htm"ファイルは、静的なHTML（ハイパーテキストマークアップ言語）コードを含んでいる。HTMLは、ワールドワイドウェブ上でのドキュメント（例えば、ウェブページ）作成に用いられるプレイン（平文）テキストオーサリング言語である。このようなものであるので、HTMLファイルは、ウェブサーバから取り出され、ブラウザにウェブページとして表示することができる。HTMLを用いて、開発者が、例えば、ブラウザに表示するフォーマット化されたテキスト、リスト、フォーム、テーブル、ハイパーテキストリンク、インライン画像および音声、ならびに背景グラフィックスを特定し、ユーザがインターネットからの情報を見ている間に期待するようになるグラフィカルな経験を提供することができる。しかし、HTMLファイルは、ウェブページコンテンツの動的な生成を本質的にサポートしていない静的ファイルである。
【０００４】
株価の変化や交通情報などのような動的コンテンツを表示する場合は、通常、より複雑なクライアント・サーバ間の対話をハンドリングするためのサーバ側アプリケーションプログラムを開発する。サーバ側アプリケーションプログラムは、HTTPリクエストを処理し、クライアントへのHTTPレスポンスの送信に適切なHTMLコードを生成する。HTTPリクエストの一例は、照会ストリングでのデータまたはウェブベースのフォームからのデータなどのパラメータを含むことがある。このようなものであるので、サーバ側アプリケーションプログラムは、このパラメータを処理し、クライアントへのHTTPレスポンスでHTMLコードを動的に生成することができる。サーバ側アプリケーションプログラムの一例として、メモリ機構への１つ以上のフォーマット化されたテキスト書込み処理のシーケンスを用いて、適切なHTMLコードを含むドキュメントを動的に生成する場合がある。その後、得られたドキュメントは、HTTPレスポンスでクライアントシステムに送信され、そこでウェブページとしてブラウザに表示される。
【０００５】
サーバ側アプリケーションプログラムの開発は、ウェブページ設計に用いる通常のHTMLコード化に精通しているだけでなく、１つ以上のプログラム言語（例えば、C++, Perl, Visual Basic, または Jscript）を含むプログラムベーシックスに精通していることが要求される複雑な作業である。しかし、ウェブページ設計者は、グラフィックデザイナーまたはエディタであることが多く、プログラム経験がない場合がある。さらに、複雑なウェブページ開発を単純化すると、いかなる開発者によっても新たなウェブコンテンツの開発の速度を上げることができる。一般に、カスタムサーバ側アプリケーションプログラムの開発もまた、多大な労力が要求され、実際、開発者はしばしばそれを試みたくないと思う程である。したがって、開発者が最小のプログラムでウェブページを動的に作成および処理することができる開発フレームワークを提供することが望ましい。
【０００６】
【発明が解決しようとする課題】
動的ウェブページ生成のプログラム要件を最小にする１つの手段は、マイクロソフト社によって提供されるアクティブサーバページ（ASP）フレームワークである。ASPリソースは、典型的に、所望の資源としてASPリソースを特定するHTTPリクエストを処理し、その後、クライアントへのHTTPレスポンスでの結果HTMLコードを生成する、例えばVisual BasicまたはJscriptを含む。さらに、ASP資源は、ページ開発者がすべてのコンポーネントをスクラッチから（何もない状態から）書込むことを要求するのではなくて、予め開発されたまたは第三者のクライアント側ライブラリコンポーネント（例えば、クライアント側"ACTIVEX"制御）を参照することができる。しかし、現在のサーバ側アプリケーションフレームワークにおいて、サーバ側アプリケーション内でクライアント側ユーザインタフェース要素（例えば、テキストボックス、リストボックス、ボタン、ハイパーリンク、画像、音声など）を動的に管理しなければならないプログラミングは、依然として高度なプログラミング技術と相当な労力を必要とする。未解決の課題は、ウェブページ開発者がウェブページの他のアスペクトに焦点を当てることができるように、ユーザインタフェース要素を処理することが要求されるプロパティカプセル化プログラミングについてである。
【０００７】
しかし、クライアント側ユーザインタフェース要素のサーバ側処理は、典型的にサーバ側アプリケーションプログラムでの複雑な状態管理問題を伴うことがある。クライアント側ユーザインタフェース要素に対応するサーバ側処理モジュールの状態は、サーバ側モジュールのプロパティおよび構成を表すものである。しかし、クライアントとサーバ間の通信接続は予期せず切断されることがあるので、状態管理を伴わないクライアント／サーバモデルでは、クライアントとサーバとの間の通信において、サーバがクライアントとサーバ間に発生するプロセスの状態を維持しないよう指示されてしまう。
【０００８】
【課題を解決するための手段】
本発明によると、上述および他の課題は、サーバが２つのリクエストの間における状態を保持していないクライアント側ユーザインタフェース要素について、サーバ側処理のカプセル化された状態管理を提供することによって解決される。クライアント側ユーザインタフェース要素の処理は、状態管理処理を含み、これは、制御オブジェクト階層の１つ以上のサーバ側制御オブジェクトの状態（例えば、「ビューステート」（viewstate））に関するものである。サーバ側制御オブジェクトはウェブページに表示するクライアント側ユーザインタフェース要素を処理および生成する。サーバ側制御オブジェクトの階層はまた、クライアントのウェブページに表示する標準HTMLのような結果オーサリング言語コードを協働して生成する。クライアントは、例えば、標準HTMLまたは別のオーサリング言語をサポートするものであれば、いかなるブラウザであってもよい。
【０００９】
状態管理を行わないクライアント／サーバモデルにおいては（を満たすために）、サーバ側制御オブジェクトの状態情報は、２つのHTTPリクエストの間はサーバ側に保持されるのではなく、搬送可能な状態構造でクライアントとサーバ間を搬送されることになる。サーバがクライアントからHTTPリクエストを受信すると、サーバは、HTTPリクエストからの搬送可能状態構造から状態情報を抽出し、この状態情報をサーバ側階層の適切な個々の制御オブジェクトに分配する。搬送可能状態構造のインテグリティもまた、搬送可能状態構造に関連し、かつ状態情報から生成されたコード化された構造を用いて検査される。
【００１０】
クライアントに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応するサーバ側制御オブジェクトの状態管理方法を提供する。制御オブジェクト階層にサーバ側制御オブジェクトを作成して、クライアント側ユーザインタフェース要素を処理する。搬送可能状態構造をクライアントから受け取る。搬送可能状態構造は、制御オブジェクト階層の少なくとも１つのサーバ側制御オブジェクトの状態値を示す状態情報を含む。状態情報は搬送可能状態構造から抽出される。状態情報からの状態値がサーバ側制御オブジェクトに関連している場合、その状態値をサーバ側制御オブジェクトのプロパティにロードする。
【００１１】
制御オブジェクト階層に作成され、かつクライアントに表示されるウェブページに組み込まれる複数のクライアント側ユーザインタフェース要素に対応する複数のサーバ側制御オブジェクトの状態を管理するコンピュータプログラムプロダクトを提供する。クライアントから受信した搬送可能状態構造は、制御オブジェクト階層の１つ以上のサーバ側制御オブジェクトに関連する状態情報を含む。状態情報を直列化して、状態値、関連したプロパティデータタイプおよびサーバ側制御オブジェクトのプロパティの階層情報が抽出される。階層情報に基づき制御オブジェクト階層内のサーバ側制御オブジェクトを探し当てる。状態値をサーバ側制御オブジェクトのプロパティにロードする。
【００１２】
コンピュータプログラムプロダクトとしての製品を提供する。本発明によるコンピュータプログラムプロダクトのある実施形態は、コンピュータシステムによって読み取り可能であり、クライアントに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応するサーバ側制御オブジェクトの状態を管理するコンピュータプロセスを実行するコンピュータプログラムをコード化するコンピュータプログラム記憶媒体を含む。本発明によるコンピュータプログラムプロダクトの別の実施形態は、コンピュータシステムによって搬送波で具体化され、クライアントに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応するサーバ側制御オブジェクトの状態を管理するコンピュータプログラムをコード化するコンピュータデータ信号を含む。本発明のプロセスによって生成されたプロダクトは、クライアントに送られクライアント上のブラウザで解釈可能な搬送可能状態構造を含むオーサリング言語コードとして提供される。
【００１３】
【発明の実施の形態】
本発明のある実施形態において、ウェブページコンテンツは、ウェブサーバ上に動的に生成され、クライアントに表示される。クライアントとウェブサーバは、例えば、HTTPリクエストおよびHTTPレスポンスを用いてネットワークにより通信する。このように、ウェブサーバは、HTMLコード形態などのウェブページコンテンツを生成し、ブラウザにウェブページを表示することができるクライアントへそのコンテンツを送信する。ウェブページの個々のユーザインタフェース要素と論理的に対応するサーバ側制御オブジェクトが、ウェブサーバ上に作成され、ウェブページを表示および処理するクライアント側ブラウザによって用いられるウェブページコンテンツを処理および生成する。サーバ側制御オブジェクトは、サーバ側制御オブジェクトの階層を作成するページファクトリによって処理されるASP+リソースなどの動的コンテンツファイルの中で宣言される。階層における制御オブジェクトはクライアントから受信したリクエストを協働して処理し、次いで、結果ウェブページコンテンツを生成し、クライアントへ送信し、階層における制御オブジェクトを終了させる。
【００１４】
本発明のある実施形態において、ページオブジェクトは、制御オブジェクト階層の最上レベルとして例示することができる。制御オブジェクトでもあるページオブジェクトは、典型的に１つ以上の子制御オブジェクトを含み、各子制御オブジェクトは、それ自体の１つ以上の子制御オブジェクトを含み、多数レベルの階層に広がる。ページオブジェクトおよび子孫の制御オブジェクトは、処理シーケンスを実行し、クライアント側ユーザインタフェース要素に対応するウェブコンテンツを処理および生成する。
【００１５】
このシーケンスにおける処理の１つは、クライアントからのリクエストに含まれる搬送可能状態構造で受け取る状態情報を階層内の適切な１つのまたは複数のオブジェクトに非直列化するロード処理を含む。このロード処理におけるトラバース処理は、階層内に適切な制御オブジェクトを見つけるために、搬送可能状態構造の階層情報に従い制御オブジェクト階層をトラバースする。本発明のある実施形態において、受け取った状態情報は、初期状態から変化した制御オブジェクトの状態のみを含む（すなわち、この状態情報は、差分データのみを含む）。別の実施形態では、変化していようといまいと階層内のすべての制御オブジェクトのすべての状態、または１つ以上のサーバ側制御オブジェクトの状態情報および階層情報という何か別の組み合わせを含むことがある。
【００１６】
上記シーケンスの別の処理は、状態が変化した制御オブジェクトからの状態情報を直列化する保存処理を含む。状態情報は、クライアントへ送信する搬送可能状態構造に状態情報を追加する。クライアントは、ウェブサーバへの次のリクエストでウェブサーバへその搬送可能構造を戻す。搬送可能状態構造を受信すると制御オブジェクト階層が再作成され、ロード処理により階層状態が以前のレスポンスの階層状態に戻る。
【００１７】
別の実施形態において、搬送可能状態構造をクライアントに送信しないようにすることもできる。搬送可能状態構造は送信されずにサーバに残り、別の資源場所（例えば、別のサーバ）に転送されてもよい。例えば、ロードバランシングの場合、第１のサーバが、第１のHTTPトランザクションでブラウザと通信するが、第２のサーバが、第２のHTTPトランザクションでブラウザと通信することができる。したがって、搬送可能状態構造は、第１のサーバから第２のHTTPトランザクション処理する第２のサーバへと送られ、それによって、クライアントをバイパスすることができる。
【００１８】
図１は、本発明のある実施形態におけるクライアントに表示するウェブページコンテンツを動的に生成するウェブサーバを示す。クライアント１００は、クライアント１００の表示装置上におけるウェブページ１０４を表示するブラウザ１０２を実行する。クライアント１００は、ビデオモニタのような表示装置を有するクライアントコンピュータシステムを含んでもよい。マイクロソフト社によって販売されている"INTERNET EXPLORER"ブラウザは、本発明のある実施形態におけるブラウザ１０２の一例である。他のブラウザの例として、"NETSCAPE NAVIGATOR" および "MOSAIC"などがあるが、これに限らない。例示したウェブページ１０４には、テキストボックス制御１０６および２つのボタン制御１０８、１１０が組み込まれている。ブラウザ１０２は、HTTPレスポンス１１２でウェブサーバ１１６からHTMLコードを受け取ることができ、HTMLコードにより記述されたウェブページを表示する。ある実施形態を参照してHTMLについて説明するが、特に制限されるものではなく、SGML（Standard Generalized Markup Language）、XML（eXtensible Markup Language）および、XMLベースのマークアップ言語であって、ポケットベルおよび携帯電話などの狭帯域無線装置の内容およびユーザインタフェースを特定するように設計されたWML（Wireless Markup Language）を含む他のオーサリング言語も本発明の範囲内であると考えられている。さらに、標準HTML３．２が、本明細書中に主に開示されているが、HTMLのいかなるバージョンも本発明の範囲内に含まれ得る。
【００１９】
クライアント１００とウェブサーバ１１６との通信は、HTTPリクエスト１１４およびHTTPレスポンス１１２の一連の処理を用いて行うことができる。ある実施形態を参照してHTTPを説明するが、特に制限されるものではなく、S−HTTPを含めた他のトランスポートプロトコルも本発明の範囲内であると考えられている。ウェブサーバ１１６において、HTTPパイプラインモジュール１１８が、HTTPリクエスト１１４を受信し、URLを解析し、リクエストを処理する適切なハンドラを呼び出す。本発明のある実施形態において、異なるタイプの資源を扱う複数のハンドラ１２０がウェブサーバ１１６に備わっている。
【００２０】
例えば、URLがHTMLファイルのような静的なコンテンツファイル１２２を特定する場合、ハンドラ１２０は、静的コンテンツファイル１２２にアクセスし、HTTPパイプライン１１８を介して静的コンテンツファイル１２２をHTTPレスポンス１１２でクライアント１００へ送る。あるいは、本発明のある実施形態において、URLがASP+リソースのような動的コンテンツファイル１２４を特定する場合、ハンドラ１２０は、動的コンテンツファイル１２４にアクセスし、動的コンテンツファイル１２４のコンテンツを処理し、ウェブページ１０４用の結果HTMLコードを生成する。本発明のある実施形態において、結果HTMLコードは、標準HTML３．２コードを含む。一般に、動的コンテンツファイルは、クライアントに表示すべきウェブページを記述するオーサリング言語を動的に生成するのに用いることができるサーバ側宣言データ格納部（例えば、ASP+リソース）である。そして、ウェブページ用のHTMLコードは、HTTPパイプライン１１８を通過し、HTTPレスポンス１１２でクライアント１００へ送られる。
【００２１】
この処理の間、ハンドラ１２０はまた、開発労力を単純にするために予め開発された、または第３者コードのライブラリにアクセスすることができる。このようなライブラリの１つがサーバ側クラス制御ライブラリ１２６であり、ここから、ハンドラ１２０は、ユーザインタフェース要素を処理しウェブページに表示する結果HTMLデータを生成するサーバ側制御オブジェクトを例示することができる。本発明のある実施形態において、１つ以上のサーバ側制御オブジェクトは、動的コンテンツファイル１２４に記述されたウェブページ上に、可視的にまたは隠して、１つ以上のユーザインタフェース要素にマッピングする。
【００２２】
これに対し、第２のライブラリは、マイクロソフト社からの"ACTIVEX"コンポーネントを含むライブラリのようなクライアント側制御クラスライブラリ１２８である。"ACTIVEX"制御は、クライアントおよび他のコンポーネントとの対話の仕方において一定の標準に従うCOM（コンポーネントオブジェクトモデル）オブジェクトである。クライアント側"ACTIVEX"制御は、例えば、クライアントに自動的にダウンロードされ、クライアントのウェブブラウザによって実行処理され得るCOMベースのコンポーネントである。サーバ側ACTIVEXコンポーネント（図示せず）は、株価検索アプリケーションまたはデータベースコンポーネントのサーバ側機能性を提供するような多様なサーバ側機能を果たすためにサーバ上で実行され得るCOMベースのコンポーネントである。ACTIVEXについては、「ACTIVEXおよびOLEの理解」（デビッド・チャペル、マイクロソフトプレス、１９９６年）により詳細に記載されている。
【００２３】
"ACTIVEX"制御とは対照的に、動的コンテンツ資源１２４に特定される本発明の実施形態のサーバ側制御オブジェクトは、クライアント上のウェブページに組み込まれるユーザインタフェース要素に論理的に対応する。サーバ側制御オブジェクトはまた、例えば、HTMLタグと所与のクライアント側"ACTIVEX"制御をリファレンスするロケータを含み得る有効なHTMLコードを生成することができる。ブラウザが、すでに格納システム内にクライアント側"ACTIVEX"制御用コードを有している場合は、クライアント上のウェブページ内で"ACTIVEX"制御を実行処理する。そうでなれば、ブラウザは、ロケータによって特定された資源から"ACTIVEX"制御用コードをダウンロードし、そして、クライアント上のウェブページ内で"ACTIVEX"制御を実行処理する。本発明の実施形態におけるサーバ側制御オブジェクトはまた、サーバ上で株価検索アプリケーションを実行するのに用いられるサーバ側"ACTIVEX"制御に対しイベントを提起することができる。
【００２４】
ハンドラ１２０はまた、ウェブサーバ１１６上または別のアクセス可能ウェブサーバ上で実行処理する１つ以上の非ユーザインタフェースサーバコンポーネント１３０にアクセスする。株価検索アプリケーションまたはデータベースコンポーネントのような非ユーザインタフェースサーバコンポーネント１３０は、ハンドラ１２０によって処理される動的コンテンツファイル１２４において参照され、またはそれに関連付けられる。動的コンテンツファイル１２４で宣言された制御オブジェクトによって提起されたサーバ側イベントは、非ユーザインタフェースサーバコンポーネント１３０の適切なメソッドを呼び出すサーバ側コードによって処理され得る。その結果、サーバ側制御オブジェクトによって提供される処理は、ウェブページのユーザインタフェース要素の処理および生成をカプセル化することによって非ユーザインタフェースサーバコンポ−ネント１３０のプログラミングを簡単にし、これにより、非ユーザインタフェースサーバコンポーネント１３０の開発者は、ユーザインタフェース問題ではなく、アプリケーション固有の機能の開発に集中することができる。
【００２５】
図２は、本発明のある実施形態におけるサーバ側制御オブジェクトを用いてのクライアント側ユーザインタフェース要素の処理および生成処理のフローチャートを示す。処理２００において、クライアントは、HTTPリクエストをサーバに送信する。HTTPリクエストは、ASP+リソースなどの資源を特定するURLを含む。処理２０２において、サーバは、HTTPリクエストを受信し、特定された資源を処理する適切なハンドラを呼び出す。HTTPリクエストは、１つ以上のサーバ側制御オブジェクトに関する状態情報および任意には階層情報を含んでいる搬送可能状態構造を含む。ただし、所与のページへの最初のHTTPリクエストは、その所与のページのサーバにおいて状態が変化していないことから、典型的には搬送可能状態構造を含んでいない。さらに、搬送可能状態構造は、プロパティデータタイプ情報および状態情報の有効性を確認する（すなわち、状態情報がクライアントで変造されなかったことを確認する）際にサーバを補助するためのインテグリティコードを含んでもよい。処理２０４は、特定された動的コンテンツファイル（例えば、ASP+リソース）の内容に基づきサーバ側制御オブジェクト階層を生成する。ASP+リソースは処理２０３において読み出される。処理２０５において、搬送可能状態構造で受け取った状態情報を階層内の適切なサーバ側制御オブジェクトにロードし、制御オブジェクトを以前の状態に戻す。
【００２６】
処理２０６において、制御オブジェクト階層のサーバ側制御オブジェクトは、ポストバックイベントハンドリング、ポストバックデータハンドリング、状態管理およびデータ結合のうちの１つ以上の処理を行う。ユーザインタフェース要素からのポストバックイベントおよびデータ（まとめて「ポストバック入力」）は、クライアントからサーバへと送られ処理される。例えば、ポストバックイベントは、特に制限されるものではなく、クライアント側ボタン要素からの「マウスクリック」またはサーバに送られるクライアント側テキストボックス要素からの「データ変化」イベントを含んでもよい。ポストバックデータは、特に制限されるものではなく、例えば、テキストボックス要素またはドロップダウンボックスから選ばれた項目のインデックスにユーザによって入力されたテキストを含んでもよい。
【００２７】
処理２０９において、プロパティ値、関連タイプ情報および階層情報をクライアントへ送信する搬送可能状態構造に格納する。処理２０８において、階層内の各サーバ側制御オブジェクトが、クライアント側ユーザインタフェース要素のウェブページでの表示のためのHTMLコードのようなオーサリング言語データを生成（またはレンダリング）するために呼び出される。用語「レンダリング」は、ユーザインタフェース上にグラフィックスを表示する処理を意味することがあるが、本明細書において「レンダリング」は、表示およびクライアント側機能のためのブラウザのようなクライアントアプリケーションによって解釈され得るオーサリング言語データの生成処理をも意味している。レンダリング処理２０８はまた、搬送可能状態構造を表しているオーサリング言語データを生成する。処理２０６およびレンダリング処理２０８のより詳細な説明は図６との関連で行われている。ある実施形態において、個々の制御オブジェクトにおけるrender（）メソッドの呼び出しは、ツリートラバーサルシーケンスを用いて行われる。すなわち、ページオブジェクトのrender（）メソッドの呼び出しは、階層内の適切なサーバ側制御オブジェクトにわたる反復トラバースになる。適切な制御オブジェクトのrender（）メソッドを呼び出す別の方法として、イベントシグナリングまたはオブジェクト登録手法などの方法を用いてもよい。括弧は、データ値と比較するなどのメソッドを示す「render（）」レベルを指定する。
【００２８】
本発明のある実施形態において、個々のサーバ側制御オブジェクトの実際の作成は、サーバ側制御オブジェクトが処理２０６または２０８においてアクセスされる（ポストバック入力のハンドリング、状態のロード、制御オブジェクトからHTMLコードのレンダリングなど）まで遅らせてもよい。サーバ側制御オブジェクトが所与のリクエストのためにアクセスされることがない場合、制御オブジェクトの作成を遅らせ、不要な制御オブジェクト作成処理を排除することによって、サーバ処理が最適化される。
【００２９】
処理２１０において、搬送可能状態構造を含むオーサリング言語データ（例えば、HTMLコード）をHTTPレスポンスでクライアントに送信する。処理２１４において、クライアントは、表示されるべきウェブページに関連する搬送可能状態構造を含むHTMLコードを受信する。搬送可能状態構造は、次のHTTPリクエストでサーバに戻すためにクライアントに保存され得る。処理２１６において、クライアントシステムは、HTTPレスポンスから受け取ったHTMLコードに応じて新しいページのユーザインタフェース要素を組み入れる（例えば、表示する）。しかし、ユーザインタフェース要素の組み入れは、音声または触覚出力を提供する、メモリへの読出しおよび書込み、スクリプト処理の制御などの非表示処理を含んでもよいことを理解すべきである。処理２１２において、サーバ側制御オブジェクト階層を終了する。本発明のある実施形態において、階層内サーバ側制御オブジェクトは、関連付けられたASP+リソースを参照するHTTPリクエストに応答して作成され、オーサリング言語データ（例えば、HTMLデータ）のレンダリングが終わると破壊される。別の実施形態において、処理２１２は、処理２０８の後、処理２１０の前に行ってもよい。
【００３０】
図３は、本発明のある実施形態において用いるウェブサーバでのモジュールの一例を示す。ウェブサーバ３００は、HTTPパイプライン３０４にHTTPリクエスト３０２を受け入れる。HTTPパイプライン３０４は、ウェブページ統計のロギング、ユーザ照合、ユーザアクセス権およびウェブページの出力キャッシュ化用モジュールなどの種々のモジュールを含んでもよい。ウェブサーバ３００によって受信される各入力HTTPリクエスト３０２は、最終的には、IHTTPハンドラクラス（ハンドラ３０６として図示）の特定のインスタンスによって処理される。IHTTPという接頭語は、そのクラスがHTTPハンドラのインタフェースであることを示している。ハンドラ３０６は、URLリクエストを解析し適切なハンドラファクトリ（例えば、ページファクトリモジュール３０８）を呼び出す。
【００３１】
図３において、ASP+リソース３１０に関連付けられたページファクトリ３０８が呼び出され、ASP+リソース３１０において宣言されたオブジェクトの例示および構成をハンドリングする。ある実施形態において、ASP+リソースは、ファイルに特定の接尾語（または".aspx"のようなファイル拡張部分）を指定することによって認識または参照され得る。所与の".aspx"資源に対するリクエストがまず、ページファクトリモジュール３０８によって受信されると、ページファクトリモジュール３０８は、ファイルシステムを検索して適切なファイル（例えば、.aspxファイル３１０）を得る。このファイルは、リクエストを処理するサーバによって後に解釈またはアクセスされ得るテキスト（例えば、オーサリング言語データ）または別のフォーマットでのデータ（例えば、バイトコードデータまたはコード化されたデータ）を含んでもよい。物理的なファイルが存在する場合、ページファクトリモジュール３０８は、ファイルを開き、そのファイルをメモリに読み出す。ファイルが見つからない場合、ページファクトリモジュール３０８は、適切な「ファイルが見つからない」というエラーメッセージを戻す。
【００３２】
ASP+リソース３１０をメモリに読み出した後、ページファクトリモジュール３０８は、ファイル内容を処理し、ページのデータモデル（例えば、スクリプトブロックのリスト、ディレクティブ、静的テキスト領域、階層サーバ側制御オブジェクト、サーバ側制御プロパティなど）を構築する。データモデルは、ページベースのクラスを拡張させるCOM+（Component Object Model+）クラスのような新たなオブジェクトクラスのソースリストを生成するのに用いられる。ページベースクラスは、基本ページオブジェクトの構造、プロパティおよび機能を規定するコードを含んでいる。次いで、ソースリストは、中間言語に動的にコンパイルされる。中間言語は、COM+ IL コード、Java バイトコード、Modula 3 コード、SmallTalk コードおよびVisual Basicコードなどの汎用またはカスタム指向言語コードを含んでもよい。別の実施形態において、中間言語処理を省き、固有の命令をソースリストまたはソースファイル（例えば、ASP+リソース３１０）から直接生成してもよい。制御クラスライブラリ３１２は、制御オブジェクト階層の生成に用いられる予め定義されたサーバ側制御クラスを得るためにページファクトリモジュール３０８によってアクセスされ得る。
【００３３】
ページファクトリモジュール３０８は、図１のウェブページ１０４に相当するサーバ側制御オブジェクトであるページオブジェクト３１４を出力する。ページオブジェクト３１４およびその子オブジェクト（例えば、テキストボックスオブジェクト３１８、ボタンオブジェクト３２０および別のボタンオブジェクト３２２）が、制御オブジェクト階層３１６の一例である。他の制御オブジェクトの例は、本発明に従い考えることができ、特に制限されるものではなく、表１のHTML制御に対応するオブジェクトおよびカスタム制御オブジェクトを含む。ページオブジェクト３１４は、図１のウェブページ１０４に論理的に対応する。テキストボックスオブジェクト３１８は、図１のテキストボックス１０６に対応する。同様に、ボタンオブジェクト３２０は、図１の追加ボタン１０８に対応し、ボタンオブジェクト３２２は、図１の削除ボタン１１０に対応する。ページオブジェクト３１４は、サーバ上の他の制御オブジェクトと階層的に関連している。ある実施形態において、ページオブジェクトは、その子制御オブジェクトを階層的に含んでいるコンテナオブジェクトである。別の実施形態では、依存関係などの他の形態の階層関係を用いることができる。多数レベルの子オブジェクトを有するより複雑な制御オブジェクト階層において、１つの子オブジェクトが、他の子オブジェクトのコンテナオブジェクトであってもよい。
【００３４】
上記の実施形態において、制御オブジェクト階層３１６の制御オブジェクトは、サーバ３００上で作成および実行され、各サーバ側制御オブジェクトは、クライアント上の対応するユーザインタフェース要素を「ミラーする」。本実施形態のサーバ側制御オブジェクトはまた、協働して、HTTPリクエスト３０２からの入力をハンドリングし、サーバ側制御オブジェクトの状態を管理し、サーバ側データベースとのデータ結合を行い、クライアントでの結果ウェブページの表示に用いるオーサリング言語データ（例えば、HTMLコード）を生成する。結果オーサリング言語データは、サーバ側制御オブジェクト階層３１６から生成（すなわち、レンダリング）され、HTTPレスポンス３２４でクライアントに送信される。例えば、結果HTMLコードは、いかなる有効なHTML構成も具現化することができ、ACTIVEXタイプの制御、JAVAアプレット、スクリプトおよびその他、ブラウザによって処理されたとき、クライアント側ユーザインタフェース要素（例えば、制御ボタン、テキストボックスなど）を生み出すいかなるウェブ資源も参照することができる。
【００３５】
ASP+リソース３１０でなされた宣言によって、サーバ側制御オブジェクトは、非ユーザインタフェースサーバコンポーネント３３０とクライアント側ユーザインタフェース要素との対話のために、１つ以上の非ユーザインタフェースサーバコンポーネント３３０にアクセスすることができる。例えば、ポストバック入力に応答して、サーバ側制御オブジェクトは、サーバ側イベントをそれらのイベント用に登録された非ユーザインタフェースサーバコンポーネントに対し提起することができる。このように、非ユーザインタフェースサーバコンポーネント３３０は、ユーザとの対話を、ユーザインタフェース要素を介して、これらの要素を表示および処理するのに必要なコードをプログラミングすることなく行うことができる。
【００３６】
要するに、本発明の実施形態は、クライアントに送るHTMLコードを生成するためにサーバ上で作成および実行処理されるサーバ側制御オブジェクトを含む。HTMLコードは、例えば、いかなる有効なHTML構成も具現化することができ、ACTIVEXタイプの制御、JAVA アプレット、スクリプトならびにクライアントでのユーザインタフェースボタンおよび他のユーザインタフェース要素を生成する他のいかなるウェブ資源も参照することができる。クライアントでのユーザは、サーバ側制御オブジェクトに論理的に対応するこれらのユーザインタフェース要素と対話し、リクエストをサーバに送り返すことができる。サーバ側制御オブジェクトは、サーバ上で再作成され、クライアントにレスポンスとして送信すべき次のラウンドのHTMLコードを生成するように、ユーザインタフェース要素のデータ、イベントおよび他の特性を処理する。
【００３７】
図４を参照すると、本発明の実施形態のコンピュータシステムの一例は、プロセッサユニット４０２、システムメモリ４０４およびシステムメモリ４０４を含む種々のシステムコンポーネントをプロセッサユニット４００に接続するシステムバス４０６を含んでいる従来のコンピュータシステム４００という形態の汎用コンピュータ装置を含んでいる。システムバス４０６は、メモリバスまたはメモリコントローラ、種々のバスアーキテクチャを用いるペリフェラルバスおよびローカルバスを含む幾つかのタイプのバス構造のいずれであってもよい。システムメモリは、再生専用メモリ（ROM）４０８およびランダムアクセスメモリ（RAM）４１０を含んでいる。コンピュータシステム４００内の要素間での情報の転送を助ける基本ルーチンを含んでいる基本入力／出力システム４１２（BIOS）は、ROM４０８に格納されている。
【００３８】
コンピュータシステム４００は、さらに、ハードディスクの読み出しおよび書き込みを行うハードディスクドライブ４１２、着脱可能な磁気ディスク４１６の読出しおよび書込みを行う磁気ディスクドライブ４１４およびCD ROM、DVDまたは他の光学媒体のような着脱可能な光ディスク４１９の読出しおよび書込みを行う光ディスクドライブ４１８を含んでいる。ハードディスクドライブ４１２、磁気ディスクドライブ４１４および光学ディスクドライブ４１８は、それぞれ、ハードディスクドライブインタフェース４２０、磁気ディスクドライブインタフェース４２２および光ディスクドライブインタフェース４２４によってシステムバス４０６接続されている。ドライブおよびその関連コンピュータ読み取り可能媒体が、コンピュータシステム４００のコンピュータ読み取り可能命令、データ構造、プログラムおよび他のデータの不揮発性記憶部を提供している。
【００３９】
本明細書に記載の上記環境例では、ハードディスク、着脱可能な磁気ディスク４１６および着脱可能な光ディスク４１９を用いているが、データ保存可能な他のタイプのコンピュータ読み取り可能媒体を上記システム例に用いることができる。上記動作環境例に用いることができるこれらの他のタイプのコンピュータ読み取り可能媒体は、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイ(Bernoulli)カートリッジ、ランダムアクセスメモリ（RAM）および再生専用メモリ（ROM）などがある。
【００４０】
多数のプログラムモジュールが、ハードディスク、磁気ディスク４１６、光ディスク４１９、ROM４０８またはRAM４１０に格納され得、これらは、オペレーティングシステム４２６、１つ以上のアプリケーションプログラム４２８、他のプログラムモジュール４３０およびプログラムデータ４３２を含む。ユーザは、コマンドおよび情報をコンピュータシステム４００にキーボード４３４およびマウス４３６または他のポインティング装置などの入力装置によって入力することができる。他の入力装置としては、例えば、マイクロフォン、ジョイステック、ゲームパッド、サテライトディッシュおよびスキャナなどがある。これらおよび他の入力装置は、システムバス４０６に接続されているシリアルポートインタフェース４４０を介して処理装置４０２に接続されていることが多い。しかし、これらの入力装置はまた、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（USB）などの他のインタフェースによって接続されていてもよい。モニタ４４２または他のタイプの表示装置もまた、ビデオアダプタ４４４などのインタフェースを介してシステムバス４０６と接続している。モニタ４４２に加えて、コンピュータシステムは、典型的には、スピーカおよびプリンタなどの他の周辺出力装置（図示せず）を含む。
【００４１】
コンピュータシステム４００は、リモートコンピュータ４４６のような１つ以上のリモートコンピュータへの論理接続を用いたネットワーク化された環境で動作することができる。リモートコンピュータ４４６は、コンピュータシステム、サーバ、ルータ、ネットワークPC、ピア（peer）装置、または他の共通ネットワークノードであり得、典型的にコンピュータシステム４００との関連で上述した要素の多くまたはすべてを含む。ネットワーク接続は、ローカルエリアネットワーク（LAN）４４８およびワイドエリアネットワーク（WAN）４５０を含む。このようなネットワーク環境は、オフィス、企業規模コンピュータネットワーク、イントラネットおよびインターネットにおいて珍しいものではない。
【００４２】
LANネットワーク環境で用いるとき、コンピュータシステム４００は、ネットワークインタフェースまたはアダプタ４５２を介してローカルネットワーク４４８に接続される。WANネットワーク環境で用いるとき、コンピュータシステム４００は、典型的に、インターネットのようなワイドエリアネットワーク４５０による通信を確立するためのモデム４５４または他の手段を含む。モデム４５４は内蔵または外付けのいずれでもよく、シリアルポートインタフェース４４０を介してシステムバス４０６と接続されている。ネットワーク化された環境において、コンピュータシステム４００に関連して述べたプログラムモジュールまたはその一部は、リモートメモリ記憶装置に記憶されてもよい。図示されたネットワーク接続は例であって、コンピュータ間の通信リンク確立のために他の手段を用いることができる。
【００４３】
本発明の実施形態において、コンピュータ４００は、ウェブサーバを表し、CPU４０２が、記憶媒体４１６、４１２、４１４、４１８、４１９またはメモリ４０４のうち少なくとも１つに記憶されたASP+リソース上でページファクトリモジュールを実行処理する。HTTPレスポンスおよびリクエストは、クライアントコンピュータ４４６に接続されたLAN４４８により通信される。
【００４４】
図５は、本発明のある実施形態におけるページオブジェクトおよび他の制御オブジェクトのサーバ側処理を表すプロセスフローチャートである。処理５００において、ページオブジェクト構築部が、ページファクトリモジュール３０８によって呼び出される（図３参照）。その結果、ページオブジェクト（例えば、図３におけるページオブジェクト３１４を参照）は、クライアント上のウェブページユーザインタフェース要素を「ミラーする」ために作成される。処理５０２において、ページファクトリモジュールは、クライアントから受け取ったHTTPリクエストの段階的な処理を始めるページオブジェクトのProcessRequestメンバ関数を呼び出す。本発明の一実施形態の第１の段階において、サーバ側作成処理(図示せず)は、ページオブジェクトの制御オブジェクト階層に含まれる子孫サーバ側制御オブジェクトの作成であり得る。すなわち、子制御オブジェクトの構築部がHTTPリクエスト処理の処理生存期間の間制御オブジェクトを作成するために繰り返し呼び出される。
【００４５】
しかし、別の実施形態において、子制御オブジェクトの作成は、制御オブジェクトが所与の処理ステップ（例えば、ポストバックイベントのハンドリング、ポストバックデータのハンドリング、ビューステートのローディングおよび保存、データ結合の解析または対応するユーザインタフェース要素のHTMLコードのレンダリング）に必要とされるまで遅らせることができる。「制御オブジェクト作成を遅らせる」後者の実施形態は、不必要なCPUおよびメモリの利用を減らすことができるので最適である。例えば、クライアントから受け取ったユーザ入力イベントが、全く異なるウェブページの作成ということになる場合がある。この場合、直ちに制御オブジェクト階層の終了させ、新たなページの新たな異なる制御オブジェクト階層を例示することになるイベントを処理するためだけに、以前のページの制御オブジェクト階層全体を例示する必要はない。
【００４６】
ページオブジェクトのProcessRequestメソッドのサーバ呼び出しに応答して、処理５０４〜５２０は、所与のHTTPリクエストのデータなどに応じ、データページオブジェクトおよび個々の子孫制御オブジェクトによって実行処理することができる。本発明のある実施形態において処理５０４〜５２０を図５の順序で各個々のオブジェクトに対し行う。しかし、１つのオブジェクトに対する所与の処理は、HTTPリクエストによっては、別のオブジェクトの所与の処理に関して順番に行われなかったり、全く処理が行われないこともある。例えば、第１のオブジェクトは、初期化処理５０４およびそのロード処理５０６を行い、ポストバックデータ処理５０８を開始し、その後、遅れた制御オブジェクト作成により子孫制御オブジェクトが、それ自体の初期化処理５０４およびロード処理５０６を行う。ページオブジェクトおよび子孫制御オブジェクトによる処理の順番は、これには限らないが、HTTPリクエストにおけるデータの性質、制御オブジェクト階層の構成、制御オブジェクトの現在の状態および制御オブジェクト作成が遅れて行われるかどうかを含む種々の要因による。
【００４７】
初期化処理５０４は、動的コンテンツファイルにおける初期化に関する任意のサーバ側コードを実行処理することによって制御オブジェクトが作成された後、制御オブジェクトを初期化する。このようにして、各サーバ側制御オブジェクトは、動的コンテンツファイルで宣言された特定のサーバ側機能でカスタマイズされ得る。本発明の実施形態において、動的コンテンツコードは、サーバ上のASP+リソースでページ開発者によって宣言されたベースページ制御クラスをカスタマイズまたは拡張することが意図された。ASP+リソースがコンパイルされると、宣言されたコードは、適切な初期コード（例えば、ページオブジェクトおよび子孫制御オブジェクトの初期化（）メソッド）に含まれている。初期化処理５０４は、このコードを実行処理して、ページベースクラスおよび子孫制御オブジェクトのベースクラスをカスタマイズまたは拡張する。
【００４８】
本発明のある実施形態において、サーバ側制御オブジェクトの状態管理は、サーバ側制御オブジェクトを以前の状態に戻すことによってクライアント・サーバシステムの無状態モデルを収納するために搬送可能状態構造を用いるロード処理５０６および保存処理５１６にサポートされる。ある実施形態では、状態は、一対のHTTPリクエスト／レスポンスの隠れた１つ以上のHTMLフィールドでサーバを往復するが、クッキーおよび可視フィールドなどの他の搬送可能状態構造も本発明の範囲内であると考えられる。
【００４９】
クライアントとサーバ間の現在のページに関する所与のリクエストおよびレスポンスによる一連の処理において、１つ以上の制御オブジェクトの状態は、先のリクエストの処理後に保存処理５１６によって搬送可能状態構造に記録される。本発明のある実施形態において、階層情報またはサーバが適切な制御オブジェクトと所与の状態とを関連付けることを可能にする制御オブジェクト識別子を含む追加の状態情報もまた、搬送可能状態構造に含まれる。次のHTTPリクエストにおいて、状態情報は、搬送可能状態構造でサーバに戻される。サーバは、受信した搬送可能状態構造から状態情報を抽出し、状態データを制御オブジェクト階層内の適切な制御オブジェクトにロードし、各制御オブジェクトを先のHTTPレスポンス以前に存在したような状態に戻す。現在のリクエストに対する処理後、１つ以上のサーバ側制御オブジェクトの状態は、再度保存処理５１６によって搬送可能状態構造に記録され、次のHTTPレスポンスで搬送可能状態構造をクライアントに戻す。
【００５０】
ロード処理５０６の結果、各サーバ側制御オブジェクトを先のHTTPリクエスト以前の状態と同じ状態にする。例えば、テキストボックス制御オブジェクトが、先のHTTPレスポンス以前に"JDoe"と同等のプロパティ値を含む場合、テキストストリング"JDoe"をそのプロパティ値にロードすることなどによって、ロード処理５０６は、同じ制御オブジェクトを先の状態に戻す。さらに、所与のオブジェクトの状態が記憶され回復されたかどうかについても構成可能である。
【００５１】
本発明の一実施形態を要約すると、１つ以上のサーバ側制御オブジェクトの状態が処理後「保存」される。保存された状態情報は、レスポンスによりクライアントに送信される。クライアントは、次のレスポンスで保存された状態情報をサーバ側に戻す。サーバは、階層の状態が以前の状態に戻るように、新たに例示されたサーバ側制御オブジェクト階層に状態情報をロードする。
【００５２】
別の実施形態では、サーバ上、またはサーバからクライアント、そしてサーバへ戻るという往復の間、サーバによってアクセス可能な幾つかの他のウェブロケーションに状態情報を保持できる。クライアントリクエストをサーバが受信した後、この状態情報は、サーバによって取り出され、制御オブジェクト階層内の適切なサーバ側制御オブジェクトにロードされ得る。
【００５３】
処理５０８において、HTTPリクエストから受け取ったポストバックデータが処理される。ポストバックデータは、対になったキー値、階層表示（例えば、XML）またはRDF（Resource Description Framework）のような他のデータ表示でのHTTPリクエストのペイロードに含まれ得る。処理５０８は、ペイロードを構文解析してサーバ側制御オブジェクトの一意の識別子を識別する。識別子（例えば、"page1:text1"）を見つけ、識別されたサーバ側制御オブジェクトが制御オブジェクト階層に存在する場合、対応するポストバックデータがその制御オブジェクトへと渡される。例えば、図１を参照すると、テキストボックス１０６およびテキスト"JDoe"に関連する一意の識別子は、HTTPリクエスト１１４のペイロードでウェブサーバ１１６へ送られる。処理５０８はHTTPリクエスト１１４のペイロードを構文解析し、テキストボックス１０６の一意の識別子とその関連値（すなわち"JDoe"）を得る。それから処理５０８は、テキストボックス１０６の一意の識別子を解析し、対応するサーバ側制御オブジェクトを識別し、処理するオブジェクトに"JDoe"値を渡す。
【００５４】
ロード処理５０６に関して説明したように、サーバ側制御オブジェクトのプロパティ値は、以前の状態に戻され得る。ポストバックデータを受け取ると、サーバ側制御オブジェクトは、渡されたポストバック値が対応する先のプロパティ値を変化させたかどうかを判断する。変化した場合には、関連制御オブジェクトのデータ変化を示す変化リストにその変化をロギングする。すべてのポストバックデータが制御オブジェクト階層内で処理された後、制御オブジェクトメソッドが呼び出され、サーバ上で起動している株価検索アプリケーションのような１つ以上の非ユーザインタフェースサーバコンポーネントに対し、１つ以上のポストデータ変化イベントを提起し得る。ポストデータ変化イベントは、例えば、ポストバックデータがサーバ側制御オブジェクトのプロパティを変化させたということを示しているイベントである。例示的な実施形態において、このようなイベントは、システム提供イベント待ち行列に送られ、イベントを処理するよう登録されたサーバコンポーネントを呼び出すことができる。このように、サーバ側非ユーザインタフェースサーバコンポーネントは、サーバ側制御オブジェクトのデータの変化によってトリガされたイベントに応答することができる。アプリケーション提供イベント待ち行列、ポーリング、および処理割込みを用いることを含む、イベントを実行する別の方法もまた本発明の範囲内で考えることができる。
【００５５】
処理５１０において、ポストバックイベントをハンドリングする。ポストバックイベントは、HTTPリクエストのペイロードで通信される。処理５１０は、そのイベントが向けられているサーバ側制御オブジェクトを識別する特定のイベントターゲット（例えば、本発明のある実施形態では、"##EVENTTARGET"とラベル付けされている）を構文解析する。さらに、処理５１０は、探し当てたイベント引数がある場合はそれを構文解析し、イベント引数（例えば、本発明のある実施形態では、"##EVENTARGUMENT"とラベル付けされている）を特定されたサーバ側制御オブジェクトに与える。制御オブジェクトは、動的コンテンツファイルに関連する非ユーザインタフェースサーバコンポーネント（例えば、サーバ側株価検索アプリケーション）によって処理するイベントを立ち上げる。
【００５６】
処理５１２は、サーバ側制御オブジェクトとサーバがアクセス可能な１つ以上のデータベースとの間のデータ結合を解明する。本発明のある実施形態では、サーバ側制御オブジェクトのプロパティは、サーバ側アプリケーションデータベースの表のような親データ結合コンテナのプロパティと関連付けられ（またはデータ結合され）得る。データ結合処理６１２の間に、ページフレームワークは、対応する親データ結合コンテナプロパティの値を有するデータ結合された制御オブジェクトプロパティを更新することができる。このように、次のレスポンスにおけるウェブページ上のユーザインタフェース要素は、更新されたプロパティ値を正確に反映する。なぜなら、ユーザインタフェース要素が対応する制御オブジェクトプロパティは、データ結合処理５１２の間に、自動的に更新されたからである。同様に、制御オブジェクトプロパティはまた、親データ結合コンテナフィールドに更新され得、これにより、サーバ側制御オブジェクトからのポストバック入力でサーバ側アプリケーションデータベースを更新する。
【００５７】
処理５１４は、制御オブジェクト状態が保存され出力がレンダリングされる以前に実行処理され得る多数の更新処理を行う。処理５１６は、制御オブジェクト階層内の１つ以上の制御オブジェクトから状態情報（すなわち、ビューステート）を要求し、状態情報を格納し、HTTPレスポンスペイロードでクライアントへ送られる搬送可能状態構造に挿入する。例えば、「グリッド」制御オブジェクトは、値のリストの現在のインデックスページを保存し、「グリッド」制御オブジェクトは、次のHTTPリクエスト（すなわち、処理５０６）の後この状態に戻ることができる。上記のように、ビューステート情報は、クライアントによる次のアクション以前（例えば、HTTPレスポンスがクライアントに送られる以前）の制御オブジェクト階層の状態を表す。ビューステート情報が戻ってくると、それは、制御オブジェクト階層を、クライアントポストバック入力処理またはデータ結合以前の先の状態にするのに用いられる。
【００５８】
レンダリング処理５１８は、HTTPレスポンスでクライアントへ送る適切なオーサリング言語出力（例えば、HTMLデータ）を生成する。レンダリングは、すべてのサーバ側制御オブジェクトのトップダウン階層ツリーウォークおよび埋め込まれたレンダリングコードにより行われる。処理５２０は、任意の最終のクリーンアップ作業（例えば、ファイルを閉じたりデータベースの接続）を行い、制御オブジェクト階層を終了させる。次いで、処理は５０２に戻り、処理５２２を行い、そこでページオブジェクトは、その破壊部を呼び出すことによって終了する。
【００５９】
図６は、本発明のある実施形態における動的コンテンツファイル（例えば、ASP+リソース）の部分の一例を示す。ASP+リソース６００のライン１は、HTMLファイルの開始タグであり、ASP+リソース６００においてリテラルとして宣言される。リテラルは、サーバ側制御オブジェクト階層内のサーバ側リテラル制御オブジェクトに対応する。ライン１に対応するリテラル制御オブジェクトには、ASP+リソース６００での宣言による第１の制御オブジェクトであることから、インデックス「０」を与える。レンダリング時間において、リテラル制御オブジェクトは、単に"<html>"テキストおよびHTTPレスポンスに含むための新たなラインを生成するだけである。ASP+リソース６００のライン２から１２は、コード宣言ブロックを表し、これは、サーバ上で実行処理される（すなわち、ライン２の"runat = server"属性で示されたように）。本ASP+リソース６００の例において、コード宣言ブロックの結果、制御オブジェクト階層内のサーバ側制御オブジェクトの例示は起こらない。そうではなくて、コード宣言ブロックにより、サーバ側コードが、ライン１５で宣言されたサーバ側制御オブジェクトと「ワイヤで繋がれ」たり、または関連付けられたりする。ASP+リソース６００のライン１３は、HTMLファイルの本文の開始タグであり、リテラルとしてASP+リソース６００で宣言され、インデックス「１」を有するリテラル制御オブジェクトとなる。
【００６０】
ライン１４での宣言は、制御オブジェクト階層に例示されるサーバ側フォーム制御オブジェクト（インデックス＝「２」）を宣言する。ライン１７および１８でのタグは、制御オブジェクト階層内でのサーバ側リテラル制御オブジェクト（インデックス＝「３」）と表される終了タグである。ライン１６の終了タグは、フォーム制御オブジェクトに対応する<form>宣言を終了する。
【００６１】
次の階層レベルで、ライン１５の宣言は、HTML制御タグ"span"を用い、"Message"という識別子属性("id")を有するサーバ側ラベル制御オブジェクト（インデックス＝「１」）を宣言する。この階層レベルのインデックス「０」および「２」はそれぞれ、先行のホワイトスペースリテラル（例えば、タブ、新たなライン、スペースなど）のリテラル制御オブジェクト（インデックス＝「０」）および次のホワイトスペースリテラルのリテラル制御オブジェクト（インデックス＝「２」）に割り当てられる。
【００６２】
図７は、図６の動的コンテンツファイルの部分例に応答して１つ以上のサーバ側制御オブジェクトによって生成される結果コードを示す。本説明を簡単にするために、フォーム、状態管理およびスパンセクションのみをHTMLコード部７００に示している。<html>および<body>のような他のタグは、HTMLコード部７００に含まれていないが、これらのタグのHTMLコードは、図６のASP+リソースからの１組の完全なHTMLコードに含まれ得る。
【００６３】
ライン１および５は、HTMLコードのフォームセクションの開始および終了タグであり、図６のライン１４から１６で宣言されたサーバ側フォーム制御オブジェクトによって生成される。ライン４は、図６のライン１５で宣言された最終ポストバック処理の日付を表示しているラベル（すなわち、"Last Post Back: 5/6/99"）のHTMLコードを含んでいる。
【００６４】
ライン２および３の隠されたフィールドは、本発明による搬送可能状態構造の一実施形態を表している。ライン２において、ASP+リソース６００で宣言されたサーバ側制御オブジェクトの状態情報は、"##VIEWSTATE"という名の隠れたフィールドに記録される。"##VIEWSTATE"フィールド値は、状態値、プロパティタイプおよび制御オブジェクト階層内の制御オブジェクトの階層情報を表すテキストストリングである。階層情報はまた、ロード処理が、階層をトラバースし、所与の状態値を階層内の適切な制御オブジェクトのプロパティにロードするために"##VIEWSTATE"フィールドに含まれている。
【００６５】
本発明のある実施形態では、クライアントはHTTPリクエスト／レスポンス対シーケンスを用いてウェブサーバと対話する。クライアントへのレスポンスとサーバが受信する次のリクエストとの間に、サーバは、所与のASP＋リソースまたは所与のクライアントとの接続に関連するサーバ側制御オブジェクトの状態を維持しなくてもよい。維持する代わりに、所与の制御オブジェクト階層の状態情報を搬送可能状態構造で（例えば、HTTPレスポンスで）クライアントに送り、搬送可能状態構造で（例えば、次のHTTPリクエストで）サーバに戻される。
【００６６】
ライン３は、"434333433"という値を有する"##VIEWSTATE"という名の隠れたファイルを表す。"##VIEWSTATEMAC"は、##VIEWSTATE値がクライアントで変造されていないことを確認するためにロード処理によって用いられる搬送可能状態構造におけるインテグリティコードである。##VIEWSTATEMAC値は、最初、##VIEWSTATE値の内容からサーバで計算され、レスポンスによりクライアントに送られる。クライアントが搬送可能状態構造を戻すとき、ウェブサーバは、受信した##VIEWSTATE値の内容から新たなインテグリティコードを計算する。受信したインテグリティコードおよび新たに計算されたコードが等しければ、ウェブサーバは、受信した##VIEWSTATE値は有効または変造されていない（すなわち、クライアントに先に送った##VIEWSTATE値と同じ）と判断する。本発明のある実施形態では、MD5アルゴリズムを用いて、インテグリティコードを計算する。MD５は、デジタル署名の作成に使用するためにドナルド・リベスト教授によって１９９１年に作成されたアルゴリズムである。MD5は、一方向のハッシュ機能、すなわち、メッセージを受け取り、それをデジタルの固定ストリングに変換するもので、メッセージダイジェストとも呼ばれる。このようなメソッドは、アクセス権のない個人またはプログラムによる不正操作を減らす秘密の鍵の使用を含んでもよい。しかし、他の実施形態では、MD4アルゴリズムまたは他の任意のハッシュアルゴリズムに基づくコードを生成すること、あるいは##VIEWSTATEフィールドの長さを含む別のインテグリティコード化技術を含んでもよい。
【００６７】
本発明のある実施形態では、ライン２の##VIEWSTATEフィールドの構造は、制御オブジェクトおよびそれらの状態（例えば、状態値およびそれに関連するプロパティデータタイプ）の階層的入れ子状態を表す。##VIEWSTATEフィールドの一例に用いるタグを（表１）に示す。"/"を含んでいるタグは終了タグを表す。
【００６８】
【表１】
0003954809.tif 000002
【００６９】
本明細書中ではコード化実施形態の一例を示すが、別の実施形態では、他のコード化方法を用いることができることを理解すべきである。例えば、階層情報、状態値およびそれらの関連プロパティデータタイプを各サーバ側制御オブジェクトの一意の階層識別子を用いて指定することもできるし、あるいは、XML関連データフォーマットを用いて、搬送可能状態構造のデータを表すこともできる。さらに、公知の暗号化および圧縮技術を用いて、安全性を確保し、搬送可能状態構造のサイズを減らすこともできる。
【００７０】
図８は、本発明のある実施形態における図６のASP＋リソースに対応する制御オブジェクト階層および図７の##VIEWSTATEフィールド値を示す。制御オブジェクト階層の制御オブジェクトコンポーネントではないが、ファイルチェックブロック８０２を図７に示すような##VIEWSTATEフィールド構造に基づく階層の最上レベルとして示している。ファイルチェックブロック８０２のより詳細な説明は、図９に関して行われている。あるいは、ファイルチェックブロック８０２を省いたり、ページ制御オブジェクト８０４に対応する階層レベルと一緒にすることも本発明の範囲内であると考えられる。
【００７１】
ページ制御オブジェクト８０４が、制御オブジェクト階層の最上レベルとして例示され、結果のウェブページ自体に対応する特別制御オブジェクトに対応する。本発明のある実施形態では、ページオブジェクト８０４を例示させるための宣言（すなわち、"runat = server"属性を有する宣言）は特に必要とされない。
【００７２】
次の階層レベルにおいて、制御オブジェクト８０６、８０８、８１０および８１２が、ページオブジェクト８０４に含まれる、または階層的に関連のある子制御オブジェクトとして例示されている。１つの階層レベルの各制御オブジェクトはASP＋リソースにおける上から下への順番に基づきゼロベースのインデックスを与えられている。例えば、リテラル制御オブジェクト階層８０６は、図６のASP＋リソース６００のライン１における"<html>"テキストおよび付随のホワイトスペースに対応している。したがって、リテラル制御オブジェクト８０６は、「０」というインデックスを与えられている。本発明の上記実施形態では、ライン２〜１２から拡張されるコード宣言ブロックは、対応する制御オブジェクトの例示にはならない。リテラル制御オブジェクト８０８は、図６のASP＋リソース６００のライン１３における"<body>"テキストおよび付随のホワイトスペースに対応している。したがって、リテラル制御オブジェクト８０８は、「１」というインデックスを与えられている。フォーム制御オブジェクト８１０は、図６のASP＋リソース６００のライン１４〜１６におけるフォーム宣言に対応している。したがって、フォーム制御オブジェクト８１０は「２」というインデックスを与えられている。リテラル制御オブジェクト８１２は、図６のASP＋リソース６００のライン１７および１８における終了タグおよび付随のホワイトスペースに対応している。したがって、リテラル制御オブジェクト８１２は、「３」というインデックスを与えられている。
【００７３】
次の階層レベルにおいて、制御オブジェクト８１４、８１６および８１８が、フォームオブジェクト８１０に含まれる、または階層的に関連のある子制御オブジェクトとして例示されている。リテラル制御オブジェクト階層８１４は、図６のASP＋リソース６００のライン１５におけるスパン宣言に先立つホワイトスペースに対応している。したがって、リテラル制御オブジェクト８１４は、ASP＋リソースにおけるこの階層レベルとの関連において遭遇する第１のリテラルテキスト（ホワイトスペースであるが）であるから、「０」というインデックスを与えられている。同様に、リテラル制御オブジェクト８１８は、図６のASP＋リソース６００のライン１５におけるスパン宣言に続くホワイトスペースに対応している。したがって、リテラル制御オブジェクト８１８は、「２」というインデックスを与えられている。ラベル制御オブジェクト８１６は、図６のASP＋リソース６００のライン１５における宣言に対応している。したがって、ラベル制御オブジェクト８１６は「１」というインデックスを与えられている。
【００７４】
図９は、図７の##VIEWSTATEフィールド値の入れ子版を示す。本明細書中において##VIEWSTATEフィールド値の階層的性質の説明を簡単にするために入れ子版を記載している。入れ子版９００のライン１は、図８の入れ子になったファイルチェックブロック８０２の始まりに対応する。ライン１は、２要素アレイを特定し、第１の要素としてライン２のストリングと第２の要素としてライン３の２要素アレイを含んでいる。ライン２はファイルチェックコードを表すストリング値を特定する。本発明のある実施形態では、ファイルチェックコードは、関連のASP+リソース（例えば、図６のASP+リソース）のハッシュ値として計算される。ライン３で始まるアレイは、次の階層レベルの状態情報の始まり、すなわち図８のページ制御オブジェクト８０４を表している。ライン４のゼロ値は、ページオブジェクトそれ自体のプロパティに関する状態情報を保持することができるライン３の２要素アレイの第１の要素を表している。上記実施形態において、ページオブジェクトの状態情報は記録されていないので、その値は、"null"（ゼロ）である。
【００７５】
ライン５に示すように、ライン３の２要素アレイの第２の要素は、ページ制御オブジェクトの子供（すなわち、図８の制御オブジェクト８０６、８０８、８１０および８１２）の状態情報を含むハッシュテーブルを示している。ライン５のハッシュテーブルは、タグ<H1>に「１」と示す１つのハッシュテーブルエントリを含む。ライン６および８の<K>、</K>タグは、ハッシュテーブルエントリの鍵、すなわち、図８のフォーム制御オブジェクト８１０のインデックスに相当するライン７に示す整数値「２」を含む。図９に示す##VIEWSTATE値は、図８のリテラル制御オブジェクト８０６、８０８および８１２の状態情報を含んでいない。あるいは、状態情報を保存した他の制御オブジェクトまたは子制御オブジェクトが、フォーム制御オブジェクト８１０として同じ階層レベルに存在する場合は、このレベルのハッシュテーブルは、このレベルの追加の制御オブジェクトを収納するための１つ以上のハッシュテーブルエントリを有していてもよく、各追加ハッシュテーブルエントリへの鍵は、対応する制御オブジェクトのインデックスであり得る。
【００７６】
ハッシュテーブルエントリ値は、ライン９および２４の<V>、</V>タグに含まれ、フォーム制御オブジェクトとその子オブジェクトの状態を規定する別の２要素アレイを含む。そのアレイの第１の要素は、フォーム制御オブジェクト（すなわち、本実施形態においてゼロ値で表されている）の保存された状態情報を特定する。
【００７７】
第２の要素は、フォーム制御オブジェクトの子オブジェクトの状態情報を表す別の１エントリハッシュテーブルを特定する。ライン１３および１５の<K>、</K>タグは、１つのハッシュテーブルエントリの鍵、すなわち、図８のラベル制御オブジェクト８１６のインデックスに相当するライン１４に示す整数値「１」を含む。図９に示す##VIEWSTATE値は、図８のリテラル制御オブジェクト８１４および８１８の状態情報を含んでいない。
【００７８】
ハッシュテーブルエントリ値は、ライン１６および２１の<V>、</V>タグに含まれ、ラベル制御オブジェクトとその子オブジェクトの状態を規定する別の２要素アレイを含む。そのアレイの第１の要素は、ストリング値が、ライン１８で特定された"InnerHtml=5/16/99"である、ラベル制御オブジェクトのプロパティの保存された状態情報を特定する。プロパティ名、"InnerHtml"は、状態値"5/16/99"と等しく、「ストリング」タイプである。セミコロンは、所与のプロパティの状態値の終了を表す。ライン１８のラベル制御オブジェクトが、状態が保存された追加のプロパティを含んでいる場合、各状態データ値およびその関連プロパティは、終了セミコロンによって境界が定められる。アレイの第２の要素と同じようにライン１９に示されたゼロ値は、ラベル制御オブジェクトが子オブジェクトを含んでいないことを示す。ライン２０〜２７は図９の先行する開始タグの終了タグである。
【００７９】
別の実施形態では、有限オブジェクト直列化(Limitted Object Serialization (LOS))フォーマットと呼ばれる直列化フォーマットを搬送可能状態構造に用いる。一般に、LOSフォーマットは、各ハッシュエントリが、制御オブジェクトのプロパティの状態情報か、子制御オブジェクトの入れ子のハッシュテーブルのいずれかを含んでいる各制御オブジェクトの名前／値対のハッシュテーブルを特定する。
【００８０】
表２は、LOSフォーマットの文法の一例を示す。
【００８１】
【表２】
0003954809.tif 000003
【００８２】
LOSフォーマットの使用方法の第１の例として、以下のエントリを考える。
h<name1;value1;name2;value with \; escaped \> \"characters\">
これは、２対の名前／値のハッシュテーブルを規定し、ここでの値はすべてストリングである。第１の値は、"name1" という名で、ストリング"value1"と等しい。第２の値は、"name2"という名で、ストリング"value with ; escaped > "characters""と等しい。
【００８３】
LOSフォーマットの使用方法の第２の例として、以下のエントリを考える。
h<control1;h<1;50<blue>;text;hello>control2;h<1;50<red>;
control3;>\t50System.Drawing.Color\n1BackColor
これは、"control1"、"control2"および"control3"という３つのハッシュエントリを有するハッシュテーブルを規定する。第１のハッシュエントリは、"control1"という名であり、名前／値対である２つのエントリを有する子ハッシュテーブルを含む。control1ハッシュテーブルの第１のエントリ名は、この例の最後に規定されている"BackColor"という名を参照するためのインデックス「１」を用いる。第１のエントリ値は、"blue"と等しくインデックス「５０」で特定されこの例の最後近くに規定されている"System.Drawing.Color"タイプである。control1ハッシュテーブルの第２のエントリの名前／値対は、名前"text"および値"hello"を含んでいる。"control2"のハッシュエントリは、"BackColor"という名を参照するためのインデックス「１」をここでも用いる１つのハッシュエントリを有する子ハッシュテーブルを含んでいる。この値は、"red"と等しく、"System.Drawing.Color"タイプである。"control3"のハッシュエントリは空である。上述の実施形態と同様の方法で、階層をハッシュテーブルの入れ子によって特定するが、階層識別子の使用を含む他の階層の記述方法も本発明の範囲内であると考えられる。
【００８４】
図１０は、本発明のある実施形態における搬送可能状態構造を受け取り、そこに記憶された状態情報を制御オブジェクト階層の制御オブジェクトにロードするプロセスフローチャートを示す。図示した実施形態では、少なくとも１つのサーバ側制御オブジェクトの少なくとも１つのプロパティが変化していない限り、搬送可能状態構造はサーバから送信されない（したがってクライアントによってサーバに戻されない）。このようなものであるので、図示したフローチャートは、状態情報の少なくとも１つの要素が、受信した搬送可能状態構造に存在すると仮定している。別の実施形態では、たとえ搬送可能状態構造に状態情報がなくても、搬送可能状態構造がサーバとクライアントとの間を往復するものもある。このような実施形態では、搬送可能状態構造に状態情報がない場合、状態管理プロセスを打ち切るよう判断処理（図示せず）が作動し得る。
【００８５】
受信処理１０００が、HTTPリクエストなどでクライアントから搬送可能状態構造を受信する。マーキング処理１００２は、サーバ階層のすべての制御オブジェクトの最初の状態指示を設定する。読出し処理１００４は、受信した搬送可能状態構造を読み出し、状態情報および対応するプロパティタイプを抽出する。
【００８６】
チェック処理１００６は、搬送可能状態構造のインテグリティチェックを行う（例えば、##VIEWSTATEMAC値を用いて）。本発明のある実施形態では、チェック処理１００６において、（１）搬送可能状態構造から受信インテグリティコードを読み出す；（２）搬送可能状態構造に含まれる少なくとも状態情報からそれ自体のインテグリティコードを計算する；（３）受信インテグリティコードと新たに計算したインテグリティコードを比較して、搬送可能状態構造が、クライアントへの往復の間に変造されているかどうかを判断する。搬送可能状態構造が、変造されていると判断された場合、サーバ側コードは、ロード処理を打ち切る、状態情報なしで処理を継続する、またはエラーとすることなどによってこの例外を扱うよう応答することができる。
【００８７】
検査処理１００８は、搬送可能状態構造に含まれるファイルチェックコードを検査する。本発明の実施形態では、検査処理１００８では、（１）##VIEWSTATEフィールドから受信したファイルチェックコードを読み出す；（２）少なくともサーバに記憶されたASP+リソースの内容からそれ自体のファイルチェックコードを計算する；（３）受信したファイルチェックコードと新たに計算したファイルチェックコードを比較して、搬送可能状態構造の状態情報は、サーバのASP+リソースの同じバージョンに対応するかどうかを判断する。検査処理１００８を用いて、サーバ上のASP+リソースが、クライアントへの搬送可能状態構造の往復の間に変化していないことを確認する。サーバ上のASP+リソースが変化した場合は、サーバは、受信した状態情報を破棄し、ロード処理を打ち切り、かつ／またはクライアントへエラーを送ったりする。ある実施形態では、最初の状態の制御オブジェクト階層を作成し、サーバがリクエストに対する処理を続ける前にロード処理を打ち切る。トラバース処理１０１０は、サーバ側制御オブジェクト階層のページ制御オブジェクトをトラバースする。
【００８８】
構文解析処理１０１２は、入れ子型##VIEWSTATEフィールドの制御オブジェクトに対応する制御オブジェクト階層の状態情報を構文解析する。第１の反復において、対応する制御オブジェクトは、トラバース処理１０１０においてトラバースされたページ制御オブジェクトである。次の反復において、対応する制御オブジェクトは、ページ制御オブジェクトの子孫制御オブジェクトであり、トラバース処理１０２８によって所在を明らかにされる。構文解析処理１０１２は、状態値を抽出し、当初解析されたときはストリングフォーマットであったその値を所与のプロパティタイプへと変換することができる。ロード処理１０１４は、##VIEWSTATE値から構文解析された状態情報を制御オブジェクトのプロパティへロードする。指示処理１０１６は、現在の制御オブジェクトの変化状態指示を設定する。この指示は、後に、当初の状態から状態が変化した制御オブジェクトの状態だけを保存することにより、搬送可能状態構造のサイズを最小にするために用いることができる。あるいは、すべての状態情報を保存してもよい。ポストバックデータのハンドリング、ポストバックイベントのハンドリングおよび制御オブジェクト階層でのデータ結合処理の間、制御オブジェクトの状態になされた変化もまた、個々の制御オブジェクトの変化状態指示を設定したことになり得る。しかし、本発明のある実施形態では、データ結合処理のために設定されたどんなデータ変化指示も、そのプロパティの状態が搬送可能状態構造に記録されないようにリセットされ、それによって、搬送可能状態構造のサイズをさらに減少させる。このようなプロパティの状態は、図５のデータ結合処理５１２で更新される結合関係によって特定されたデータに依存する。
【００８９】
判断処理１０１８において、現在の制御オブジェクトに追加の状態情報が存在する場合、処理は１０２２に進む。存在する場合、処理１０２２において、現在の制御オブジェクトにおける次の制御オブジェクトプロパティの状態情報を構文解析して、処理は１０１４に進む。判断処理１０１８において、現在の制御オブジェクトに追加の状態情報がない場合は、判断処理１０２０に進み、ここで、##VIEWSTATE値に他の制御オブジェクト状態情報がない場合は、処理１０２４に進む。判断処理１０２０において、状態が処理されていない追加の制御オブジェクトがある場合は、処理１０２６に進み、ここで、##VIEWSTATE値から次の制御オブジェクトの状態情報を構文解析する。トラバース処理１０２８では、処理１０２６で構文解析された新たな状態情報に対応する次の制御オブジェクトをトラバースする。その後、ロード処理１０１４に進む。本発明のある実施形態では、図１０の反復構文解析処理が、非直列化処理を実行する。
【００９０】
図１１は、本発明のある実施形態におけるクライアントへ送信する搬送可能状態構造へ制御オブジェクト階層の制御オブジェクトからの状態情報を保存するプロセスフローチャートを示す。初期化処理１１００は、搬送可能状態構造を初期化する。計算処理１１０２は、ASP+リソースの現在のバージョンに基づきファイルチェックコードを計算する。本発明の実施形態では、ファイルチェックコードは、ファイルの内容またはファイルの幾つかの特定されたコンポーネントを単にハッシュするなどの、ASP+リソース内容のハッシュアルゴリズム（例えば、MD5など）に基づく。ロード処理１１０４は、搬送可能状態構造に計算されたファイルチェックコードをロードする。トラバース処理１１０６は、制御オブジェクト階層のページオブジェクトをトラバースする。
【００９１】
本発明の実施形態において、サーバ側制御オブジェクトは、制御オブジェクト（およびその子オブジェクト）のプロパティ値を搬送可能状態構造に保存すべきかどうかを示す"MaintainState"プロパティを用いて作成することができる。保存する必要がない場合、トラバース処理１１０６は、このプロセスでサーバ側制御オブジェクトおよびその子オブジェクトをスキップすることができる。そうでなく、制御オブジェクトの状態を"MaintainState"プロパティに従い保持すべきなら、トラバース処理１１０６は制御オブジェクトをトラバースする。
【００９２】
判断処理１１０８により、処理は、読出し処理１１１５に進む。ここでは、制御オブジェクトプロパティから新たな状態値とそのタイプを読み出す。処理１１１０は、新たな状態値とそのタイプを記録し、処理１１１１に進む。この説明のために、現在の制御オブジェクト内にプロパティが存在しない場合、プロパティを##VIEWSTATEフィールドの"null"値で表す。現在の制御オブジェクトのプロパティが、依然として処理１１０８での当初の状態のままであれば、判断処理１１１１に進む。処理１１１１において現在の制御オブジェクト内に別のプロパティが存在する場合は、判断処理１１０８に進む。
【００９３】
処理１１１１において現在の制御オブジェクト内に他のプロパティが存在しない場合は、判断処理１１１２に進み、ここで、別の制御オブジェクトが階層に存在する場合はトラバース処理１１１４に進む。トラバース処理１１１４は、制御オブジェクト階層内の次の制御オブジェクトをトラバースし、判断処理１１０８に進み制御オブジェクトのプロパティにアクセスする。処理１１１２において、他の制御オブジェクトが階層に存在しない場合は、先の処理で得られた新たな状態情報（状態値タイプを含む）を直列化し、それらを搬送可能状態構造に記憶する直列化処理１１１６に進む。処理１１１８は、（MD5アルゴリズムを用いるなどして）インテグリティコードを計算し、処理１１２０は、例えば##VIEWSTATEMACフィールドでインテグリティコードを搬送可能状態構造に記憶する。インテグリティコード処理およびフィールドチェック処理は、任意であり、本発明の別の実施形態では省くことができる。処理１１２２は、例えば、制御オブジェクト階層によって生成されたレンダリングされたHTMLコードを含むHTTPリクエストなどでクライアントへ搬送可能状態構造を送信する。
【００９４】
本明細書中の本発明の実施形態は、１つ以上のコンピュータシステムの論理ステップとして実行される。本発明の論理処理は、（１）１つ以上のコンピュータシステムで実行処理されるプロセッサ実行ステップシーケンスとして、（２）１つ以上のコンピュータシステム内の相互接続された機械モジュールとして実行される。実行は選択の問題であり、本発明を実行するコンピュータシステムの性能要件に依存する。したがって、本明細書に記載の本発明の実施形態を構成する論理処理は、処理、ステップ、オブジェクトまたはモジュールと様々に表現することができる。
【００９５】
上記の明細書、実施例およびデータは、本発明の実施形態の構造および使用の完全な説明を提供している。本発明は、本発明の精神および範囲から逸脱することなく多数の形態で実施することができるので、本発明は添付の請求項にある。
【００９６】
【発明の効果】
以上のように本発明によれば、状態管理を行わないクライアント／サーバモデルにおいて、サーバ側制御オブジェクトの状態情報が２つのHTTPリクエストの間はサーバ側に保持されるのではなく、搬送可能な状態構造でクライアントとサーバ間を搬送されることになることから、適切なサーバ側制御オブジェクトによって、ウェブページに表示するクライアント側ユーザインタフェース要素を処理および生成することができ、動的コンテンツが対象となるウェブページの開発をより容易に行うことが可能となる。
【図面の簡単な説明】
【図１】  本発明のある実施形態におけるクライアントに表示するウェブページコンテンツを動的に生成するウェブサーバを示す。
【図２】  本発明のある実施形態におけるサーバ側制御オブジェクトを用いてクライアント側ユーザインタフェース要素の処理およびレンダリングのための処理のフローチャートを示す。
【図３】  本発明のある実施形態で用いるウェブサーバのモジュールの一例を示す。
【図４】  本発明のある実施形態を実行するのに有用なシステムの一例を示す。
【図５】  本発明のある実施形態におけるページオブジェクトの処理を表すプロセスフローチャートを示す。
【図６】  本発明のある実施形態における動的コンテンツファイル（例えば、ASP+リソース）の部分の一例を示す。
【図７】  図６の動的コンテンツファイルの部分の一例に応じて、１つ以上のサーバ側制御オブジェクトによって生成された結果コードを示す。
【図８】  図６のASP+リソースに対応する制御オブジェクト階層および図７の##VIEWSTATEフィールド値を示す。
【図９】  図７の##VIEWSTATEフィールド値の入れ子版を示す。
【図１０】  本発明のある実施形態における搬送可能状態構造を受け取り、それに格納された状態情報を制御オブジェクト階層の制御オブジェクトへロードするプロセスフローチャートを示す。
【図１１】  本発明のある実施形態における制御オブジェクト階層の制御オブジェクトからの状態情報を搬送可能状態構造へ保存しクライアントへ送信するプロセスフローチャートを示す。
【符号の説明】
１００  クライアント
１０２  ブラウザ
１０４  ウェブページ
１０６  ユーザ名
１０８  追加
１１０  削除
１１２  HTTPレスポンス
１１４  HTTPリクエスト
１１６、３００  ウェブサーバ
１１８、３０４  HTTPパイプライン
１２０  ハンドラ
１２２  静的コンテンツ資源
１２４  動的コンテンツ資源
１２６  サーバ側制御クラスライブラリ
１２８  クライアント側制御クラスライブラリ
１３０、３３０  非UIサーバコンポーネント
３０８  ページファクトリ
３１０  ASP+リソース
３１２  制御クラスライブラリ
３１４  ページオブジェクト
３１８  テキストボックスオブジェクト
３２０、３２２  ボタンオブジェクト
４００  コンピュータ
４０４  メモリ
４１２  ハードディスクドライブ
４１４  磁気ディスクドライブ
４１６  着脱可能記憶媒体
４１８  光ディスクドライブ
４１９  光ディスク
４２０、４２２、４２４  Ｉ／Ｆ
４２６  オペレーティングシステム
４２８  アプリケーションプログラム
４３０  プログラムモジュール
４３２  プログラムデータ
４３４  キーボード
４３６  マウス
４４０  シリアルポートインタフェース
４４２  モニタ
４４６  リモートコンピュータ
４５２  ネットワークアダプタ
４５４  モデム
８０２  ファイルチェック
８０４  ページ
８０６、８０８、８１２、８１４、８１８  リテラル
８１０  フォーム
８１６  ラベル
【図１】
0003954809.tif 000004
【図２】
0003954809.tif 000005
【図３】
0003954809.tif 000006
【図４】
0003954809.tif 000007
【図５】
0003954809.tif 000008
【図６】
0003954809.tif 000009
【図７】
0003954809.tif 000010
【図８】
0003954809.tif 000011
【図９】
0003954809.tif 000012
【図１０】
0003954809.tif 000013
【図１１】
0003954809.tif 000014