2011-10-24 5 views

答えて

8

hereを開始し、それが役立つかどうかを確認してください。そうでない場合は、より具体的な質問をしてください。また、Springドキュメントのthis sectionでは、デフォルトのアダプタと、それらがアノテーション設定にどのように関連しているかについて説明しています。

簡単に言えば、ハンドラアダプタは、要求を呼び出すコントローラ(およびメソッド)を決定します。

+0

リンクが壊れています。 – Vishnu

+0

@Vishnu 6年後に物事が変わると思います。 –

2

HandlerMappingは、単にメソッドをURLにマップします。ほとんどの初心者はこのオブジェクトを直接使用せず、代わりにRequestMappingを使用します。マップされたメソッドの戻り値の型(一般的に)は、SpringMVCが応答をレンダリングするために使用するビューを決定します。これだろう、

@RequestMapping(value={"/", "/home"}, method=RequestMethod.GET) 
public String getHome() { 
    return "homepage"; 
} 

方法は、ビューの文字列名を返します。

たとえば、次のようRequestMappingは、「/」または「/ホーム」、このメソッドを呼び出すようにするには、GETリクエストのためのHandlerMappingを生成します。通常は "/WEB-INF/views/homepage.jsp"に解決されます(もちろん、あなたのViewResolverに依存します)

初心者のために必要なオブジェクトを追加することができます。メソッド(Locale、HttpServletRequestなど)。詳細は、RequestMapping javadocを参照してください。

+1

彼はHandlerAdapterについて尋ねました。あなたはHandlerMappingについて説明しました –

9

HandlerMappingはメソッドをURLにマップするため、DispatcherServletは特定の要求によって呼び出されるメソッドを認識します。次にDispatcherServletHandlerAdapterを使用してメソッドを呼び出します。

なぜDispatcherServletはメソッドを直接呼び出さないのですか?注釈のように、メソッドを呼び出すための多くの方法があるので

、XMLなどHandlerAdapterデカップルDispatcherServletと呼び出されるアクション。

3

HandlerAdapterにアダプタがあり、その名前の一部はアダプタパターンから取得されます。アダプタは2つのオブジェクト間のブリッジのようなもので、HandlerAdapterはハンドラオブジェクトとディスパッチャサーブレットの間のブリッジです。

以下のHandlerAdapterソースコードから、Springのドキュメンテーションを参照してください。メソッドの1つは、ModelAndView戻り型のhandleメソッドです。すべてのHandlerAdapterは、このメソッドを実装してHttpServletRequestとHttpServletResponseをハンドラオブジェクトに委譲し、ハンドラオブジェクトはこれらのHttpServletRequest/Responseを使用してアプリケーションロジックを実行します。

public interface HandlerAdapter { 

    //Check if controller is supported 
    boolean supports(Object handler); 

    //handle request 
    ModelAndView handle(HttpServletRequest rqst, 
         HttpServletResponse rsp, 
         Object handler) throws Exception; 

このアプリケーションロジックの実行によって、モデルとビューが生成されます。このビューは、ビュー名のStringまたはViewオブジェクトの形式にすることができます。モデルには、ビューのレンダリングに使用されるデータが格納されます。 HandlerAdapterはModelAndViewオブジェクトでモデルとビューをラップします。 ModelAndViewオブジェクトを処理するディスパッチャーサーブレットジョブです。

ディスパッチャー・サーブレットは、ハンドラー・オブジェクトを認識せず、アプリケーション・ロジックを直接処理することから解放されます。ハンドラオブジェクトは、モデルとビューをModelAndViewオブジェクトに変換することからも解放されました。これは、HandlerAdapterがその変換ジョブを行うためです。

関連する問題