您的位置:首页 > 编程语言 > Java开发

看透SpringMVC-源码分析与实践 - 9大组件 - HandlerAdapter

2016-11-19 00:00 477 查看

承上

映射器HandlerMapping是通过request找到Handler,而适配器HandlerAdapter则是实际使用Handler处理请求的



适配器HandlerAdapter只有5个直接实现

AbstractHandlerMethodAdapter,此系列两层,有子类RequestMappingHandlerAdapter

HttpRequestHandlerAdapter

SimpleControllerHandlerAdapter

AnnotationMethodHandlerAdapter - 弃用

SimpleServletHandlerAdapter

回顾HandlerAdapter接口,共有三个方法:

// 是否支持传入的Handler
boolean supports(Object handler);
// 使用Handler处理请求
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
// 获取资源的Last-Modified
long getLastModified(HttpServletRequest request, Object handler);

HandlerAdapter的实现中,RequestMappingHandlerAdapter非常复杂,因为要处理的请求太灵活,Handler可以是任意的方法,没有任何约束,其中最**关键是参数的解析映射**

先说简单的:

HttpRequestHandlerAdapter:适配HttpRequestHandler

SimpleControllerHandlerAdapter:适配Controller

SimpleServletHandlerAdapter:适配Servlet

//org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((HttpRequestHandler) handler).handleRequest(request, response);
return null;
}
//org.springframework.web.servlet.handler.SimpleServletHandlerAdapter
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((Servlet) handler).service(request, response);
return null;
}
// org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return ((Controller) handler).handleRequest(request, response);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息