springMVC上下文 和 springIOC容器 关联详解

Spring与SpringMVC父子容器问题 在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可 阅读详情

一、先说ServletContext

  javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的。

举例:

通过自定义contextListener获取web.xml中配置的参数 1.容器启动时,找到配置文件中的context-param作为键值对放到ServletContext中 2.然后找到listener,容器调用它的contextInitialized(ServletContextEvent event)方法,执行其中的操作 例如:在web.xml中配置
1. <context-param>
2. <param-name>key</param-name>
3. <param-value>value123</param-value>
4. </context-param>
5. <listener>
6. <listener-class>com.brolanda.contextlistener.listener.ContextListenerTest</listener-class>
7. </listener>
配置好之后,在该类中获取对应的参数信息
01. package com.brolanda.contextlistener.listener;
02.  
03. import javax.servlet.ServletContext;
04. import javax.servlet.ServletContextEvent;
05. import javax.servlet.ServletContextListener;
06.  
07. public class ContextListenerTest implements ServletContextListener {
08.  
09. public void contextDestroyed(ServletContextEvent event) {
10. System.out.println('*************destroy ContextListener*************');
11. }
12.  
13. @SuppressWarnings('unused')
14. public void contextInitialized(ServletContextEvent event) {
15. System.out.println('*************init ContextListener*************');
16. ServletContext servletContext = event.getServletContext();
17. System.out.println('key:'+servletContext.getInitParameter('key'));
18. }
19.  
20. }

执行流程:

  web.xml在<context-param></context-param>标签中声明应用范围内的初始化参数

1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文)。在该应用内全局共享。

3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.

4.容器创建<listener></listener>中的类实例,即创建监听.该监听器必须实现自ServletContextListener接口

5.在监听中会有contextInitialized(ServletContextEvent event)初始化方法

              在这个方法中获得ServletContext = ServletContextEvent.getServletContext();
            “context-param的值” = ServletContext.getInitParameter('context-param的键'); 6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.     web.xml中可以定义两种参数:     一个是全局参数(ServletContext),通过<context-param></context-param>     一个是servlet参数,通过在servlet中声明        <init-param>                                                                           <param-name>param1</param-name>                                                                           <param-value>avalible in servlet init()</param-value>                                                                        </init-param>        第一种参数在servlet里面可以通过getServletContext().getInitParameter('context/param')得到       第二种参数只能在servlet的init()方法中通过this.getInitParameter('param1')取得  

二、spring上下文容器配置

  spring为我们提供了实现ServletContextListener接口的上下文初始化监听器:org.springframework.web.context.ContextLoaderListener

  spring为我们提供的IOC容器,需要我们指定容器的配置文件,然后由该监听器初始化并创建该容器。要求你指定配置文件的地址及文件名称,一定要使用:contextConfigLocation作为参数名称。

1. <context-param>
2. <param-name>contextConfigLocation</param-name>
3. <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-INF/jason-servlet.xml</param-value>
4. </context-param>
5. <listener>
6. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
7. </listener>

该监听器,默认读取/WEB-INF/下的applicationContext.xml文件。但是通过context-param指定配置文件路径后,便会去你指定的路径下读取对应的配置文件,并进行初始化。

