摘要:与容器与容器的关系为容器提供了宿主环境。容器通过初始化建立,是注册在容器中的监听器,当容器初始化时,监听器会收到该事件从而发起容器的初始化。是处理请求的转发器,从而响应的请求。接着将数据进行合并,然后将数据放入中进行暴露。
Spring MVC 与 Web IoC容器与Web容器的关系
ServletContext为IoC容器提供了宿主环境。IoC容器通过ContexLoaderListener初始化建立,ContexLoaderListener是注册在Web容器中的监听器,当Web容器初始化时,监听器会收到该事件从而发起Spring容器的初始化。DispatchServlet是Spring MVC处理请求的转发器,从而响应HTTP的请求。
ContexLoaderListener会调用ContextLoader,ContextLoader又会创建XmlWebApplicationContext,XmlWebApplicationContext作为默认的IoC容器,负责从默认的/WEB-INF/applicationContext.xml中加载BeanDefinition。
ContextLoader在创建IoC容器XmlWebApplicationContext后会将其注册入servletContext的属性ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE中。
DispatchServlet的功能DispatchServlet负责两个工作,根据web.xml初始化自己的上下文,响应http请求。
在ContextLoader加载完成后,开始DispatchServlet的初始化。首先从ServletContext中获取WebApplicationContext作为双亲上下文,这里就是XmlWebApplicationContext,所以XmlWebApplicationContext定义的Bean可以被DispatchServlet获取,在DispatchServlet中查找Bean时,会首先从双亲上下文中查找。获取双亲上下文后,DispatchServlet会创建自己的上下文,并且将其注册进ServletContext的属性中,属性名为该servlet相关的,因为一个Web容器可以有多个servlet。
DispatchServlet上下文的初始化后会开始创建一些请求处理策略,如LocalResolver、HandlerMappings等。例如,初始化HandlerMappings就是从IoC容器中获取所有的HandlerMapping相关的Bean。
HandlerMapping是对HTTP请求到controller的映射,HandlerMapping根据请求获取一个HandlerExecutionChain,其中包含了一个handler和多个interceptor,interceptor负责功能的增强。
例如SimpleUrlHandlerMapping在初始化时会将url和对应handler的bean放入map中保存。当请求到达时,会从SimpleUrlHandlerMapping中查找最长匹配url的handler,包装成HandlerExecutionChain返回。
DispatchServlet处理请求的过程当请求到来,从所有的HandleMapping中依次查找到匹配的HandlerExecutionChain,多个HandleMapping是按照优先级排序的。
HandlerExecutionChain获得后,先对请求执行intercepter的preHandler,然后执行handler,最后再次执行intercepter的postHandler,得到最终的ModelAndView对象。
最后根据ModelAndView渲染视图并返回。
ModelAndView呈现给客户端的过程以JSP视图为例。
Step1:ModelAndView获得后,会从中获取其对应的View,也就是根据ModelAndView指明的名称获得对应View的Bean。
Step2:View接着将数据进行合并,然后将数据放入requst中进行暴露。
Step3:根据请求,获取URL路径,定位资源。如JSP文件。
Step4:将包含数据的requst转发到目标资源路径,由web容器负责获取资源,并且将数据装入JSP。最后将拼装好的文件返回。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76340.html
摘要:开头正式开启我入职的里程,现在已是工作了一个星期了,这个星期算是我入职的过渡期,算是知道了学校生活和工作的差距了,总之,尽快习惯这种生活吧。当时是看的廖雪峰的博客自己也用做爬虫写过几篇博客,不过有些是在前人的基础上写的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 开头 2017.08.21 正式开启我...
摘要:是提供的类,为了在容器中建立容器而服务的。主要处理的请求分发,对进行管理。接收到请求由进行匹配,匹配成功后交由进行业务逻辑的处理,业务逻辑处理完成后交由进行数据的解析同时找到对应的,最终由将的结果到浏览器进行解析。 spring给我们带来了什么? spring IoC、AOP、Transaction这些都是很重要的特性,但是这篇这些都不是主角,主要来谈谈springMVC是如何对请求参...
摘要:实战高并发程序设计这本书是目前点评推荐比较多的书,其特色是案例小,好实践代码有场景,实用。想要学习多线程的朋友,这本书是我大力推荐的,我的个人博客里面二十多篇的多线程博文都是基于此书,并且在这本书的基础上进行提炼和总结而写出来的。 学习的最好途径就是看书,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:showImg(/img/bVr5S5); 1.能出版出...
摘要:入门笔记简介是一种基于的实现了设计模式的请求驱动类型的轻量级框架,是系开源项目中的一个,和配合使用。配置在中需要添加使用的和映射规则。入门较快,而掌握起来相对较难。 SpringMVC入门笔记 1. 简介 Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架 ,是Spring系开源项目中的一个,和IoC配合使用。通过策略接口,Spring...
摘要:我自己总结的学习的系统知识点以及面试问题,已经开源,目前已经。目前最新的版本中模块的组件已经被废弃掉,同时增加了用于异步响应式处理的组件。每一次请求都会产生一个新的,该仅在当前内有效。显而易见,这种模式存在很多问题。 我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://githu...
阅读 1095·2021-11-08 13:13
阅读 1668·2019-08-30 15:55
阅读 2711·2019-08-29 11:26
阅读 2403·2019-08-26 13:56
阅读 2516·2019-08-26 12:15
阅读 2046·2019-08-26 11:41
阅读 1365·2019-08-26 11:00
阅读 1499·2019-08-23 18:30