总结如下:
  • 明确了Servlet规范中ServletContext的作用和意义。此外明确一个Tomcat中多个web应用,每个人web应用有唯一的一个ServletContext(全局上下文)。[例子见:同一tomcat多个应用session问题]
       这个ServletContext 对应JSP中内置对象javax.servlet.jsp.ServletContext(作用于application全局级
  • 明确Spring(Spring.context包定义)上下文

    ApplicationContext对象作为容器管理整个Spring生命周期.在web应用中ApplicationContext需要宿主环境即ServletContext. 在web应用启动的过程中初始化中(Servlet规范要求容器会加载执行相关initXXXX方法) Spring利用該标准, 通过ContextLoaderListener(实现Servlet规范中的监听器ServletContextListener以便能在ServletContext创建时候,同步实例化Spring容器-->ApplicationContext)

  • SpringMVC有自己的上下文环境, 一个DispacherServlet对应有一个自己的上下文。
  • 我们可以理解为Spring上下文为父上下文、为所有子上下文共享。一个ServletContext可以对应有一个Spring上下文(父/根上下文root web ApplicationContext),一个Spring上下文内可以有多个Servlet上下文(子上下文)。父上下文不可访问子上下文,子上下文相互不可访问。子上下文可以访问父上下文。本质上DispacherServlet就是一个servlet。
  • 当sevlet在当前上下文中找不到管理的bean时,会到父上下文中寻找。父子上下文的使用场景不同,数据库连接、service层可以放到父上下文中以便整个web应用共享使用。而子上下文可以管理自己的组建对象以及web展现中的数据共享传输。
  • Spring和SPringmvc的配置都在web.xml中. Spring通过实现了ServletContextListener的ContextLoaderListener实例化自己。 Springmvc通过Servlet配置实例化自己。
  • 争议点:如果不配置ServletContextListener,只配置SpringMVC的DispacherServlet的情况下, DispacherServlet如果找不到父上下文是否会创建父上下文然后创建并关联自己的子上下文(创建自己的上下文(子上下文)是肯定的).  貌似上诉的情况是存在的. 实践中可以通过SpringMVC在配置文件中加载自己和SPRING的配置文件的方式加载. 这样一来, WebApplicationContextUtils直接获取父上下文的用法会失效,因为绑定到ServletContext中的KEY ID不同。具体如何获取父上下文(ApplicationContext)存在疑问。

在修改配置文件只通过SpringMVC来加载spring以及springMVC配置文件的实践中, 项目启动后并不报错,而在打开Jeesite首页后出现错误:

  1. 错误信息:No WebApplicationContext found: no ContextLoaderListener registered?
  2. 请点击“查看详细信息”按钮,将详细错误信息发送给系统管理员,谢谢!
  3. 返回上一页 查看详细信息
  4. 错误信息:
  5. java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
  6. at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:252)
  7. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  8. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
的原因估计就是证明了SpringMVC可以加载SPRING容器, 但这种方式在原jeesite代码中使用父上下时需要修改相关代码.

此外:
日常行文中存在很多容易混淆的地方,比如web application指web应用.SpringMVC介入后产生的分层的上下文概念: root context父上下文其实就是Spring的ApplicationContext(上下文),对应SPRING.context包的ApplicationContext. 
而SpringMVC中的接口WebApplicationContext为继承了SPRING.context.ApplicationContext接口. SpringMVC初始化过程中也视图将自己的子上下文与父上下文进行了关联. 对于SpringMVC来说它的上下文(子上下文)是一种WebApplicationContext类型.ServletContextListener创建的父上下文为ApplicationContext类型.
在SpringMVC关联的时候可能会将父上下文由ApplicationContext转为WebApplicationContext进行使用.
  1. WebApplicationContext rootContext =
  2. WebApplicationContextUtils.getWebApplicationContext(getServletContext());
  3. 里面的代码通过当前ServletContext中属性ID: WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 来获取SPRING上下文(父上下)
  4. 并将其由Object转为WebApplicationContext进行使用.
  5. 当然在关联父上下文的时候: cwac.setParent(rootContext);
  6. 这里的类型又是 void setParent(ApplicationContext parent);
估计这就是在一些文档中将父子上下文都成为WebApplicationContext的原因.
比如这个图:
 

明细阅读如下:

