JavaWeb 之web.xml配置中contextConfigLocation属性详解

ARM SMMUv3设备树配置实战:从零开始为RK3588搭建IOMMU环境 本文详细介绍了在RK3588平台上配置ARM SMMUv3设备树的实战经验。从理解硬件架构、设备树节点定义,到内核驱动集成与调试,提供了完整的IOMMU环境搭建指南,并分享了解决StreamID冲突、中断配置等常见问题的技巧,帮助开发者高效完成控制器初始化。 阅读详情


contextConfigLocation一般配置在context-param标签中,下面首先了解context-param标签作用和Web初始化的简单过程。

context-param标签作用

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:spring-basic.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。

  • param-name:设定上下文的参数名称,必须是唯一名称。
  • param-value:设定的参数名称的值。

Web项目初始化过程

  • 启动一个WEB项目的时候,容器(比如:Tomcat)会读web.xml配置文件中的两个节点和。
  • 接着容器会创建一个ServletContext(上下文),整个WEB项目所有部分都将共享这个上下文。
  • 接着容器会将<context-param></context-param>转化为键值对,并交给ServletContext。
  • 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
  • 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param设定的值。
  • 得到这个context-param的值之后,你就可以做一些操作了。注意,这个时候你的WEB项目还没有完全启动完成,这个动作会比所有的Servlet都要早。换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行。
  • 举例,你可能想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它还有销毁方法。用于关闭应用前释放资源,比如说数据库连接的关闭。

由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

获取context-param定义的属性值

页面中:
${initParam.contextConfigLocation}
Servlet中:
String paramValue = getServletContext().getInitParameter(“contextConfigLocation”);

容器加载过程

  • Root WebApplicationContext:这是对J2EE三层架构中的service层、dao层进行配置,如业务bean,数据源(DataSource)等。在web应用中,其一般通过ContextLoaderListener监听器来加载,通过contextConfigLocation指定配置文件。
  • Servlet WebApplicationContext:这是对J2EE三层架构中的web层进行配置,如控制器(controller)、视图解析器(view resolvers)等相关的bean。通过spring-mvc中提供的DispatchServlet来加载配置,也是通过contextConfigLocation指定配置文件配置文件,默认名称为<servlet-name>-servlet.xml。

1、ContextLoaderListener会被优先加载,初始化时,其会根据context-param元素中contextConfigLocation参数指定的配置文件路径,来创建WebApplicationContext实例。 并调用ServletContext的setAttribute方法,将其设置到ServletContext中,属性的key为org.springframework.web.context.WebApplicationContext.ROOT,最后的ROOT字样表明这是一个 Root WebApplicationContext。

2、DispatcherServlet在初始化时,会根据元素中contextConfigLocation参数指定的配置文件路径,来创建Servlet WebApplicationContext。同时,其会调用ServletContext的getAttribute方法来判断是否存在Root WebApplicationContext。如果存在,则将其设置为自己的parent。这就是父子上下文(父子容器)的概念。
父子容器的作用在于,当我们尝试从child context(即:Servlet WebApplicationContext)中获取一个bean时,如果找不到,则会委派给parent context (即Root WebApplicationContext)来查找。

3、如果我们没有通过ContextLoaderListener来创建Root WebApplicationContext,那么Servlet WebApplicationContext的parent就是null,也就是没有parent context。

Root WebApplicationContext创建过程源码分析

ContextLoaderListener用于创建ROOT WebApplicationContext,其实现了ServletContextListener接口的contextInitialized和contextDestroyed方法,在web应用启动和停止时,web容器(如tomcat)会负责回调这两个方法。而创建Root WebApplicationContext就是在contextInitialized中完成的,相关源码片段如下所示:
在这里插入图片描述
可以看到ContextLoaderListener继承了ContextLoader类,WebApplicationContext的创建是在ContextLoader的initWebApplicationContext方法中完成的,关键代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Servlet WebApplicationContext创建过程源码分析

其实就是SpringMVC初始化过程。
SpringMVC通过web.xml文件中servlet标签下的DispatcherServlet类完成自身的初始化。

每个servlet在初始化时,会先调用servlte的构造函数(为默认构造函数),接着调用init函数,而DispatcherServlet的init方法在其父类HttpServletBean中。

