Spring によるリクエスト処理
クライアントは Web アプリケーション内のリソースをリクエストします。前のセクションで説明したように、Web コンテナはすべての MVC リクエストを Spring DispatcherServlet に送信します。Spring フロントコントローラはリクエストを傍受し、(Spring コンフィギュレーションファイルで設定されている) ハンドラマッピングに基づいて適切なハンドラを検索します。つまり、ハンドラマッピングを使用して、クライアントからのリクエストがハンドラにマッピングされます。ハンドラアダプタを利用して、Spring フロントコントローラはハンドラにリクエストを渡します。
Windchill では、2 つのハンドラマッピングを使用します。
• DefaultAnnotationHandlerMapping - タイプまたはメソッドレベルの RequestMapping アノテーションによって表される HTTP パスに基づいてハンドラをマッピングします。
• SimpleUrlHandlerMapping - URL からリクエストハンドラ Bean にマッピングします。マッピングは <Windchill>\codebase\config\mvc\ にあるプロパティファイルで指定されています。
例 /servlet/WizardServlet* = wizardController
ハンドラが見つかると、設定されているアダプタから適切なハンドラアダプタが検索されます。Windchill では、3 種類のハンドラアダプタを使用します。
• SimpleControllerHandlerAdapter - プレーンコントローラを使用するアダプタ。
• AnnotationMethodHandlerAdapter - HTTP パス、HTTP メソッド、および RequestMapping アノテーションによって表されるリクエストパラメータに基づいて、ハンドラメソッドをマッピングします。
• GwtHandlerAdapter - GWT クライアントリクエストを処理するアダプタ (ハンドラは RemoteServiceServlet)。
ハンドラ
ハンドラは、リクエストを処理可能な Bean です。コンポーネント com.ptc.mvc.components.ComponentController 構築のリクエストを処理するため、OOTB ハンドラが提供されています。このハンドラは ModelAndView (org.springframework.web.servlet.ModelAndView) を準備し、これは DispatcherServlet によって処理可能です。
コンポーネントを構築するには、その説明とデータを表す必要があります。これらのコンポーネントを提供する、ビルダーという概念が導入されました。コンポーネントの説明は ComponentConfig によって表され、ComponentConfigBuilder がこれらを提供します。コンポーネントのデータは ComponentData によって表され、ComponentDataBuilder がこれらを提供します。
ComponentConfig と ComponentData によって UI に表示されるコンポーネント情報が定義され、これらは ComponentDefintion によって表されます。これは MVC パラダイムにおけるモデルであり、そこでは ComponentController がコントローラとなります。
ビルダーの検索方法
コンポーネントを構築する一般的な MVC リソースは ptc1/<handler_key>/<componentId> です。ここで、
• handler_key はハンドラへのリクエストのマッピングに使用されます。
• componentId は構築するコンポーネントを表します。
ComponentController は、指定された componentId の各ビルダーを検索する ComponentBuilderResolver によって注入されます。
ComponentController の内部コンポーネント
いくつかの重要な ComponentController の内部コンポーネント
• ComponentBuilderResolver は、リソースで指定されている componentId の ComponentConfigBuilder と ComponentDataBuilder を検索します。
• defaultMappings は各種 ComponentConfig のデフォルトビューを定義します。
• ComponentParamsFactory はリクエストとレスポンスから ComponentParams を作成し、これがビルダーで使用可能になります。
ビルダーは ComponentConfig と ComponentData を提供し、ここからモデル ComponentDefinition が作成されます。ModelAndView が ComponentDefinition によって構成され、ビュー情報が ComponentConfig または提供されている defaultMapping から取得されます。
緑色で示されているコンポーネントは Windchill クライアントアーキテクチャ (例: JCA) 固有のコンポーネントです。黒色で示されているコンポーネントは、コンポーネントオーナーによって提供されるコンポーネントです。