tomcat的servletContext、dispatcherServlet和web应用的ApplicationContext、webApplicationContext的区别

接触Spring初期的时候,基本上是只学会怎么用Spring mvc或者Spring boot框架来搭建一个web应用,跟着写一些配置,但是没有太弄明白每个配置的意义,为什么要有这样的配置,是否必须要有,特别是神秘的ApplicationContext,似乎是抓不着,但是又处处都要使用到它,那么经常看到的servletContext、dispatcherServlet、ApplicationContext、webApplicationContext到底是什么呢?

首先我们明确一个东西,那就是servlet(例如servletContext、dispatcherServlet)是一个与平台无关的web组件,用于接收并响应请求,一般由web容器(例如tomcat)来管理servlet的生命周期,而ApplicationContext是web应用上下文环境,用于管理web应用中的bean对象的生命周期,servlet是ApplicationContext在web容器的宿主环境。

那么什么是tomcat?tomcat是一个web容器,当一个http请求到达web容器,它会将这个请求封装成httpServletRequest发送给web应用,其实是转发给对应的web Application Context,执行对应的controller对象中的方法,而web Application Context又可以调用Application Context中的bean,因为Application Context(父上下文)是一个全局的bean容器。

那servletContext和dispatcherServlet又分别是什么呢?servletContext是tomcat创建的一个全局的应用环境,是Application Context的宿主环境,而dispatcherServlet是Web Application Context的宿主环境。

在spring中,Application Context和Web Application Context是两种不同的容器,他们的配置和初始化都是不同的。

Application Context是由 ContextLoaderListener或ContextLoaderServlet初始化的,他们在web.xml中由<listener/>标签指定, ContextLoaderListener有两个作用,一个是创建一个上下文(applicationContext,AC),并将它关联到servletcontext中,另一个是根据<context-param/>标签中的指定xml文件实例化其中的bean(实际上是controller一下层的所有bean),并把实例化的bean关联到根上下文。一个应用只有一个Application Context。但是Application Context也不是必须有的(unnecessary),因为Application Context主要管理的是所有web servlet可以公用的bean,如果只有一个web servlet且bean不是特别多的话可以不用Application Context。

Web Application Context是Application Context的子上下文,在web.xml文件中由<servlet/>标签指定,一个DispatcherServlet关联一个Web Application Context,该servlet创建一个Web Application Context,并根据<servelrt/>标签的子标签<init-param/>指定的文件实例化其中的bean(controller层的bean),这些bean关联到Web Application Context中。一个应用可以有多个Web Application Context。

这样分离开的好处是根Application Context不用管上层(controller)是怎么实现的(不管是struct还是Spring mvc)。

那么父子Application Context的关系是怎样的呢?子上下文可以调用父上下文中定义的bean,但是反之则不行

 

ref:https://www.codesenior.com/en/tutorial/Spring-ContextLoaderListener-And-DispatcherServlet-Concepts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值