三、spring上下文容器配置后,初始化了什么?

  既然,ServletContext是由Servlet容器初始化的,那spring的ContextLoaderListener又做了什么初始化呢?

        1、servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext         2、容器调用web.xml中配置的contextLoaderListener,初始化WebApplicationContext上下文环境(即IOC容器),加载context-param指定的配置文件信息到IOC容器中。WebApplicationContext在ServletContext中以键值对的形式保存         3、容器初始化web.xml中配置的servlet,为其初始化自己的上下文信息servletContext,并加载其设置的配置信息到该上下文中。将WebApplicationContext设置为它的父容器。         4、此后的所有servlet的初始化都按照3步中方式创建,初始化自己的上下文环境,将WebApplicationContext设置为自己的父上下文环境。          对于作用范围而言,在DispatcherServlet中可以引用由ContextLoaderListener所创建的ApplicationContext中的内容,而反过来不行。        当Spring在执行ApplicationContext的getBean时,如果在自己context中找不到对应的bean,则会在父ApplicationContext中去找。这也解释了为什么我们可以在DispatcherServlet中获取到由ContextLoaderListener对应的ApplicationContext中的bean。

 四、spring配置时:<context:exclude-filter>的使用原因,为什么在applicationContext.xml中排除controller,而在spring-mvc.xml中incloud这个controller

    既然知道了spring的启动流程,那么web容器初始化webApplicationContext时作为公共的上下文环境,只需要将service、dao等的配置信息在这里加载,而servlet自己的上下文环境信息不需要加载。故,在applicationContext.xml中将@Controller注释的组件排除在外,而在dispatcherServlet加载的配置文件中将@Controller注释的组件加载进来,方便dispatcherServlet进行控制和查找。故,配置如下:   applicationContext.mxl中:  <context:component-scan base-package='com.linkage.edumanage'>       <context:exclude-filter expression='org.springframework.stereotype.Controller'    type='annotation' />   </context:component-scan>   spring-mvc.xml中:   <context:component-scan base-package='com.brolanda.cloud'   use-default-filters='false'>        <context:include-filter expression='org.springframework.stereotype.Controller'    type='annotation' />   </context:component-scan>
FIddler+Proxifer 实现PC客户端抓包详细教程 阅读详情

相关推荐

ECharts 实现世界地图

效果图 源代码(仅供参考) <template> <div class="echarts"> <div class="className" id="id" style="width: 100%; height: 450px" ref="myEchart" ></div> </div> </template> <script lang="ts"> imp

EsquireY的博客 4874

SpringMVC理解之一:应用上下文webApplicationContext

一、先说ServletContext   javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的。 举例: 通过自定义contextListener获取web.xml中配置的参数 1.容器启动时,找到配置文件中的context-param作为键值

xuyan5971的博客 569

ANSYS Workbench对称分析进阶:手把手教你用Pre-Meshed Cyclic Region处理外部导入的复杂网格模型

本文详细介绍了ANSYS Workbench中Pre-Meshed Cyclic Region功能在处理外部导入复杂网格模型时的应用。通过循环对称分析技术,可显著减少计算资源消耗,特别适用于叶轮机械、齿轮组等周期性结构分析。文章深入解析了该功能的底层逻辑,并提供了从NASTRAN文件导入的离心压缩机叶轮案例,帮助工程师克服网格匹配难题。

weixin_28630185的博客 312

spring容器和上下文的理解

spring容器和上下文的理解 spring的核心那就是容器,类似工厂的地方,应用程序中那么多对象的产生销毁,肯定需要一个地方来专门处理–容器,有一个很大家很熟悉的容器,tomcat,它是servlet的web容器,容器负责了对象整个的生命周期--------创建、装配、销毁,有一个专业的术语来形容spring容器----IOC容器,IOC是指我们在开发的过程中不用管对象的创建这些,都交给容器去处...

Crush_kylin的博客 606

Python自动化批量识别化学分子结构——从图片到SMILES/SDF的实战指南

本文提供了使用Python自动化批量识别化学分子结构图片的实战指南。详细对比了基于Molvec API的在线快速方案与本地部署OSRA工具的两种路径,包含完整的代码示例、环境配置及优化技巧,帮助化学研究者高效地将图片批量转换为SMILES或SDF格式,显著提升数据处理效率。

apple5的专栏 942

Stata面板数据OLS回归分析实战指南

OLS回归作为计量经济学的核心分析方法,通过最小化残差平方和实现参数估计,广泛应用于经济学实证研究。其技术价值在于模型简洁、结果易于解释,特别适合处理面板数据中的复杂关系。在实际应用中,配合robust标准误能有效解决异方差问题,而固定效应模型则可控制个体特异性。本文以Stata软件为例,详细演示从数据导入、描述性统计到混合OLS和固定效应模型构建的全流程,重点解析面板数据特有的格式设定、模型选择标准以及结果呈现技巧,为经济学研究者提供可直接复用的分析框架。