// DispatcherServlet第一次加载时调用init方法
@Override
public final void init() throws ServletException {
    if (logger.isDebugEnabled()) {
        logger.debug("Initializing servlet '" + getServletName() + "'");
    }
    // Set bean properties from init parameters.
    try {
		/*加载web.xml文件中的servlet标签中的init-param,其中含有springMVC的配置文件的名字和路径
		*若没有,则默认为(servlet-name)-servlet.xml,
		*默认路径为WEF—INF下
		*/
        PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
     	//创建BeanWrapper实例,为DispatcherServlet设置属性
        BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
        ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
        bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
        initBeanWrapper(bw);
     	//把init-param中的参数设置到DispatcherServlet里面去
        bw.setPropertyValues(pvs, true);
    }
    catch (BeansException ex) {
        logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
        throw ex;
    }

    // Let subclasses do whatever initialization they like.
    //该方法在FrameworkServlet中
    initServletBean();

    if (logger.isDebugEnabled()) {
        logger.debug("Servlet '" + getServletName() + "' configured successfully");
    }
}

FrameworkServlet中的initServletBean方法:
在这里插入图片描述

参考:
https://www.cnblogs.com/yaoyiyao/p/7198076.html
https://www.cnblogs.com/jiaguozhilian/p/5819032.html

【VibeCoding系列】小白入门指南:模型选择、编辑器选择、项目预定全分析 开箱即用:下载安装就能用,不用配 API Key(也可以自己配)Cmd+K 快速修改:选中代码,按 Cmd+K,直接让 AI 修改Cmd+L 对话:侧边栏聊天,支持引用文件和代码@文件引用:输入 @ 就能引用项目中的文件,AI 自动读取上下文Agent 模式:告诉 AI 一个需求,它自动跨文件修改下载地址cursor.com(免费版有额度限制,足够入门)✅下载 Cursorcursor.com),安装打开✅选一个小项目(个人名片页 or Todo List)✅按照七步工作流开干。 阅读详情

相关推荐

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

web.xml中contextConfigLocation的作用

在web.xml中通过contextConfigLocation配置spring,contextConfigLocation参数定义了要装入的 Spring 配置文件。   部署applicationContext.xml文件         如果不写任何参数配置,默认的是在/WEB-INF/applicationContext.xml        如果指定了要加载的文件,则会去加载相应的...

elice_的博客 1万+

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

web.xml中的contextConfigLocation

这几天在看spring的源码,涉及到spring启动位置的部分,下面就看看spring到底是从哪儿开始加载的。本文使用的是spring3.0M3 首先spring的加载会借助一个监听器ContextLoaderListener,直接上web.xml文件 Xml代码  &lt;listener&gt;      &lt;listener-class&gt;org.springframework.we...

yilaguandemei的博客 1204

1.3 重叠因子:希尔伯特变换趋势线(Hilbert Transform - Instantaneous Trendline)概念与Python实战

希尔伯特变换趋势线(Hilbert Transform - Instantaneous Trendline)是一种基于希尔伯特变换的高级技术分析工具。它使用数字信号处理技术来识别价格的主导周期,并生成一条平滑的趋势线。这种方法可以有效过滤市场噪音,提供更准确的趋势信号。

Kewin的博客 2084

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1247

spring----contextConfigLocation

web.xml里的contextConfigLocation参数定义了要装入的 Spring 配置文件。 xml代码类似如下: org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB

我爱小源的专栏 595

UFS软件分区介绍

本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识

肥匪斐's blogs 1万+

web应用的入口:web.xml核心配置文件详解

前言:如果要了解web项目的底层实现,web.xml配置文件,是必须要掌握的。web.xml配置文件,是web项目的核心,web项目的启动,从这里开始。 为了方便大家理解,我们从最常见的配置开始着手来说明。 一,contextConfigLocation contextConfigLocation用来配置自定义的配置文件的加载路径,如果指定了contextConfigLocati

reggergdsg的博客 8288

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1155

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

详解contextConfigLocation

spring的应用初始化流程一直没有搞明白,刚刚又碰到了相关的问题。决定得好好看看这个流程。我们在开发spring的项目当中基本上都会在web.xml通过: [html] view plaincopy context-param>           param-name>contextConfigLocationparam-name>

Happy_wu的专栏 3062

使用pyqt5实现可勾选的测试用例界面

使用pyqt5实现可勾选的测试用例界面

天赐好车的博客 629

java Web项目javaEE中web.xml文件中配置 contextConfigLocation 方法

java Web项目web.xml文件中配置contextConfigLocation方法 一、 web.xml中 classpath: 和 classpath*: 有什么区别? 1、classpath: 只会到你的项目class路径中查找找文件; 2、classpath*: 不仅包含class路径,还包括jar文件中(class路径)进行查找.二、 用模糊匹配的方式配置多配置文件1、...

HaHa_Sir的博客 2275

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

