使用する
このセクションでは、ICF(インターネット通信フレームワーク)のサーバーアーキテクチャにおけるソフトウェア層の構造について説明します。サーバー機能では、ICFは、対応するアプリケーションを使用して要求への応答を作成します。
ここで説明するシナリオでは、クライアント(Webブラウザーなど)がサーバーにHTTP要求を送信します。ICFはリクエストをアプリケーションに転送します。次に、アプリケーションは要求されたデータを収集し、応答としてICFを介してクライアントに送り返します。その後、応答データをブラウザに表示したり、さらに処理したりできます。
プロセス:
-
要求はインターネットコミュニケーションマネージャー(ICM)に送信されます(1)。ICMは、URL(目的のアプリケーション)によって識別されるリソースがSAP NetweaverApplicationServerのABAPスタックまたはJavaスタックのどちらで実現されるかを決定します。
-
アプリケーションがABAPアプリケーションの場合、要求はタスクハンドラ(2)に転送されます。
-
次に、タスクハンドラはICFコントローラを起動します。これは、汎用モジュールHTTP_DISPATCH_REQUEST (3)によって実現されます。
-
ICFコントローラは、ABAPクラスCL_HTTP_SERVER (4)によって実装されるICFマネージャに要求を送信します。ここでは、サーバー制御ブロックが作成されます。徐々に、このブロックは、応答を含む要求のすべてのデータを格納します。
-
サーバー制御ブロックが作成されると、要求データはICM (5)によって要求されます。
-
次に、ICMは要求データをICFマネージャー(6)に送信し、サーバー制御ブロックの要求属性に格納されます。
-
次にリクエストを処理する特別なHTTPリクエストハンドラーは、ICFコントローラーのURLによって決定されます(7)。URLはパスコンポーネントに分割されます。
-
HTTPリクエストハンドラーが決定されると、クライアントは認証されます(8)。
-
認証が成功すると、リクエストは1つ以上のHTTPリクエストハンドラによって処理されます。これを行うために、ICFコントローラ(汎用モジュールHTTP_DISPATCH_REQUEST)は制御をHTTPリクエストハンドラ(9)に渡します。これらの各ハンドラーは、インターフェースIF_HTTP_EXTENSIONを実装します。特定のHTTPリクエストハンドラの特別なプロパティは、メソッドHANDLE_REQUEST()の実装で定義されます。
-
HTTPリクエストハンドラーは、最初にサーバーコントロールブロック(属性rRequest)からリクエストオブジェクトのコンテンツを取得します。このブロックは、ICFマネージャー(10)によって管理されます。これを行うために、ハンドラーはメソッドHANDLE_REQUEST()を使用します。
-
リクエストハンドラは、アプリケーションと柔軟に対話できます(11)。たとえば、既存のABAPプログラムを呼び出したり、データベースにアクセスしたりできます。
-
処理中、HTTPリクエストハンドラーは、Response属性にデータを設定することで応答オブジェクトにデータを入力できます(12)。
-
HTTP要求ハンドラーがすべてのタスクを実行すると、制御をICFコントローラー(汎用モジュールHTTP_DISPATCH_REQUEST)に戻します(13)。
-
ICFコントローラー(汎用モジュールHTTP_DISPATCH_REQUEST)が再び制御できるようになりました。コントローラは、ICFマネージャ(14)にサーバー制御ブロックデータを要求します。
-
データは内部メモリ表現からHTTP形式にシリアル化され、HTTP応答(15)でICFコントローラーに送信されます。
-
ICFコントローラーはデータをタスクハンドラーに渡し、タスクハンドラーはデータをICMに渡し、ICMはデータをクライアントに渡します(16)。ここでは、たとえば、データをHTMLページとして表示できます。
詳しくは
HTTPリクエストハンドラ、サービス、およびログオン手順の詳細については、以下を参照してください。