什么是Spring mvc中的Handler适配器?

时间:2011-10-24 04:13:23

标签: spring spring-mvc

我是Spring MVC的初学者。我没有清楚地理解处理程序适配器。什么是处理程序适配器以及何时使用适配器?

4 个答案:

答案 0 :(得分:11)

HandlerMapping将方法映射到URL,因此DispatcherServlet知道特定请求应该调用哪个方法。然后DispatcherServlet使用HandlerAdapter来调用该方法。

  

为什么DispatcherServlet不直接调用方法?

因为有许多方法可以调用方法,例如注释,xml等。HandlerAdapterDispatcherServlet与调用的动作分开。

答案 1 :(得分:8)

启动here,看看是否有帮助;如果没有,请提出更具体的问题。此外,Spring文档的this section讨论了默认适配器以及它们与注释配置的关系。

简而言之,处理程序适配器决定为请求调用哪个控制器(和方法)。

答案 2 :(得分:3)

您可以在HandlerAdapter中找到Adapter,并且该部分名称来自适配器模式。适配器就像两个对象之间的桥梁,HandlerAdapter是处理程序对象和调度程序servlet之间的桥梁。

从下面从Spring文档中获取的HandlerAdapter源代码可以看出,有一种方法,使用ModelAndView返回类型的句柄方法。每个HandlerAdapter都会实现这个方法来将HttpServletRequest和HttpServletResponse委托给handler对象,这样handler对象就可以使用这些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作业。

Dispatcher servlet不知道处理程序对象,并且从直接处理应用程序逻辑中解除了。处理程序对象也从模型和视图转换为ModelAndView对象中解脱,因为HandlerAdapter将执行转换作业。

答案 3 :(得分:2)

HandlerMapping只是将方法映射到网址。大多数初学者不直接使用这个对象,而是使用RequestMapping代替。映射方法的返回类型(通常)确定SpringMVC将用于呈现响应的视图。

例如,以下RequestMapping将为“/”或“/ home”的GET请求生成HandlerMapping以调用此方法:

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

该方法返回视图的字符串名称,通常会将其解析为“/WEB-INF/views/homepage.jsp”(但这当然取决于您的ViewResolver

开始时只是一个假设:您可以添加您可能需要的不同对象作为方法的参数(如Locale,HttpServletRequest等)。有关详细信息,请参阅RequestMapping javadoc。