Spring MVC时序图
2020-07-25 本文已影响0人
涣涣虚心0215
Spring MVC时序图
SpringMVC的父子容器:一般在父容器中配置Service,dao之类的东西,不加载controller;在mvc容器中只加载controller。两个容器负责不同的bean,但是如果在父容器配置一些AOP想处理controller的内容,不会生效(比如说事务),因为容器隔离,父容器不能访问子容器,子容器可访问父容器的内容。
- 针对于SpringIOC容器,配置org.springframework.web.context.ContextLoaderListener,指定contextConfigLocation,扫描除了Controller之外的bean(启动Web容器时,读取在contextConfigLocation中定义的xml文件,自动装配ApplicationContext的配置信息,并产生WebApplicationContext对象,然后将这个对象放置在ServletContext的属性里,这样我们只要得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean)
-
针对前端控制器DispatcherServlet,配置contextConfigLocation,扫描Controller注解的bean
用户向服务器发送请求,请求会到DispatcherServlet,DispatcherServlet 对请求URL进行解析,得到请求资源标识符(URI),然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括一个Handler处理器对象、多个HandlerInterceptor拦截器对象),最后以HandlerExecutionChain对象的形式返回。DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller),Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;根据返回的ModelAndView,选择一个适合的ViewResolver返回给DispatcherServlet;ViewResolver 结合Model和View,来渲染视图,最后将渲染结果返回给客户端。
Spring MVC时序图.png