我一直在阅读Spring MVC的HandlerMapping和HandlerAdapter,但是我对这两个概念感到困惑。 why do we use it? what is the exact difference between these two with example? 请帮我这个忙。谢谢!!
public interface HandlerAdapter {
//check if a particular handler instance is supported or not.
boolean supports(Object handler);
//used to handle a particular HTTP request and returns ModelAndView object to DispatcherServlet
ModelAndView handle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception;
long getLastModified(HttpServletRequest request, Object handler);
}
3条答案
按热度按时间t40tm48m1#
HandlerMapping用于将请求Map到处理程序(即控制器)。例如:默认注解处理程序Map、简单URL处理程序Map、Bean名称URL处理程序Map。默认注解处理程序Map。
<mvc:annotation-driven />
声明了对注解驱动的MVC控制器的显式支持。该标记配置了两个bean(Map和适配器)DefaultAnnotationHandlerMapping
和AnnotationMethodHandlerAdapter
,因此您不需要在上下文配置文件中声明它们。HandlerAdapter基本上是一个接口,它在Spring MVC中以一种非常灵活的方式促进了HTTP请求的处理。DispatcherServlet不直接调用该方法--它基本上充当了自身和处理程序对象之间的桥梁,从而导致了一种松散耦合的设计。
处理程序适配器的类型:
注解方法处理程序适配器:它执行使用
@RequestMapping
注解的方法。AnnotationMethodHandlerAdapter已弃用,并由Spring 3.1+中的RequestMappingHandlerAdapter替换。简单控制器处理程序适配器:这是SpringMVC注册的默认处理程序适配器,它处理实现Controller接口的类,用于将请求转发给一个控制器对象。
如果一个Web应用程序只使用控制器,那么我们不需要配置任何HandlerAdapter,因为框架使用这个类作为处理请求的默认适配器。
让我们定义一个简单的控制器类,使用较旧样式的控制器(实现Controller接口):
类似的XML配置:
for more
jmo0nnb32#
我认为handlerMappings找到了相应的控制器类,而handlerAdpters则在控制器中找到了方法发现.请求:http://example.com/city/getCity?cid=1,则dispatcherServlet将通过handlerMappings获取
CityController
,然后handlerAdapter将在类中查找getCity()
ljsrvy3e3#
自从在Spring3.1中引入了RequestMappingHandlerMapping和RequestMappingHandlerAdapter之后,这种区别就更加简单了:RequestMappingHandlerMapping为给定的请求查找适当的处理程序方法。RequestMappingHandlerAdapter执行此方法,并向其提供所有参数。