Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

内置容器源码解析:DispatcherServlet加载过程 DispatcherServlet的加载过程 DispatcherServlet 的获取 还 记 得 在 上 一 章 Web应 用 中 自 动 配 置 的 DispatcherServlet 和 DispatcherServletRegistra-tionBean 吗?当时只是将其实例化了,并未做其他处理。而在上节 WebServer 初始化的过程中又加载了它们。下面我们进行相关源码的解析。 在 ServletWebServerApplicationContext#createWebServer 方 阅读详情

点击查看原文地址

spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在
DispatcherServlet中也可以来加载spring context配置文件,那么这两个有什么区别呢。

ContextLoaderListener中加载的context成功后,spring 将 applicationContext存放在ServletContext中key值
为"org.springframework.web.context.WebApplicationContext.ROOT"的attribute中。
(servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context));可以通过
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)或
WebApplicationContextUtils.getWebApplicationContext(servletContext)方法来获取对应的applicationContext。

DispatcherServlet加载的context成功后,如果 publishContext属性的值设置为true的话(缺省为true) 会将applicationContext存放在
org.springframework.web.servlet.FrameworkServlet.CONTEXT. + (servletName)的attribute中。

例如 web.xml中配置如下 

Xml代码 
<servlet>  
    <servlet-name>mvcServlet</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <init-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath*:/spring/config/applicationContextMVC.xml</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
</servlet>  
则对应的applicationContext的attribute key值为org.springframework.web.servlet.FrameworkServlet.CONTEXT.mvcServlet。

  在每次request请求时,DispatcherServlet会将此applicationContext存放在request中attribute值为
org.springframework.web.servlet.DispatcherServlet.CONTEXT中
(request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE,getWebApplicationContext());)。
可以通过 RequestContextUtils.getWebApplicationContext 或 
WebApplicationContextUtils.getWebApplicationContext(servletContext,attrname)方法 来获取对应的applicationContext。

  从上面的分析可以看出,DispatcherServlet所加载的applicationContext可以认为是mvc私有的context,由于保存在servletContext中的key值与通过
  ContextLoaderListener加载进来的applicationContext使用的key值不相同,因此如果只使用DispatcherServlet加载context的话,如果程序中有地方使用

WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext) 来试图获取applicationContext时,就会抛出"No WebApplicationContext found: no ContextLoaderListener registered?"的exception。

这里做个说明
DispatcherServlet所加载的applicationContext可以认为是mvc私有的context。
通过web.xml配置ContextLoaderListener监听所加载的applicationContext,是共有的context。也就是说,DispatcherServlet的context是继承ContextLoaderListener的context。例如 DispatcherServlet 的上下文环境中有一个类Son,在ContextLoaderListener的上下文环境中是访问不到的。但是ContextLoaderListener的上下文环境中有一类Father,在DispatcherServlet 的上下文环境中是可以访问到的。

//通过request获取 应用上下文, MVC 私有bean
WebApplicationContext context = RequestContextUtils.getWebApplicationContext(request);
//通过ContextLoader获取根容器(必须在web.xml中配置ContextLoaderListener监听)
WebApplicationContext contextF = ContextLoader.getCurrentWebApplicationContext();
QT里获取UUID当做唯一文件名称 阅读详情

相关推荐

景区导览系统|景区展馆智能导览|小程序导览|电子导览手绘地图制作

AI 数字导游就像一位随时陪伴在游客身边的专属导游,能够根据游客的提问,迅速、准确地提供详细的景点介绍、历史文化知识讲解,甚至能根据游客的兴趣爱好和实时位置,为其智能规划个性化的游览路线。在手绘地图中可以显示景区中的景点信息、景点和景点之间的路径,也可以显示景区的关键地点信息:景区全景、植物景观、河流、道路、地形面貌、卫生间等公共设施~无论是景区还是展馆,道可云AI智能导览系统都能通过丰富的功能、先进的技术,为游客打造便捷、智能、个性化的游览体验,成为文旅行业数字化转型的得力助手。

