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

时间:2015-05-11 10:43:14

标签: java spring spring-mvc

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(http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/web/servlet/mvc/Controller.html)的接口。

我的问题是:控制器和处理程序是一样的吗?

3 个答案:

答案 0 :(得分:11)

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

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

很快,Handler只是一个术语,它既不是类也不是接口。它负责执行映射。

答案 1 :(得分:3)

Controller是特定类型的order_no, linestatus,但并非所有Handler都是Handler

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

答案 2 :(得分:-1)

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

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

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