【问题标题】:Which is a Controller and which is HandlerMapping in Spring MVC?Spring MVC 中哪个是 Controller,哪个是 HandlerMapping?
【发布时间】:2011-12-27 09:27:54
【问题描述】:
我正在使用this 链接来学习 Spring MVC。如前所述,dispatcher-servlet 位于处理所有传入请求的顶部。
它还描述了有一个HandlerMapping和一个Controller。但是,在源代码中,仅使用了 Controller。那么 HandlerMapping 是哪一个呢?是不是单独的文件?
或者它是否存在于其他一些复杂的场景中?
【问题讨论】:
标签:
java
spring
spring-mvc
【解决方案1】:
Controller 和 HandlerMapping 在 Spring MVC 中是两个不同的东西。
Controller 是一个实际的 java 类,用于处理请求。我们在类定义的顶部声明@Controller。
HandlerMapping 是在 Spring 框架类中构建的。 Spring框架中有很多handler映射,如BeanNameUrlHandlerMapping、ControllerClassNameHandlerMapping等。默认情况下,BeanNameUrlHandlerMapping用于映射请求。该类在所有控制器分类中搜索以将特定请求与方法映射。
【解决方案2】:
当配置中没有明确指定处理程序映射时,默认创建并使用BeanNameUrlHandlerMapping。
来自您链接的文章:
"默认DispatcherServlet使用BeanNameUrlHandlerMapping映射传入的请求。BeanNameUrlHandlerMapping使用bean名称作为URL模式。由于默认使用BeanNameUrlHandlerMapping,您无需做任何单独的配置为了这。”
【解决方案3】:
Handler Mapping 作为 Dispatcher servlet 的助手。它有助于为 Dispatcher servlet 识别适当的控制器 bean。默认处理程序映射 bean 是 DefaultUrlHandlerMapping。
它通过 url 识别控制器 bean。它将 URL 中的名称与控制器 bean 匹配。如果匹配,它将返回给DispatcherServlet,最后servlet执行控制器的业务方法并将ModelAndView对象返回给dispatcher servlet。