1 首先了解什么是ServletContext.


2 大概总结

3 具体说明

源码阅读: 







Spring以及SPringmvc相关问题: ServletContext -父子容器的更多相关文章

  1. Spring和SpringMVC父子的容器之道---[上篇]

    Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而在实际开发中,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但在实际项目中,我们经常会 ...

  2. Spring和SpringMVC的关系

    1.Spring和SpringMVC是父子容器关系. 2.Spring整体框架的核心思想是容器,用来管理bean的生命周期,而一个项目中会包含很多容器,并且它们分上下层关系,目前最常用的一个场景是在一 ...

  3. spring与springmvc父子容器

    转载地址:http://www.tianshouzhi.com/api/tutorials/spring 1.spring和springmvc父子容器概念介绍 在spring和springmvc进行整 ...

  4. 1、spring与springmvc父子容器

    转载于http://www.tianshouzhi.com/api/tutorials/spring 1.0 spring与springmvc父子容器 1.spring和springmvc父子容器概念 ...

  5. 面试高频题:说一说对Spring和SpringMvc父子容器的理解?

    引言 以前写了几篇关于SpringBoot的文章<面试高频题:springBoot自动装配的原理你能说出来吗>.<保姆级教程,手把手教你实现一个SpringBoot的starter& ...

  6. Spring和SpringMVC父子容器关系初窥

    一.背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和 ...

  7. spring和springmvc父子容器关系

    一般来说,我们在整合spring和SpringMVC这两个框架中,web.xml会这样写到: <!-- 加载spring容器 --> <!-- 初始化加载application.xm ...

  8. Spring和springMVC父子容器的关系

    部分转载自:https://www.cnblogs.com/ljdblog/p/7461854.html springMVC容器和Spring容器 为什么一定要在web.xml中配置spring的li ...

  9. (转载)Spring与SpringMVC父子容器的关系与初始化

    转自 https://blog.csdn.net/dhaiuda/article/details/80026354 Spring和SpringMVC的容器具有父子关系,Spring容器为父容器,Spr ...

随机推荐

  1. URL重写 urlrouting

    在global文件中添加以下的代码 <%@ Import Namespace="System.Web.Routing" %> <script RunAt=&quo ...

  2. 关于学习C++编程语言对中国软件发展的的一些思考!

    从2000年UCanCode E-Form++ 图形可视化源码库2.0在国外开始销售以来,弹指一挥间已经快14年了.这14年里见惯了各种新技术的不断涌现.也见惯了各种科技公司的不断出现和消亡,仔细想来 ...

  3. 错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    我们在利用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on ...

  4. LayaAir引擎——(七)

    LayaAir引擎——人物控制TiledMap地图移动和墙壁检测 所需要的软件: LayaAir IDE 1.0.2版本 TiledMap 所需要的东西: 地图:53 * 32,(48*48) 人物: ...

  5. 麦克斯韦方程组 (Maxwell's equation)的简单解释

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2016/12/12 以下会用高中的物理知识和大学微积分的数学知识对麦克斯韦方程组进行一个简单的解释.希望大家都能看得懂 ...

  6. 腾讯优测优分享 | Android性能测试工具化实现

    腾讯优测专业的移动云测试平台,自动化测试提供性能测试数据,云真机实时输出性能数据,让测试更简单! 1.Android性能测试介绍 提到Android性能测试,我们总免不了俗地要首先介绍下Android ...

  7. MediaCodec Name & Type

    OMX.google.mp3.decoder support type:audio/mpegOMX.google.amrnb.decoder support type:audio/3gppOMX.go ...

  8. 交换技术(swaping) 视频11

    进程挂起的原因 1)进程全部阻塞,处理机空闲 2)系统负荷过重,内存空间紧张 3)操作系统需要,操作系统可能挂起后台进程或者一些服务进程(后台进程 优先级比 前天进程低),或者可能导致系统故障的进程 ...

  9. [2]项目创建-使用C#.NET开发基于本地数据缓存的PC客户端

    1.新建项目->已安装->模板->Visual c#->Windows桌面->Windows窗体应用程序,截图如下: 图中1:输入项目名称-“MoneyNotes”,图中 ...

  10. OSX下Python模块安装常见问题解决

    he following error occurred while trying to add or remove files in theinstallation directory: [Errno ...