什么是Spring MVC中的处理程序适配器的功能?

i7uaboj4  于 2023-11-16  发布在  Spring
关注(0)|答案(5)|浏览(100)

我是Spring MVC的初学者。我不太清楚处理程序适配器。什么是处理程序适配器,什么时候使用适配器?

2q5ifsrm

2q5ifsrm1#

HandlerMapping将一个方法Map到一个URL,这样DispatcherServlet就知道特定请求应该调用哪个方法。然后DispatcherServlet使用HandlerAdapter来调用该方法。
为什么DispatcherServlet不直接调用方法?
因为有很多方法可以调用一个方法,比如annotation,xml等等,HandlerAdapterDispatcherServlet和被调用的操作分离。

xmakbtuz

xmakbtuz2#

Spring文档的这一部分讨论默认适配器以及它们如何与注解配置相关。
简单地说,处理程序适配器决定为请求调用哪个控制器(和方法)。

p8ekf7hl

p8ekf7hl3#

你可以在HandlerAdapter中找到Adapter,这个名字的一部分来自于Adapter模式。Adapter就像是两个对象之间的桥梁,HandlerAdapter是处理程序对象和调度程序servlet之间的桥梁。
从下面的HandlerAdapter源代码中可以看到,有一个方法,带有ModelAndView返回类型的handle方法。每个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将模型和视图 Package 在ModelAndView对象中。处理ModelAndView对象是调度器servlet作业。
Dispatcher servlet不知道handler对象,因此不必直接处理应用程序逻辑。Dispatcher对象也不必将模型和视图转换为ModelAndView对象,因为HandlerAdapter将完成转换工作。

eblbsuwk

eblbsuwk4#

HandlerMapping只是简单地将一个方法Map到一个URL。大多数初学者不直接使用这个对象,而是使用RequestMapping的。Map方法的返回类型(通常)决定了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了解更多信息。

g6ll5ycj

g6ll5ycj5#

关于Spring docs
它遵循SPI设计模式
MVC框架SPI接口,允许参数化核心MVC工作流。
它有助于与其他框架集成(因为我们没有直接使用处理程序对象,而是使用适配器来调用。这意味着适配器会负责使用处理程序的其他管道逻辑)
请注意,处理程序可以是Object类型。这是为了使其他框架的处理程序能够与此框架集成,而无需自定义编码,以及允许不遵守任何特定Java接口的注解处理程序对象。
重要的是,我们应该注意到,它不适合应用程序开发人员:
此接口不适用于应用程序开发人员。它可用于希望开发自己的Web工作流的处理程序。

相关问题