HandlerMapping
是什么:
处理映射器定义了请求和处理器之前的映射关系,通过请求对象可以找到与之对应的处理器。
实现原理:
根据请求的元数据信息和处理器集合中各个处理器的元数据信息进行一一的匹配,
找出集合中与当前请求相匹配的处理器。
简单的说就是一个需求(request)有多个供给(handlers)
需要通过匹配器(matcher)为request找出一个handler
匹配规则由HandlerMapping实现
匹配因子可以根据当前请求的URL,session,cookie,HTTP header等。
public interface HandlerMapping {
根据给定的请求返回与之对应的处理器和任意数量的拦截器
选取处理器的规则可以是基于请求的URL和session,或实现类选择的任意因子
返回的HandlerExecutionChain包含一个处理器对象,这个对象是Object类型的
而不是具体的某个接口。就是说HandlerExecutionChain持有的handler是Object类型
所以它可以是任意类型的对象,HandlerExecutionChain不负责直接调用handler,
所以处理器对象是不受任何约束,从而变得非常灵活。
比如:可以写一个HandlerAdapter来允许使用其他框架的处理器对象
返回NULL如果找不到匹配的处理器。
返回NULL不是一个错误。
DispatcherServlet会查询所有已注册的HandlerMapping
去找到一个与当前请求匹配的Handler,只有在一个Handler都找不到的情况下
才判定出错了。
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}
网友评论