在web.xml中通过contextConfigLocation配置spring

开发Java Web程序,使用ssh架构时,默认情况下,Spring的配置文件applicationContext.xml存放在 项目下的“web-inf/applicationContext.xml”目录下,默认时,Spring会加载这个文件,完成Spring的配置。 如果想改变配置文件的名称,或者想添加多个Spring的配置文件,则可以通过如下方式添加。 在web.xml文件中添加如下内...

Tommy5553的博客 532

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

javaweb中spring出现parsing XML document from class path resource [applicationContext.xml]异常

第一次在javaweb项目中使用spring可能会碰到下面的一个异常: 严重: Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applica...

星月昭铭的博客 8078

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

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

JavaWeb项目 在web.xml中设置读取application.xml

JavaWeb项目 在web.xml中设置读取application.xml

_修铁路的、的博客 3994

Spring引入多个XML配置文件

在开发JavaWeb项目时,当在项目中使用Spring框架,同时拥有多个Spring配置文件时,如下图: 那么在web.xml配置文件中该如何引入多个Spring配置文件来初始化Spring容器,下面介绍三种方法: 方式一:在web.xml中通过<context-param> 标签引入中使用/*符号。 <!-- 自定义Spring主配置文件的位置 --> &l...

pan_junbiao的博客 3432

【SpringMVC】关于classpath和contextConfigLocation

众所周知,基本上javaee的配置文件都放在WEB-INF之下,javaee网页工程默认读取配置文件也只会在这个目录下面读,但经常看到一些javaee不知道是装逼,还是因为用myeclipse自动生成,还是为了好管理的原因,将工程的配置文件移到其它文件夹,他们基本利用了SpringMVC的contextConfigLocation去完成这件事,contextConfigLocation下面常常也伴

编程记录,亲测有效 1万+

java项目web.xml_javaweb 项目web.xml配置

loginDevelop Example JSP 2.0 Tech Book's Examples /images/1.gif/images/2.gifcontextConfigLocation classpath*:spring-mybatis.xml,classpath*:spring-context-shiro.xml CharacterEncodingFilter org.s...

weixin_33363265的博客 107

二、SpringMVC-.xml的配置

在WEB-INF文件夹下建立templates夹(与Thymleaf模板整合使用),在templates下建立的文件可用Thymleaf解析。这样对于SpringMVC的配置,只需放入SpringMVC.xml里面即可,web.xml可以保存下来。SpringMVC配置文件放到resources下面。

ccb1372098的博客 1854

Java-29 深入浅出 Spring - IoC 基础 启动IoC容器的方式 Java方式与Web(XML、配置)方式

Spring IoC 容器是 Spring 框架的核心,理解 BeanFactory 与 ApplicationContext 的区别是 Java 后端开发者的必修课。本文基于 Spring Framework 5.1.12.RELEASE(2019 年末发布的 5.1.x 稳定线版本,5.1.13.RELEASE 于 2020-01-14 作为最终维护版本发布),系统讲解两者的继承关系、功能差异和典型使用场景。BeanFactory 作为 IoC 容器顶层接口,提供延迟加载的 Bean 管理能力,适合底层

谢谢你的喜欢 我们一起无限进步 1万+

Spring MVC的web.xml配置详解

spring是目前最流行的框架。创建java web项目时,我们首先会遇到的配置文件就是web.xml,这是javaweb为我们封装的逻辑,不在今天的研究中。下面我们将简单讲讲web.xml中的配置。一、一个空的web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns:xsi="http://www.w3.o

Liuqz2009的专栏 2032

javaweb中web.xml文件的servlet配置

  &lt;servlet&gt; &lt;servlet-name&gt;springmvc&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; &lt;!-- 默认找 /WEB-INF/[servl...

qq_38497266的博客 829

Web项目中applicationContext.xml放在src下

applicationContext.xml放在src下 在web.xml中加入 contextConfigLocation /WEB-INF/classes/applicationContext.xml

zhubinqiang的专栏 4725

spring的配置文件在web.xml中加载的方式

web.xml加载spring配置文件的方式主要依据该配置文件的名称和存放的位置不同来区别,目前主要有两种方式。1.如果spring配置文件的名称为applicationContext.xml,并且存放在WEB-INF/目录下,那么只需要在web.xml中加入以下代码即可   org.springframework.web.context.ContextLoaderListener 该监听器会自

葫芦娃的博客 667
上一篇: Mysql 之基于SpringBoot实现读写分离
下一篇: Spring 之Spring与SpringMVC父子容器详解
yyangqqian
博客等级 码龄15年 406粉丝 406原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值