この画像 (ここから取得したもの) では、HTTP要求がDispatcher Servlet に何かを送信します。
私の質問は、Dispatcher Servletは何をするのですか?
Webページからスローされた情報を取得してコントローラーにスローするようなものですか?
この画像 (ここから取得したもの) では、HTTP要求がDispatcher Servlet に何かを送信します。
私の質問は、Dispatcher Servletは何をするのですか?
Webページからスローされた情報を取得してコントローラーにスローするようなものですか?
DispatcherServletの仕事は、着信 URI を取得し、ハンドラー (通常はコントローラークラスのメソッド) とビュー (通常は JSP) の適切な組み合わせを見つけて、その場所で見つかるはずのページまたはリソースを形成することです。
私は持っているかもしれません
/WEB-INF/jsp/pages/Home.jsp
およびクラスのメソッド
@RequestMapping(value="/pages/Home.html")
private ModelMap buildHome() {
return somestuff;
}
Dispatcher サーブレットは、ブラウザーがページを要求したときにそのメソッドを呼び出し、その結果を一致する JSP ファイルと組み合わせて html ドキュメントを作成することを「知っている」ビットです。
これを実現する方法は、構成と Spring のバージョンによって大きく異なります。
また、最終結果が Web ページでなければならない理由もありません。RMIエンドポイントの検索、 SOAPリクエストの処理、サーブレットに入る可能性のあるものすべてに対して同じことができます。
Spring MVC では、すべての受信リクエストが単一のサーブレットを通過します。このサーブレット - DispatcherServlet
- がフロントコントローラーです。フロントコントローラーは、Webアプリケーション開発における代表的なデザインパターンです。この場合、単一のサーブレットがすべてのリクエストを受け取り、それらをアプリケーションの他のすべてのコンポーネントに転送します。
のタスクはDispatcherServlet
、特定の Spring MVC コントローラーにリクエストを送信することです。
通常、多くのコントローラがありDispatcherServlet
、ターゲット コントローラを決定するために次のマッパーのいずれかを参照します。
BeanNameUrlHandlerMapping
;ControllerBeanNameHandlerMapping
;ControllerClassNameHandlerMapping
;DefaultAnnotationHandlerMapping
;SimpleUrlHandlerMapping
.構成が実行されていない場合、デフォルトで と が使用DispatcherServlet
されます。BeanNameUrlHandlerMapping
DefaultAnnotationHandlerMapping
ターゲット コントローラが識別されると、 はDispatcherServlet
それにリクエストを送信します。DispatcherServlet
コントローラーは、要求に従っていくつかの作業を実行し (またはそれを他のオブジェクトに委譲し)、モデルとビューの名前を使用して に戻ります。
ビューの名前は単なる論理名です。次に、この論理名を使用して実際のビューを検索します (コントローラーと特定のビューとの結合を避けるため)。次にDispatcherServlet
、 を参照しViewResolver
、ビューの論理名をビューの特定の実装にマップします。
のいくつかの可能な実装は次のViewResolver
とおりです。
BeanNameViewResolver
;ContentNegotiatingViewResolver
;FreeMarkerViewResolver
;InternalResourceViewResolver
;JasperReportsViewResolver
;ResourceBundleViewResolver
;TilesViewResolver
;UrlBasedViewResolver
;VelocityLayoutViewResolver
;VelocityViewResolver
;XmlViewResolver
;XsltViewResolver
.がDispatcherServlet
結果を表示するビューを決定すると、それが応答としてレンダリングされます。
最後に、はオブジェクトをクライアントにDispatcherServlet
返します。Response
DispatcherServlet
フロントコントローラーパターンのSpring MVCの実装です。
こちらのSpringドキュメントの説明を参照してください。
基本的には、着信要求を受け取り、その要求の処理を多数のハンドラーの 1 つに委譲するサーブレットであり、そのマッピングはDispatcherServlet
構成で固有です。
DispatcherServlet
Spring MVC ですべてを処理するようなものです。
Web コンテナの起動時:
DispatcherServlet
init()
メソッドを呼び出すことによってロードおよび初期化されます
init()
ofは、すべての Bean を識別できるDispatcherServlet
ような命名規則で Spring 構成ドキュメントを識別しようとし
ます。"servlet_name-servlet.xml"
例:
public class DispatcherServlet extends HttpServlet {
ApplicationContext ctx = null;
public void init(ServletConfig cfg){
// 1. try to get the spring configuration document with default naming conventions
String xml = "servlet_name" + "-servlet.xml";
//if it was found then creates the ApplicationContext object
ctx = new XmlWebApplicationContext(xml);
}
...
}
そのため、通常DispatcherServlet
はリクエスト URI をキャプチャして に渡しHandlerMapping
ます。HandlerMapping
コントローラーのメソッドでマッピング Bean を検索します。ここで、コントローラーは論理名 (ビュー) を返します。次に、この論理名が によって送信さDispatcherServlet
れHandlerMapping
ます。次に、プレフィックスとサフィックスを追加してビューの完全な場所を提供するようにDispatcherServlet
指示し、クライアントにビューを提供します。ViewResolver
DispatcherServlet
Dispatcher Controller が図に表示されており、すべての着信要求は、フロント コントローラーとして機能する Dispatcher サーブレットによってインターセプトされます。ディスパッチャ サーブレットは、XML ファイルからハンドラ マッピングへのエントリを取得し、リクエストをコントローラに転送します。