Spring MVC的文档有时会说"handlers"或"request handlers" . 例如,http://docs.spring.io/autorepo/docs/spring/4.0.4.RELEASE/javadoc-api/org/springframework/web/servlet/handler/SimpleUrlHandlerMapping.html说:
实现HandlerMapping接口,从URL映射到请求处理程序bean
有时它会说控制器 . 例如,有一个名为org.springframework.web.servlet.mvc.Controller(http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/web/servlet/mvc/Controller.html)的接口 .
我的问题是:控制器和处理程序是一样的吗?
3 回答
一般来说,Controller是Handler,但Handler不一定是Controller .
例如,
HttpRequestHandler
,WebRequestHandler
,MessageHandler
都是可以使用DispatcherServlet
的处理程序 . ((@
)Controller是执行Web请求并返回视图的处理程序 . )简而言之,Handler只是一个术语,它既不是类也不是接口 . 它负责执行映射 .
Controller是特定类型的
Handler
但并非所有Handler
都是Controller
.要执行
Handler
类型,有一个HandlerAdapter,并且对于每种类型的Handler
,都有一个不同的HandlerAdapter
. 你有Controller和@Controller
,HttpRequestHandler,而且Servlet可以是Handler
. 或者,如果你有一些自定义的东西,你甚至可以实现自己的 .处理程序是一个包容性的,即涵盖所有服务细节 .
Controller是一个独家实现 .
在Spring中,我们有以下不同类型的处理程序:
HandlerMapping
:HandlerMapping
策略用于向某些处理程序控制器(或控制器)和/或方法发送HTTP客户端请求 . 这是基于请求URL和HTTP方法完成的,但也可能包括请求参数,请求标头或其他自定义因素 .For example:
DefaultAnnotationHandlerMapping
,SimpleUrlHandlerMapping
,BeanNameUrlHandlerMapping
.HandlerAdapter
:DispatcherServlet
使用HandlerAdapter invoke 方法 . 这将DispatcherServlet
与控制器实现类分离 .For example:
AnnotationMethodHandlerAdapter
,HttpRequestHandlerAdapter
,RequestMappingHandlerAdapter
,SimpleControllerHandlerAdapter
,SimpleServletHandlerAdapter