Spring によるリクエスト処理
クライアントは Web アプリケーション内のリソースをリクエストします。前のセクションで説明したように、Web コンテナはすべての MVC リクエストを Spring DispatcherServlet に送信します。Spring フロントコントローラはリクエストを傍受し、(Spring コンフィギュレーションファイルまたはアノテーションで設定されている) ハンドラマッピングに基づいて適切なハンドラを検索します。つまり、ハンドラマッピングを使用して、クライアントからのリクエストがハンドラにマッピングされます。ハンドラアダプタを利用して、Spring フロントコントローラはハンドラにリクエストを渡します。
Windchill では、2 つのハンドラマッピングを使用します。
RequestMappingHandlerMapping - タイプまたはメソッドレベルの RequestMapping アノテーションによって表される HTTP パスに基づいてハンドラをマッピングします。このマッピングは mvc.xml ファイル内の <mvc:annotation-driven /> エントリとともに設定します。
SimpleUrlHandlerMapping - URL からリクエストハンドラ Bean にマッピングします。マッピングは <Windchill>\codebase\config\mvc\ にあるプロパティファイルで指定されています。
例 /servlet/WizardServlet* = wizardController
マッピングが見つかると、設定されているアダプタから適切なハンドラアダプタが検索されます。Windchill では、3 種類のハンドラアダプタを使用します。
RequestMappingHandlerAdapter - HTTP パス、HTTP メソッド、および RequestMapping アノテーションによって表されるリクエストパラメータに基づいて、ハンドラメソッドをマッピングします。
SimpleControllerHandlerAdapter - プレーンコントローラを使用するアダプタ (Controller インタフェースによって実装されるか AbstractController クラスによって拡張されるタイプ)
GwtHandlerAdapter - GWT クライアントリクエストを処理するアダプタ (ハンドラは RemoteServiceServlet)
Windchill 11.1 M020 では、Spring Framework がバージョン 5.0.6 にアップグレードされました。非アノテーションベースのコントローラが別個のアノテーションベースのコントローラに置き換えられました。
アップグレードされたバージョンの Spring Framework では、次のガイドラインに従う必要があります。
@Controller annotation が付いたすべての Spring クラスが、同じクラス内に @RequestMapping による URL マッピングを持っている必要があります。SimpleUrlHandlerMapping または BeanNameUrlHandlerMapping でコントローラを選択してから @RequestMapping アノテーションに基づいてメソッドを絞り込むことはサポートされていません。
@RequestMapping メソッドは新規サポートクラスで一意にマッピングされなければなりません。メソッド名をフォールバックメカニズムとして使用して、明示的なパスマッピング URL パスがない 2 つの @RequestMapping メソッドのあいまいさを除き、そうでない場合には HTTP メソッドなどによって等しく対応付ける、ということはできません。
単一のデフォルトメソッドが明示的なパスマッピングを持っていなければなりません。以前にこのメソッドは、その他のコントローラ一致が見つからない場合のリクエスト処理に使用されていました。新しいサポートクラスでは、対応するメソッドが見つからない場合には 404 エラーが返されます。明示的なパスマッピングがない単一のデフォルトメソッドを持つことはできません。
ハンドラ
ハンドラは、リクエストを処理可能な Bean です。コンポーネント com.ptc.mvc.components.ComponentController 構築のリクエストを処理するため、OOTB ハンドラが提供されています。このハンドラは ModelAndView (org.springframework.web.servlet.ModelAndView) を準備し、これは DispatcherServlet によって処理可能です。
コンポーネントを構築するには、その説明とデータを表す必要があります。これらのコンポーネントを提供する、ビルダーという概念が導入されました。コンポーネントの説明は ComponentConfig によって表され、ComponentConfigBuilder がこれらを提供します。コンポーネントのデータは ComponentData によって表され、ComponentDataBuilder がこれらを提供します。
ComponentConfigComponentData によって UI に表示されるコンポーネント情報が定義され、これらは ComponentDefintion によって表されます。これは MVC パラダイムにおけるモデルであり、そこでは ComponentController がコントローラとなります。
ビルダーの検索方法
コンポーネントを構築する一般的な MVC リソースは ptc1/<handler_key>/<componentId> です。ここで、
handler_key はハンドラへのリクエストのマッピングに使用されます。
componentId は構築するコンポーネントを表します。
ComponentController は、指定された componentId の各ビルダーを検索する ComponentBuilderResolver によって注入されます。
ComponentController の内部コンポーネント
いくつかの重要な ComponentController の内部コンポーネント
ComponentBuilderResolver は、リソースで指定されている componentIdComponentConfigBuilderComponentDataBuilder を検索します。
defaultMappings は各種 ComponentConfig のデフォルトビューを定義します。
ComponentParamsFactory はリクエストとレスポンスから ComponentParams を作成し、これがビルダーで使用可能になります。
ビルダーは ComponentConfigComponentData を提供し、ここからモデル ComponentDefinition が作成されます。ModelAndViewComponentDefinition によって構成され、ビュー情報が ComponentConfig または提供されている defaultMapping から取得されます。
緑色で示されているコンポーネントは Windchill クライアントアーキテクチャ (例: JCA) 固有のコンポーネントです。黒色で示されているコンポーネントは、コンポーネントオーナーによって提供されるコンポーネントです。
これは役に立ちましたか?