SpringMVC是spring容器中的子容器,只负责Controller层相关对象的管理。
核心组件:
1.前端控制器:DispatcherServlet -> 实现请求的流转。
2.处理器映射器:HandlerMapping -> 实现了请求路径与方法之间的映射。在SpringMVC启动时,会使用map的数据结构:key为URL地址, value为Method对象(包名.类名.方法名)的形式完成映射,当请求URL在map中存在key时,会获取对应的Method对象。
3.处理器适配器:HandlerAdapter -> 内部有很多个处理器,针对不同用户的请求,调用不同的处理器完成任务。
4.试图解析器:用于页面路径拼接,目前很少用到了
执行流程:
1.浏览器发起请求
2. DispatcherServlet 获取到请求,将请求转发至handlerMapping。DispatcherServlet 只负责请求的转发和响应,不做任务业务的处理。
3. HandlerMapping接收到DispatcherServlet的请求后,查询自己维护的map,
=》如果请求URL不在map的key中,则该程序不能处理此请求,返回给前端响应,404。
=》如果请求URL存在于key中,则说明请求可以执行,将该Method对象返回给DispatcherServlet 。
4.DispatcherServlet 将 HandlerMapping返回的Method对象转发给HandlerAdapter执行。
5.HandlerAdapter根据方法的类型(xml配置文件/ 注解 / 其他方法),HandlerAdapter在自己内部众多的处理器中挑出最为合适的处理器至执行该方法。当处理器执行该方法时,Controller层中的方法也会开始执行(代理模式),标识业务的开始,业务结束后,将最终的处理结果通过ModelAndView(Model:代表服务器返回的业务数据 View:服务器端返回的页面名称)对象进行包装返回给DispatcherServlet。
6. 将View中的数据进行解析,拼接一个完整的路径。
7.将数据与页面进行绑定渲染。
8. 由于现在流行前后端分离,所以SpringMVC省略了视图解析和试图渲染,只有前5步。使用注解@ResponseBody(将服务器返回的业务数据转换为JSON返回)省略6-7步