213

この画像 (ここから取得したもの) では、HTTP要求がDispatcher Servlet に何かを送信します。

ここに画像の説明を入力

私の質問は、Dispatcher Servletは何をするのですか?

Webページからスローされた情報を取得してコントローラーにスローするようなものですか?

4

8 に答える 8

226

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リクエストの処理、サーブレットに入る可能性のあるものすべてに対して同じことができます。

于 2010-05-04T22:59:21.293 に答える
91

Spring MVC では、すべての受信リクエストが単一のサーブレットを通過します。このサーブレット - DispatcherServlet- がフロントコントローラーです。フロントコントローラーは、Webアプリケーション開発における代表的なデザインパターンです。この場合、単一のサーブレットがすべてのリクエストを受け取り、それらをアプリケーションの他のすべてのコンポーネントに転送します。

のタスクはDispatcherServlet、特定の Spring MVC コントローラーにリクエストを送信することです。

通常、多くのコントローラがありDispatcherServlet、ターゲット コントローラを決定するために次のマッパーのいずれかを参照します。

構成が実行されていない場合、デフォルトで と が使用DispatcherServletされます。BeanNameUrlHandlerMappingDefaultAnnotationHandlerMapping

ターゲット コントローラが識別されると、 はDispatcherServletそれにリクエストを送信します。DispatcherServletコントローラーは、要求に従っていくつかの作業を実行し (またはそれを他のオブジェクトに委譲し)、モデルとビューの名前を使用して に戻ります。

ビューの名前は単なる論理名です。次に、この論理名を使用して実際のビューを検索します (コントローラーと特定のビューとの結合を避けるため)。次にDispatcherServlet、 を参照しViewResolver、ビューの論理名をビューの特定の実装にマップします。

のいくつかの可能な実装は次のViewResolverとおりです。

DispatcherServlet結果を表示するビューを決定すると、それが応答としてレンダリングされます。

最後に、はオブジェクトをクライアントにDispatcherServlet返します。Response

于 2015-11-18T19:02:40.180 に答える
49

DispatcherServletフロントコントローラーパターンのSpring MVCの実装です。

こちらのSpringドキュメントの説明を参照してください。

基本的には、着信要求を受け取り、その要求の処理を多数のハンドラーの 1 つに委譲するサーブレットであり、そのマッピングはDispatcherServlet構成で固有です。

于 2010-05-04T22:50:06.193 に答える
6

DispatcherServletSpring MVC ですべてを処理するようなものです。

Web コンテナの起動時:

  1. DispatcherServletinit()メソッドを呼び出すことによってロードおよび初期化されます
  2. 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 を検索します。ここで、コントローラーは論理名 (ビュー) を返します。次に、この論理名が によって送信さDispatcherServletHandlerMappingます。次に、プレフィックスとサフィックスを追加してビューの完全な場所を提供するようにDispatcherServlet指示し、クライアントにビューを提供します。ViewResolverDispatcherServlet

于 2014-12-07T17:26:44.467 に答える
0

Dispatcher Controller が図に表示されており、すべての着信要求は、フロント コントローラーとして機能する Dispatcher サーブレットによってインターセプトされます。ディスパッチャ サーブレットは、XML ファイルからハンドラ マッピングへのエントリを取得し、リクエストをコントローラに転送します。

于 2019-02-19T05:53:42.493 に答える