道可云 1147

springMVC源码分析--DispatcherServlet请求获取及处理

springMVC源码分析--DispatcherServlet请求获取及处理

江南@风少的博客 372

SGLang:结构化生成语言推理框架深度解读

SGLang是由斯坦福大学和加州大学伯克利分校联合提出的高性能大语言模型推理框架,针对复杂多轮对话、结构化输出等场景优化。其核心创新包括: RadixAttention机制:通过基数树数据结构实现跨请求的KV Cache自动复用,避免重复计算共享前缀 跳跃前瞻解码:对格式化输出中的固定模板部分直接填充,仅采样变量槽位,提升3-5倍生成速度 约束解码引擎:通过正则表达式和JSON Schema保证输出严格符合预定义格式 声明式DSL:提供类Python的编程接口简化复杂推理流程开发 相比传统框架,SGLang

Ricky Yang的专栏 333

DispatcherServlet最全详解

【代码】DispatcherServlet最全详解。

小豪的博客 1869

C#中使用OpenCV的常用函数

c# opencv 常见操作

大黄鸭在发光的专栏 1080

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件,那么这两个有什么区别呢。 ContextLoaderListener中加载的context成功后,spring 将 applicationContext存放在ServletContext中ke

ichsonx的专栏 6023

CarPlay无线连接开发实战:从蓝牙EIR查询到iAP2认证的完整代码逻辑梳理

本文详细解析了无线CarPlay连接开发的完整流程,从蓝牙EIR查询到iAP2认证的代码实现。重点介绍了蓝牙握手、WiFi Beacon帧配置、热点信息准备等关键环节的实战技巧,帮助开发者快速搭建稳定可靠的无线CarPlay连接系统。

weixin_31534091的博客 323

Spring ContextLoaderListener 与 SpringMVC DispatcherServlet所加载的applicationContext的区别

本篇博客转载自 http://user.qzone.qq.com/413670706/blog/1471574740 Spring通过在web.xml 中配置Listenter : org.springframework.web.context.ContextLoaderListener 来加载spring context配置文件,SpringMVC也可以通过在web.xml 中配置Se

韶shls的博客 1364

脑机接口技术介绍、应用与挑战

脑机接口的概念最先于1973年提出,伴随着计算机性能的飞速提高,在美国“人类脑计划”的资金支持下,脑机接口的研究进入了高速发展期。去年年末,我国科技部会议透露:中国将拿出540亿元,推进中国脑计划的发展。同时,这一举措也推动了我国脑机接口的研究发展。 脑机接口属于多学科交叉科技,涉及神经科学、计算机科学、认知科学、控制与信息科学技术、医学等多个学科。技术实现方式是通过信号采集设备从大脑皮层采集脑电信号,经过放大、滤波、A/D转换等处理,转换为可以被计算机识别的信号,然后对信号进行预处理,提取特征信号,再利

weixin_44603934的博客 9132

别再手动建模了!用Simscape Multibody Link一键导入SolidWorks装配体到Simulink

本文介绍了如何利用Simscape Multibody Link插件将SolidWorks装配体一键导入Simulink,实现CAD到仿真的无缝衔接。该技术显著提升机械系统设计与控制效率,特别适用于工业机器人、车辆悬架等复杂机构的动力学分析。文章详细解析了插件安装、模型导出优化及仿真验证的全流程,帮助工程师摆脱手动建模的低效工作模式。

weixin_27256197的博客 463

[j2ee][spring]ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

原文地址:http://blog.youkuaiyun.com/ichsonx/article/details/7699093 spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件,那么这两个有什么区别呢。 ContextLoaderListene

wendellup的专栏 885

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ContextLoaderListener与DispatcherServlet

如果你的项目里spring都配置好了,但是在JSP里有这么一句:ApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(application);得到的context为null,那很有可能是你使用DispatcherServlet这种方式

石竹的专栏 1373

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: Web监听器导图详解
下一篇: ajax 跨域请求(后端语言为 Java)
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值