HandlerMapping
时间: 2024-02-03 11:02:01 浏览: 19
HandlerMapping 是 Spring MVC 框架中的一个组件,用于将请求 URL 映射到对应的处理器(Handler)。它根据请求的 URL 和其他的条件,找到处理该请求的 Controller,然后将请求交给该 Controller 处理。HandlerMapping 的主要作用是将请求 URL 和处理器之间建立映射关系,使得请求能够正确地被处理。在 Spring MVC 中,常用的 HandlerMapping 实现类有:RequestMappingHandlerMapping、BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping 等。
相关问题
HandlerMapping源码
HandlerMapping是Spring MVC框架中的一个接口,用于将HTTP请求映射到处理程序(即控制器)。
以下是HandlerMapping接口的源代码:
```
public interface HandlerMapping {
String BEST_MATCHING_HANDLER_ATTRIBUTE = HandlerMapping.class.getName() + ".bestMatchingHandler";
@Nullable
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
@Nullable
default HandlerExecutionChain getHandler(HttpServletRequest request, boolean cache) throws Exception {
if (cache) {
Object handler = request.getAttribute(BEST_MATCHING_HANDLER_ATTRIBUTE);
if (handler != null) {
return (HandlerExecutionChain) handler;
}
}
HandlerExecutionChain handler = getHandler(request);
if (cache && handler != null) {
request.setAttribute(BEST_MATCHING_HANDLER_ATTRIBUTE, handler);
}
return handler;
}
@Nullable
default HandlerExecutionChain getHandlerInternal(HttpServletRequest request) throws Exception {
return getHandler(request, true);
}
}
```
该接口中定义了三个方法:
1. `getHandler(HttpServletRequest request)`:根据HTTP请求返回与之匹配的HandlerExecutionChain,如果没有匹配的则返回null。
2. `getHandler(HttpServletRequest request, boolean cache)`:根据HTTP请求返回与之匹配的HandlerExecutionChain,如果cache为true,则在request属性中查找是否已经缓存对应的HandlerExecutionChain,如果存在则直接返回。如果不存在则调用`getHandler(HttpServletRequest request)`方法,并将其缓存到request属性中。
3. `getHandlerInternal(HttpServletRequest request)`:该方法是`getHandler(HttpServletRequest request)`方法的默认实现,它会调用`getHandler(HttpServletRequest request, boolean cache)`方法,并将cache参数设置为true。
在Spring MVC中,有多种HandlerMapping的实现,如`RequestMappingHandlerMapping`、`SimpleUrlHandlerMapping`、`BeanNameUrlHandlerMapping`等。不同的HandlerMapping实现有不同的匹配规则和优先级,开发者可以根据自己的需要进行选择和配置。
handlermapping handleradapter
"HandlerMapping"和"HandlerAdapter"是Spring MVC框架中的两个关键组件。
前者主要用于将请求映射到对应的处理程序(也就是控制器),确定具体哪个Controller处理当前请求;而后者则负责将请求传递给对应的Controller,并将处理结果返回给前端视图,通常使用反射调用处理方法进行处理。
简单来说,HandlerMapping是找到处理请求的Controller,HandlerAdapter是执行Controller的处理方法。