2011-10-24 57 views

回答

8

開始here看看是否有幫助;如果沒有,請提出更具體的問題。另外,Spring文檔的this section討論了默認適配器以及它們與註釋配置的關係。

簡而言之,處理程序適配器決定調用哪個控制器(和方法)來請求。

+0

鏈接已損壞。 – Vishnu

+0

@Vishnu我估計六年內會發生什麼變化。 –

2

A HandlerMapping只是將方法映射到URL。大多數初學者不直接使用這個對象,而是使用RequestMapping來代替。映射方法的返回類型(通常)決定了SpringMVC將用於呈現響應的視圖。

例如,下面的RequestMapping將產生GET請求的HandlerMapping爲「/」或「/家」來調用這個方法:

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

該方法返回一個視圖的字符串名稱,這將通常會被解析爲「/WEB-INF/views/homepage.jsp」(但這取決於您的ViewResolver當然)

剛開始時,您可以添加不同的對象,您可能需要將其作爲參數添加到您的方法(如Locale,HttpServletRequest等)。有關更多信息,請參閱RequestMapping javadoc。

+1

他問了一下HandlerAdapter,你解釋了HandlerMapping –

9

A HandlerMapping將方法映射到URL,因此DispatcherServlet知道應該由特定請求調用哪個方法。然後DispatcherServlet使用HandlerAdapter來調用該方法。

爲什麼DispatcherServlet不直接調用方法?

因爲有許多方法來調用一個方法,像註釋,XML等HandlerAdapter脫夫婦DispatcherServlet和調用的操作。

3

您可以在HandlerAdapter中找到Adapter,並且該部分名稱來自Adapter模式。適配器就像是兩個對象之間的橋樑,而HandlerAdapter是處理程序對象和調度程序servlet之間的橋樑。你可以從Spring文檔中的HandlerAdapter源代碼中看到,有一個方法,ModelAndView返回類型的句柄方法。每個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對象是調度程序servlet作業。

調度程序servlet不知道處理程序對象並從直接處理應用程序邏輯中解脫出來。 Handler對象還可以將模型和視圖轉換爲ModelAndView對象,因爲HandlerAdapter會完成轉換作業。

相關問題