weixin_29051811的博客 268

getParameter()与getInitParameter()详解

- getParameter() 它用来获取客户端通过get或post方法等传递过来的值,是从客户端传递过来的,一般指的是客户端提交的表单组件的值。 - getInitParameter() 它用来获取Servlet的配置文件的初始化参数的信息,也就是我们自己的web应用程序根目录下的WEB- INF目录下的web.xml文件中的初始化参数信息。 getInitParameter()方法是在Gen...

ngc_1277 2869

Backblaze 2025全年硬盘故障率报告解读

作为长期追踪存储行业动态的科技博主,每年/季度Backblaze的Drive Stats报告都是我重点关注的核心内容——不同于厂商发布的实验室数据,Backblaze以近13年、数十万片企业级硬盘的真实运行数据为基础,其年化故障率(AFR)、寿命趋势等结论,直接反映了硬盘在严苛数据中心环境下的真实表现,无论是企业存储选型还是个人高端存储参考,都具备极高的实用价值。2025年末,Backblaze发布了第13年的年度收官报告,涵盖2025年Q4、全年及终身硬盘可靠性数据。

存储随笔 4014

获取使用初始化参数:getInitParameter

实现类: public class GetServlet_02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context=this.getServletContext(); String

qq_50909707的博客 550

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

【2026年华为秋招(AI)-2月4日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要:本文包含20道选择题,涵盖机器学习、线性代数、Transformer架构、概率统计等多个领域。题目涉及正交矩阵性质、Transformer注意力机制、聚类距离度量、ReAct框架、Softmax函数、混淆矩阵计算、Flash-Attention优化、位置编码、期望计算、归一化方法、矩阵迭代法、矩阵秩、大模型架构、神经网络推理、泊松流性质、SVM核函数以及聚类算法等知识点。每道题均提供解析,帮助理解核心概念和解题思路。

m0_73659489的博客 125

【JavaWeb】Servlet学习笔记-3

一、学习前准备 二、ServletContext对象及其应用 三、问题解决 1.maven视图module名为灰白色且TomCat没有02_servlelt的war包问题的解决方式 2.若在java文件夹中新建了properties文件没有在target中生成对应的文件,需要在pom.xml中如下设置 3.getResourceAsStream("/WEB-INF/classes/db.properties")中的地址是target中的classespath

qq_1336713490的博客 407

当C#遇见声音魔法:从麦克风到文字的0.1秒奇幻漂流

为什么选300Hz?因为人声基频通常在85-255Hz,但清脆的“啊”可能到2kHz,所以300Hz是安全区!(参考知识库[1])

墨夶的博客 365

SpringMvc框架(IoC容器上下文和映射请求上下文)

目录,更新ing,学习Java的点滴记录   目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录 SpringMvc知识 第一篇---->SpringMvc初识|MVC|三层架构 第二篇---->IoC容器上下文和映射请求上下文 1 引入 看过第一篇的小伙伴不知是否还记得web.xml中配置的内容呢?重新贴一下配置内容回顾一下    当时入门案例里面用不到SpringIOC容器,所以SpringIOC容器的初始化时被注释掉的,打开注释也没关系,只需要在/WEB-

qq_41649001的博客 1034

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

认识SpringIOC容器

一、SpringFrameWork. 二、SpringIOC容器. 三、SpringIoc的核心功能

Alphamilk的博客 287

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring IoC容器和SpringMVC IoC容器的关系

要想很好理解这两个容器的关系,需要先熟悉Spring是怎样在web容器中启动起来的。Spring的启动过程其实就是其IoC容器的启动过程。 Spring的启动过程: 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的Spring IoC容器提供宿主环境; 其次,在web.xml中会提供有Context...

蓝田日暖玉生烟 1772

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

springMVC初始化和流程(二)

一、Spring MVC初始化配置   上一篇已经介绍了Spring MVC的执行流程。这篇主要介绍Spring MVC 的初始化。Spring MVC的配置一般是在web.xml中配置系统变量contextConfigLocation和DispatcherSevlet,配置内容如下: 配置方法一:通过初始化DispatcherServlet然后初始化contextConfigLocati...

