【问题标题】:what's difference between Controller and Handler in Spring MVC?Spring MVC 中的 Controller 和 Handler 有什么区别?
【发布时间】:2015-05-11 10:43:13
【问题描述】:

Spring MVC 的文档有时会提到“处理程序”或“请求处理程序”。例如,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 的接口(@98​​7654322@)。

我的问题是:Controllers 和 Handlers 是一样的吗?

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    一般来说,Controller 就是 Handler,但 Handler 不一定是 Controller。

    例如,HttpRequestHandlerWebRequestHandlerMessageHandler 都是可以与DispatcherServlet 一起使用的处理程序。 ( (@)Controller 是一个用于执行 web 请求并返回视图的处理程序。)

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

    【讨论】:

      【解决方案2】:

      ControllerHandler 的特定类型,但并非所有 Handlers 都是 Controllers。

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

      【讨论】:

        【解决方案3】:

        Handler 是一个包容性的,即涵盖所有服务细节。
        Controller 是一个专有的实现。

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

        • HandlerMappingHandlerMapping 策略用于将 HTTP 客户端请求映射到某些处理程序控制器(或多个控制器)和/或方法。这是根据请求 URL 和 HTTP 方法完成的,但也可能包括请求参数、请求标头或其他自定义因素。
          例如:DefaultAnnotationHandlerMappingSimpleUrlHandlerMappingBeanNameUrlHandlerMapping
        • HandlerAdapterDispatcherServlet 使用 HandlerAdapter 来调用一个方法。这将 DispatcherServlet 与控制器实现类分离。
          例如: AnnotationMethodHandlerAdapterHttpRequestHandlerAdapterRequestMappingHandlerAdapterSimpleControllerHandlerAdapterSimpleServletHandlerAdapter

        【讨论】:

          猜你喜欢
          • 2011-09-22
          • 1970-01-01
          • 2010-12-25
          • 2014-06-12
          • 2010-12-25
          • 1970-01-01
          • 2012-07-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多