一、大概流程
当用户使用浏览器发送请求时(例如:http://localhost:8080/hello),请求会被我们web.xml配置文件中的DispatcherServlet(前端控制器) 截获,然后根据springmvc配置文件中的HandlerMapping(处理器映射器) 找到响应请求的Handler处理器(Controller)(我们编写的controller层的类)。Controller处理完请求后,返回ModelAndView对象。该对象会告诉DispatcherServlet(前端控制器) 哪一个视图进行展示DispatcherServlet(前端控制器) ,根据springmvc配置文件中的ViewResolver(视图解析器) 把Handler处理器(Controller) 中返回的逻辑视图名渲染成真正的页面呈现在页面。
二、详细步骤
- 用户通过客户端给服务器发送一个请求,该请求会被前端控制器 拦截
- 前端控制器命令处理器映射器 去查找Handler处理器(根据XML配置文件或注解)
- 处理器映射器 找到了Handler处理器后,生成Handler处理器的对象和Handler处理器的拦截器
- 前端控制器命令处理器适配器 去执行Handler处理器
- Handler处理器执行完毕后,给处理器适配器 返回ModerAndView对象(SpringMVC底层对象),该对象包含了Model数据模型和View视图信息
- 处理器适配器 将ModerAndView对象返回给前端控制器
- 前端控制器得到该对象,选择一个合适的视图解析器对视图进行解析,反馈给前端控制器
- 前端控制器接收到View视图后,进行视图渲染,将模型数据填充到request域中,向用户响应结果
三、总结
这就是SpringMVC整个请求处理流程,其中用到的组件有:
- 前端控制器(DispatcherServlet)
- 处理器映射器(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 视图解析器(ViewResolver)
- Handler处理器(Controller)
其中前四个(除了Contoller)工作都是在框架内部执行的,我们不需要关心内部实现过程,我们只需要配置前端控制器,完成Controller中的业务处理,并在视图中展示相应信息即可!