この記事の内容は、Spring MVC が HTTP リクエストに応答できる理由についてです。 (理由の詳細な説明)、それが必要な友人に役立つことを願っています。
多くの Java インタビュアーは次の質問を好みます:
Spring MVC プロジェクト ファイルでは、開発者は独自のサーブレットを開発せず、アノテーションを通じてメソッド ホーム関数を定義しただけです。 @RequestMapping /mvc/test1 へのリクエストに応答します。
URL http://localhost:9098/MavenSandbox/mvc/test1 を使用してテストすると、home メソッドによって返される文字列を確認できます。 . この背後にあるものはどのように機能するのでしょうか?
#私たちは独自の調査を通じて答えます。上記のコードの 53 行目にブレークポイントを設定します。 URL http://localhost:9098/MavenSandbox/mvc/test1 に再度アクセスすると、ブレークポイントがトリガーされます。コール スタックを観察すると、スタック フレーム DispatcherServlet.doService(HttpServletRequest, HttpServletResponse) があることがわかります。このサーブレットは、@RequestMapping アノテーションが付けられたメソッドの戻り文字列を HttpServletResponse に追加する役割を果たします。これが、ブラウザーで戻り文字列を確認できる理由です。
DispatcherServlet.doService の HttpServletResponse に予期した出力文字列が含まれているかどうかを確認してみましょう。デバッガーで応答変数を展開します:
##response->outputBuffer->bb->buff、これは buff String 配列で確認できます。バッファ:
104 は H の ASCII コード、101 は e の ASCII コード、108 は l の ASCII コードです。応答には、ホーム メソッドで開発者によって返された文字列が含まれています。 こんにちは、これは最も単純な例です。
最後に、DispatcherServlet はどこから来たのでしょうか?
Eclipse デバッガ内にある、Spring フレームワークの標準サーブレットです:
org.springframework.web.servlet.DispatcherServlet
##このサーブレットは、WEB-INF フォルダー内の web.xml ファイル内のサーブレットとまったく同じです。
したがって、インタビュアーへの答えは次のとおりです。Spring MVC フレームワークには依然としてサーブレットが必要ですが、このサーブレットは Spring フレームワークによって提供されており、アプリケーション開発者が繰り返し実装する必要はありません。以上がSpring MVC が HTTP リクエストに応答できるのはなぜですか? (詳しい理由の説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。