weixin_30289831的博客 91

SpringMVC子父容器源码剖析

SpringMVC子父容器源码剖析(未完待续)

chuanchengdabing的博客 249

SpringMVC学习之04 XML和java配置方式配置DispatcherServlet并整合SpringIoC容器【详细】

基于XML配置DispatcherServlet并整合Spring IoC容器 Spring MVC的核心就是前端控制器DispatcherServlet,它显然是一个Servlet,需要进行配置以便由Servlet容器(比如Tomcat)来加载并管理。 那么如何配置DispatcherServlet让Servlet容器加载呢?显然不能在其源码中加上注解,因此只能使用部署描述符web.xml了。 不过,Spring MVC也提供了一种基于Java来配置DispatcherServlet的方式,实际上底层是基

Coding马+ 439

SpringIoC和SpringMVC的快速入门

Spring的优势? 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 可以使用容易提供的众多服务,如事务管理,消息服务等 容器提供单例模式支持 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 Spring的IoC机制降低了业务对象替换的复杂性 容器提供了众多的辅助类,能加快应用的开发 Spring对于主流的应用框架提供了集成支持,如Hibernate,JPA,Mybati...

全菜工程师小辉的博客 6044

Spring MVC上下文容器在Web容器中是如何启动的(源码深入剖析)?

本文深入解析了Spring MVC在Tomcat等Web容器中的启动过程,重点阐述了父子容器的协作机制。

张小洛的BOLG 840

SSM-SpringMVC-SpringMVC初始化-初始化映射请求上下文

SSM-SpringMVC-SpringMVC初始化-初始化映射请求上下文 ​ 映射请求上下文是通过DispatcherServlet初始化的,根据自己的需要配置启动时初始化,或者等待用户第一次请求时进行初始化。在WEB工程中没有注册ContextLoaderListener,这时DispatcherServle就会在其初始化对SpringIOC进行初始化 选择什么时候初始化: ​ 大部分情况下,让DispatcherServle在服务器启动期间就完成SpringIoc容器初始化,可以在WEB容器刚开始就

weixin_43958223的博客 385

spring容器和springmvc容器,以及web容器的关系

说到spring和springmvc,其实有很多工作好多年的人也分不清他们有什么区别,如果你问他项目里用的什么MVC技术,他会说我们用的spring和mybatis,或者spring和hibernate。 在潜意识里会认为springmvc就是spring,之前我也是这么认为的,哈哈。    虽然springMVC和spring有必然的联系,但是他们的区别也是有的。下面我就简单描述下   首...

u010325193的博客 302

Spring IOC容器、Servlet容器、HTTP请求到响应过程

复习Spring与SpringBoot的时候,遇到了概念上的疑惑,现根据一些博客上的信息写下自己对Spring IOC容器、Servlet容器、HTTP请求到响应过程方面的理解。 1、应用上下文(ApplicationContext)是Spring IOC容器表现形式之一,另一个是BeanFactory 2、BeanFactory基本上已经很少使用了,因为其比应用上下文使用起来更复杂 3、S...

TIMFannie的博客 382

springioc和springmvc ioc初始化过程

【spring ioc容器】 1.程序启动时,web服务器读取web.xml配置文件,并实例化listener节点; 2.根据contextConfigLoaction,读取spring配置文件的路径,将配置的bean信息加载到webapplicationcontext中,将WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE作为ke...

yu_gb的专栏 411

SpringMVC的学习(二)--SpringMVC的初始化和源码分析

一、Spring MVC的初始化 Spring MVC的初始化主要有两部分组成: 1、初始化Spring IoC:通过配置ContextLoderListener完成。 在spring Web中,需要初始化IOC容器,用于存放我们注入的各种对象。当tomcat启动时首先会初始化一个web对应的IOC容器,用于初始化和注入各种我们在web运行过程中需要的对象。当tomcat启动的时...

LinDongTian 223
上一篇: 数据库(MySQL)的优化技巧
下一篇: 回顾与展望
CallMeJiaGu
博客等级 码龄12年 149粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值