我是Spring MVC的初学者。我没有清楚地理解处理程序适配器。什么是处理程序适配器以及何时使用适配器?
答案 0 :(得分:11)
HandlerMapping
将方法映射到URL,因此DispatcherServlet
知道特定请求应该调用哪个方法。然后DispatcherServlet
使用HandlerAdapter
来调用该方法。
为什么DispatcherServlet不直接调用方法?
因为有许多方法可以调用方法,例如注释,xml等。HandlerAdapter
将DispatcherServlet
与调用的动作分开。
答案 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。