SpringMVC的工作流程很重要,而在实际开发中我们会用注解进行开发,比如使用@Controller
来标注控制器,使用@RequestMapping
来映射URL请求到具体的处理函数,而其背后的运行流程其实更加重要。SpringMVC的设计体现出软件开发中非常重要的架构设计原则的应用:“关注点分离”和”单一职责“。
在复习SpringMVC的运行流程时,对HandlerMapper
和HandlerAdapter
的职能产生了疑惑,这里对两者的区别做一个记录。未来有机会再补上SpringMVC的完整运行流程。
HandlerMapper
& HandlerAdapter
的区别:
HandlerMapper
抽象了请求URL到请求处理器之间的映射,而HandlerAdapter
用于封装对请求处理器的真正调用。打个比方讲,当某个客户请求到达时,DispatcherServlet
会询问HandlerMapper
哪个请求处理器能处理,然后找到支持该请求处理器的HandlerAdapter
,然后将该请求处理器的调用交给该HandlerAdapter
完成。这个例子简单地描述了DispatcherServlet
处理请求工作的主流程,可以看出,DispatcherServlet
所做的事情很简单,可以认为仅仅是一个主流程,而无需关心底层细节。而这里面很重要的两个底层细节: 请求到请求处理器的映射关系,请求处理器如何处理请求