首页 文章

Spring MVC中Controller和Handler有什么区别?

提问于
浏览
3

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 回答

  • -1

    一般来说,Controller是Handler,但Handler不一定是Controller .

    例如, HttpRequestHandlerWebRequestHandlerMessageHandler 都是可以使用 DispatcherServlet 的处理程序 . (( @ )Controller是执行Web请求并返回视图的处理程序 . )

    简而言之,Handler只是一个术语,它既不是类也不是接口 . 它负责执行映射 .

  • 3

    Controller是特定类型的 Handler 但并非所有 Handler 都是 Controller .

    要执行 Handler 类型,有一个HandlerAdapter,并且对于每种类型的 Handler ,都有一个不同的 HandlerAdapter . 你有Controller@ControllerHttpRequestHandler,而且Servlet可以是 Handler . 或者,如果你有一些自定义的东西,你甚至可以实现自己的 .

  • 11

    处理程序是一个包容性的,即涵盖所有服务细节 .
    Controller是一个独家实现 .

    在Spring中,我们有以下不同类型的处理程序:

    • HandlerMappingHandlerMapping 策略用于向某些处理程序控制器(或控制器)和/或方法发送HTTP客户端请求 . 这是基于请求URL和HTTP方法完成的,但也可能包括请求参数,请求标头或其他自定义因素 .
      For example: DefaultAnnotationHandlerMappingSimpleUrlHandlerMappingBeanNameUrlHandlerMapping .

    • HandlerAdapterDispatcherServlet 使用HandlerAdapter invoke 方法 . 这将 DispatcherServlet 与控制器实现类分离 .
      For example: AnnotationMethodHandlerAdapterHttpRequestHandlerAdapterRequestMappingHandlerAdapterSimpleControllerHandlerAdapterSimpleServletHandlerAdapter

相关问题