what's difference between Controller and Handl

2020-07-11 08:16发布

问题:

The documentation of Spring MVC sometimes says about "handlers" or "request handlers". For instance, http://docs.spring.io/autorepo/docs/spring/4.0.4.RELEASE/javadoc-api/org/springframework/web/servlet/handler/SimpleUrlHandlerMapping.html says:

Implementation of the HandlerMapping interface to map from URLs to request handler beans

And sometimes it says about controllers. For instance, there is an interface called org.springframework.web.servlet.mvc.Controller ( http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/web/servlet/mvc/Controller.html ).

My question is: are Controllers and Handlers the same?

回答1:

Generally speaking, a Controller is Handler, but a Handler doesn't have to be a Controller.

For example, HttpRequestHandler, WebRequestHandler, MessageHandler are all handlers which can work with the DispatcherServlet. ( (@)Controller is a handler for executing a web request and returning a view.)

Shortly, Handler is just a term, it is neither a class nor interface. And it is responsible for executing the Mapping.



回答2:

A Controller is a specific type of Handler but not all Handlers are Controllers.

To execute a type of Handler there is a HandlerAdapter and for each type of Handler there is a different HandlerAdapter. You have Controller and @Controller, HttpRequestHandler and also a plain Servlet can be a Handler. Or if you have some custom things you can even implement your own.



回答3:

Handler is a inclusive i.e. covering all the services details.
Controller is an an exclusive implementation.

In Spring we have the following different types of handlers:

  • HandlerMapping: The HandlerMapping strategy is used to map the HTTP client request to some handler controller(or controllers) and/or method. This is done based on the request URL and the HTTP method, but may also include the request parameters, request headers, or other custom factors.
    For example: DefaultAnnotationHandlerMapping, SimpleUrlHandlerMapping, BeanNameUrlHandlerMapping.
  • HandlerAdapter: The DispatcherServlet uses a HandlerAdapter to invoke a method. Which is decouples the DispatcherServlet from controller implementations classes.
    For example: AnnotationMethodHandlerAdapter, HttpRequestHandlerAdapter, RequestMappingHandlerAdapter, SimpleControllerHandlerAdapter, SimpleServletHandlerAdapter