Spring MVC が単なるフレームワークではなく、一種のレストランであると想像してください。あなたがレストランに来ると (HTTP リクエストを送信すると)、魔法が始まります。これが Spring MVC の世界でどのように起こるかです:
レストランに入ると、DispatcherServlet が警備されています
Spring MVC レストランに入ったところを想像してみてください。しかし、テーブルに着く前に、ドアマンの DispatcherServlet が迎えてくれます。彼はフロントエンドオフィサーに擬人化され、すべての注文を管理します。あなたの HTTP リクエストは、ドアマンへの最初の挨拶のようなものです。つまり、おいしいものが欲しいのです。
DispatcherServlet は料理自体を準備するのではなく、単にリクエストを目的の「シェフ」、つまり料理を準備するコントローラーに渡すだけです。ただし、それについては少し後ほど説明します。まず、ドアマンがメニューをチェックして、どのシェフがご希望の料理を提供できるかを確認します。
レシピを探しているハンドラー - HandlerMapping
あなたが「おいしいものが食べたい!」と言った瞬間に、ドアマン (勇敢な DispatcherServlet) がすぐにキッチンに駆けつけるわけではありません。いいえ、最初に彼は HandlerMapping を開きます。そこには、考えられるすべてのレストラン料理とそれらを準備できるシェフがいます。
あなたは、たとえばケーキを頼みます。ドアマンはメモを見て、シェフ ジョンが ChefController からケーキを作っていることを発見しました。
ドアマンは注文をキッチンに送信します - HandlerAdapter
ドアマンが適切なシェフを見つけると、アシスタントである HandlerAdapter を使用して、注文を梱包し、キッチンからシェフに渡すのを手伝います。まるでドアマンが「ジョン、お客様にケーキを作って、早く来てね!」とささやいているかのようです
シェフが料理を準備します – コントローラー
現在はジョンシェフが引き継いでいます。彼は料理を作る私たちのコントローラーです。クライアントのリクエストに応じて、さまざまなケーキを作ることができます。たとえば、リクエストが GET の場合、ジョンは単に既製のケーキを表示する (冷蔵庫から取り出す) ことができます。リクエストが POST の場合は、おそらく生クリームケーキをリクエストしたので、ジョンが料理を始めます。
例:
@GetMapping("/cakes")
パブリック リスト
return List.of("ナポレオン", "ティラミス", "チーズケーキ");
}
このシェフはためらうことなく、すぐにケーキのリストを出してくれます!
皿の装飾 - ViewResolver
料理の準備ができたら、美しく盛り付ける必要があります。ここで ViewResolver が活躍します。彼は皿のデザイナーのようなもので、その料理がどのような形でクライアントに提供されるかを決定します。たくさんの材料を見るだけではなく、美しくデコレーションされたケーキが必要です!
ViewResolver は、ケーキをゴールデン プレート (JSP) で提供するか、持ち帰りを注文した場合は箱 (JSON) で提供するかを決定できます。
出来上がり! テーブル上の料理 - HTTP レスポンス
ようやく料理が完成し、提供されます。クライアント (ブラウザ) はレストランから応答を受け取ります。注文に応じて、これはケーキを含む HTML ページになるか、テイクアウト アプリで注文した場合は JSON オブジェクトになります。
たとえば、シェフのジョンはケーキのリストを JSON で送信することにしました。
@GetMapping("/cakes")
@ResponseBody
パブリック リスト
return List.of("ティラミス", "ナポレオン", "エクレア");
}
クライアントはcakesでJSONを受け取り、人生がより良くなりました!
何か問題が発生した場合はどうなりますか? — 例外処理
他のレストランと同様に、時には問題が発生することがあります。たとえば、突然シェフのジョンがケーキを床に落としてしまったとします。 Spring MVC の世界では、これは例外に相当します (リクエストを処理できなかったなど)。
しかし、心配しないでください。Spring Restaurant には、ExceptionHandler と呼ばれる特別なウェイターがいます。すぐに対応し、お詫びや新しい注文を届けてくれます。
@ExceptionHandler(NoCakesAvailableException.class)
public ResponseEntity
return new ResponseEntity<>("申し訳ありませんが、ケーキはすべてなくなりました!", HttpStatus.NOT_FOUND);
}
そうすれば、突然ケーキがなくなっても、彼らはすべてが終わったと言って許しを請うでしょう。
結論
Spring MVC は、明確に構造化されたサービス システムを備えたレストランのようなものであることがわかりました。ここでは、ドアマン (DispatcherServlet) が注文を受け取り、料理を準備する (リクエストを処理する) 適切なシェフ (Controller) を見つけ、ウェイター (HandlerAdapter と ViewResolver) が美しく表現された結果を提供します。何か問題が発生した場合でも、ExceptionHandler は常にバックアップの準備ができています。
以上が春のMVCレストランの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。