流程图
纠正
SpringMVC主要组件
- 前端控制器 作用:负责请求的转发和响应
- 处理器映射器 作用:负责url的映射查询,返回HandlerExecutionChain(处理器拦截器–参数类型的转换、处理器对象–方法对象名)
- 处理器适配器 作用:负责分配业务给(最优)处理器
- 视图解析器 作用:拼接完整路径
视图渲染 作用:数据与页面绑定
请求过程
- 用户发起请求,第一步经过前端控制器
- 前端控制器结构得到请求,但是前端控制器只负责请求的转发和响应,不做任何业务处理, 所以,将url请求转发给处理器映射器。
- 处理器映射器接受到前端控制器的url请求后,查询自己维护的服务列表信息
如果服务列表中没有这个url的key,则返回特定数据给前端控制器,前端控制器接收特定的数据后,响应给用户404.
如果服务列表中有这个url的key,则说明请求可以正常执行。将该url对应的value值(方法对象名)返回给前端控制器。 - 前端控制器将方法对象名进行接受,但是由于前端只负责转发和响应,不能直接执行该方法。所以将方法对象名交给处理器适配器。
- 处理器适配器根据方法的类型(类型:xml配置文件方式、注解的方式、其他的方式)。处理器适配器在根据自己的处理器库中挑选一个最为适合的处理器去执行该方法。
- 当处理器执行该方法时,Controller层中的方法才开始执行(Controller->Service->Mapper)。标识业务的开始。将最终的处理结果用一个对象包裹(ModelAndView对象),返回给处理器映射器。
- 然后处理器映射器再返回给前端控制器。
- 前端控制器将返回来的ModelAndView对象发送给视图解析器,将View中的数据进行解析,拼接一个完整的路径 。
9.然后返回一个具体的View - 最后将数据与具体的页面进行绑定渲染。
- 然后返回给前端控制器,
- 最后前端控制器响应给用户
了解父子容器
1.Spring容器由于IoC/DI的机制,可以作为第三方的管理者。作为父级
2.SpringMVC容器,其中只负责Controller层的相关的对象的管理。子级容器,mvc自成一套体系,(Controller层)
springmvc情景模拟
客户点餐(指定厨师和菜品),服务员收到单子,然后去找后厨管理员,问这位厨师来了吗?然后后厨管理员给他一个回复,如果没来,服务员就会回复客户,不好意思我们这不能为你服务(404),因为你指定的厨师没来;如果后厨管理员回复服务员说“来了”,然后服务员就去找厨师,将菜单给厨师,然后厨师根据菜单制作菜品,厨师偷懒,自己不做,分给最好的徒弟做,然后让徒弟做完,最后徒弟将做好的菜品给师傅,师傅又将菜品转手给服务员,服务员从后厨那拿到菜,还要给菜进行封装,这样更优仪式感,就需要推车,需要摆放灯光,最后服务员在推送给顾客。
客户:前端
厨师:请求
菜品:数据
服务员:前端控制器
后厨管理员:处理器映射器
厨师:处理器适配器
徒弟:hander
推车:视图解析器
灯光:视图渲染
现在的SpringMVC
由于现在流行前后端的分离。所以SpringMVC省略了视图解析和视图渲染