`
m635674608
  • 浏览: 5041508 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring以及SPringmvc相关问题: ServletContext -父子容器

 
阅读更多
总结如下:
  • 明确了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. WebApplicationContextrootContext =
  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 具体说明
 
源码阅读: 
 
 
http://www.cnblogs.com/redcoatjk/p/6118300.html
分享到:
评论

相关推荐

    springMVC集成spring-data-redis

    在SpringMVC中集成Spring Data Redis,可以利用Redis的高效特性来提升应用程序的数据处理能力,例如作为session共享的存储、缓存数据或者实现发布/订阅(Pub/Sub)功能。发布/订阅是一种通信模式,允许发送者(pub)将...

    spring,springmvc,mybatits集成实例--后台分页查询

    spring,springmvc,mybatits集成实例--后台分页查询,spring,springmvc,mybatits集成实例--后台分页查询,spring,springmvc,mybatits集成实例--后台分页查询

    基于SSM+Layui的图书管理系统源码

    - 后端技术:Spring + SpringMVC + MyBatis(SSM) - 前端框架:LayUI 技术栈 - 数据库:MySQL - 开发工具:IDEA - 数据连接池:Druid - Web容器:Apache Tomcat - 项目管理工具:Maven - 版本控制工具:Git - 后端...

    基于SSM的图书管理系统.zip-6

    - 后端技术:Spring + SpringMVC + MyBatis(SSM) - 前端框架:LayUI## 技术栈 - 数据库:MySQL - 开发工具:IDEA - 数据连接池:Druid - Web容器:Apache Tomcat - 项目管理工具:Maven - 版本控制工具:Git - ...

    spring,springmvc,mybatits集成实例--增删查改,sql文件

    spring,springmvc,mybatits集成实例--增删查改,sql文件,ssm框架测试数据数据表employeer,spring,springmvc,mybatits集成实例--增删查改

    maven-spring-springmvc-mybatis-mysql-jetty(tomcat)的demo

    构建的maven-spring-springmvc-mybatis-mysql-jetty(tomcat)小demo,可以在jetty和tomcat上跑起来,实现了最基本的请求响应的一整套流程。留存一下,为以后搭建新项目用。

    spring-webmvc-5.3.10-API文档-中文版.zip

    赠送jar包:spring-webmvc-5.3.10.jar; 赠送原API文档:spring-webmvc-5.3.10-javadoc.jar; 赠送源代码:spring-webmvc-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-webmvc-5.3.10.pom; 包含翻译后的API...

    Spring+SpringMVC+MyBatis+jd-gui.rar

    标题 "Spring+SpringMVC+MyBatis+jd-gui.rar" 暗示了这是一个关于使用Spring框架、SpringMVC、MyBatis以及jd-gui的项目或教程压缩包。下面将详细介绍这些技术及其相互关系。 **Spring框架** 是一个全面的Java企业级...

    SpringMVC+Spring+Spring-Data-JPA整合-完整Demo

    2. **配置Spring**:创建Spring的配置文件,定义Bean的实例化、依赖关系以及AOP相关配置。使用XML或Java配置,或者结合Spring Boot的自动配置。 3. **配置Spring Data JPA**:在Spring配置中添加JPA和DataSource的...

    SpringMVC ---- HelloWorld ---- 代码

    SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...

    Spring、SpringMVC、MyBatis整合 ---- ssm.rar

    自己写的简单的Spring、SpringMVC、MyBatis整合,里面的配置文件都全,方法的话,写了个保存账户信息和查询账户的方法,...和我的博客一起看更佳哦~(Java回顾(二十六)Spring、SpringMVC、Mybatis整合 (SSM整合))

    Spring和SpringMVC父子容器关系

    这个子容器负责处理与SpringMVC相关的bean,如Controller、ViewResolver、HandlerMapping等。DispatcherServlet的初始化配置一般在web.xml中完成,通过配置`<servlet-context>`标签来定义SpringMVC的配置文件路径。 ...

    spring + springmvc + mybatis 整合 及 mybatis-pagehelper分页

    2. **配置SpringMVC**:接着,配置SpringMVC的`web.xml`,设置DispatcherServlet,以及相关的拦截器和视图解析器。还需要在SpringMVC的配置文件(如`spring-mvc.xml`)中配置处理器映射器和适配器。 3. **配置...

    SSM-spring-springmvc-mybatis-jstl-mysql-c3p0整合开发jar(4.3版)包下载

    SSM框架是Java web开发中常用的三大框架组合,包括Spring、SpringMVC和MyBatis。这个压缩包提供了这些框架的集成开发所需的jar文件,以及与MySQL数据库和c3p0连接池的连接支持,主要涉及到以下几个核心知识点: 1. ...

    spring/springmvc/mybatis所需jar包

    在Java开发领域,Spring、SpringMVC和MyBatis是三个非常重要的框架,它们共同构建了一个强大而灵活的Web应用程序栈。Spring作为一个全面的后端开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地...

    ssm(spring、springmvc、mybatis、mybatis-plus)整合

    1. **配置pom.xml**:添加Spring、SpringMVC、MyBatis以及MyBatis-Plus等相关依赖。 2. **配置Spring的Context和DispatcherServlet**:在Spring的配置文件中声明Spring的bean,包括数据源、SqlSessionFactory、...

    Spring-SpringMVC-Mybatis-Maven-Bootstrap3

    Eclipse搭建Maven项目整合SSM框架(maven+spring+springmvc+mybatis); CSDN博客地址:https://blog.csdn.net/qq_29518175/article/details/86607735

    基于jsp的连锁经营商业管理系统 - 编程语言:Java - 数据库:MySQL - 前端技术:JSP、JavaScript

    基于jsp的连锁经营商业管理系统 - 编程语言:Java - 数据库:MySQL - 前端技术:JSP、JavaScript、jquery - 后端技术:Spring、SpringMVC、MyBati.zip

    ssm框架所需jar包包括spring springmvc mybaties

    SSM框架,全称为Spring、SpringMVC和MyBatis的组合,是Java Web开发中常用的三大组件。这个压缩包包含的jar文件是SSM框架运行所必需的基础库,主要用于搭建一个基于Java的Web应用程序环境。现在我们来详细探讨这三个...

    Spring和SpringMVC父子容器关系初窥(小结)

    在项目中引入Spring和SpringMVC这两个框架时,会出现包扫描的问题,而解决这个问题的关键就在于理解Spring和SpringMVC的父子容器关系。 二、概念理解和知识铺垫 在Spring整体框架的核心概念中,容器是核心思想,...

Global site tag (gtag.js) - Google Analytics