SpringMVC 之 HandlerAdapter 的作用

SpringMVC 之 HandlerAdapter 的作用

HandlerAdapter 字面上的意思就是处理适配器,它的作用用一句话概括就是调用具体的方法对用户发来的请求来进行处理。当 handlerMapping 获取到执行请求的 controller 时,DispatcherServlte 会根据 controller 对应的 controller 类型来调用相应的 HandlerAdapter 来进行处理。

1.HandlerAdapter 的注册

DispatcherServlte 会根据配置文件信息注册 HandlerAdapter,如果在配置文件中没有配置,那么 DispatcherServlte 会获取 HandlerAdapter 的默认配置,如果是读取默认配置的话,DispatcherServlte 会读取 DispatcherServlte.properties 文件, 该文件中配置了三种 HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter 和 AnnotationMethodHandlerAdapter。DispatcherServlte 会将这三个 HandlerAdapter 对象存储到它的 handlerAdapters 这个集合属性中,这样就完成了 HandlerAdapter 的注册。

2.HandlerAdapter 的执行

HandlerAdapter接口方法如下:

public interface HandlerAdapter {
	boolean supports(Object handler);
	ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
	long getLastModified(HttpServletRequest request, Object handler);
}

DispatcherServlte 会根据 handlerMapping 传过来的 controller 与已经注册好了的 HandlerAdapter 一一匹配,看哪一种 HandlerAdapter 是支持该 controller 类型的,这调用的是supports方法,如果支持的话就会返回true.如果找到了其中一种 HandlerAdapter 是支持传过来的 controller 类型,那么该 HandlerAdapter 会调用自己的 handle 方法,handle 方法运用 java 的反射机制执行 controller 的具体方法来获得 ModelAndView, 例如 SimpleControllerHandlerAdapter 是支持实现了 controller 接口的控制器,如果自己写的控制器实现了 controller 接口,那么 SimpleControllerHandlerAdapter 就会去执行自己写控制器中的具体方法来完成请求。

今天再来看源码,发现处理器根本就不只有 Controller 这一种。还有 HttpRequestHandler,Servlet 等处理器。下面来介绍一下几种适配器对应的处理器以及这些处理器的作用

  1. AnnotationMethodHandlerAdapter 主要是适配注解类处理器,注解类处理器就是我们经常使用的 @Controller 的这类处理器
  2. HttpRequestHandlerAdapter 主要是适配静态资源处理器,静态资源处理器就是实现了 HttpRequestHandler 接口的处理器,这类处理器的作用是处理通过 SpringMVC 来访问的静态资源的请求
  3. SimpleControllerHandlerAdapter 是 Controller 处理适配器,适配实现了 Controller 接口或 Controller 接口子类的处理器,比如我们经常自己写的 Controller 来继承 MultiActionController.
  4. SimpleServletHandlerAdapter 是 Servlet 处理适配器, 适配实现了 Servlet 接口或 Servlet 的子类的处理器,我们不仅可以在 web.xml 里面配置 Servlet,其实也可以用 SpringMVC 来配置 Servlet,不过这个适配器很少用到,而且 SpringMVC 默认的适配器没有他,默认的是前面的三种。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值