我一直在阅读Spring MVC HandlerMapping
和HandlerAdapter
,但我对这两个概念感到困惑。我可以理解HandlerMapping
用于将传入的HTTP请求映射到控制器但是{ {1}} what is the use of HandlerAdapter?
why do we use it?
请帮助我。谢谢!!
答案 0 :(得分:10)
自从在Spring 3.1中引入RequestMappingHandlerMapping和RequestMappingHandlerAdapter以来,区别更为简单: RequestMappingHandlerMapping为给定请求查找适当的处理程序方法。 RequestMappingHandlerAdapter执行此方法,为其提供所有参数。
答案 1 :(得分:-1)
HandlerMapping 用于将请求映射到处理程序,即控制器。例如:DefaultAnnotationHandlerMapping,SimpleUrlHandlerMapping,BeanNameUrlHandlerMapping。 DefaultAnnotationHandlerMapping。
<mvc:annotation-driven />
声明明确支持注释驱动的MVC控制器。标记配置两个bean(映射和适配器)DefaultAnnotationHandlerMapping
和AnnotationMethodHandlerAdapter
,因此您无需在上下文配置文件中声明它们。
HandlerAdapter 基本上是一个便于在Spring MVC中以非常灵活的方式处理HTTP请求的接口。 DispatcherServlet不直接调用该方法 - 它基本上充当它自己和处理程序对象之间的桥梁,导致松散耦合的设计。
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);
}
AnnotationMethodHandlerAdapter :执行使用@RequestMapping
注释的方法。 AnnotationMethodHandlerAdapter已被弃用,并由Spring 3.1+中的 RequestMappingHandlerAdapter 替换。
SimpleControllerHandlerAdapter:这是Spring MVC注册的默认处理程序适配器。它处理实现Controller接口的类,用于将请求转发给控制器对象。
如果Web应用程序仅使用控制器,那么我们不需要配置任何HandlerAdapter,因为框架使用此类作为处理请求的默认适配器。
让我们使用旧式控制器(实现Controller接口)定义一个简单的控制器类:
public class SimpleController implements Controller {
@Override
public ModelAndView handleRequest(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("Greeting");
model.addObject("message", "Dinesh Madhwal");
return model;
}
}
类似的XML配置:
<beans ...>
<bean name="/greeting.html"
class="com.baeldung.spring.controller.SimpleControllerHandlerAdapterExample"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>