springmvc中的三个上下文

本文介绍了在Web项目中Spring MVC中的三个关键上下文:Servlet上下文、Spring上下文和Spring-MVC上下文。Servlet上下文由Web容器提供,作为Spring IoC容器的宿主环境。Spring上下文由ContextLoaderListener初始化,形成IoC容器,用于管理Bean。Spring-MVC上下文则主要处理请求分发,由DispatcherServlet负责,是Spring上下文的子容器,各自负责不同的组件创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

在我们的web项目中存在至少三个上下文,分别是【servlet上下文】,【spring上下文】以及【springmvc上下文】,具体如下:

三个上下文之间的关系

servlet上下文

  • 对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是我们的ServletContext,其为后面的spring IoC容器提供一个宿主环境。

spring上下文

  • 在web.xml的配置中,我们需要提供一个监听器【ContextLoaderListener】。在web容器启动时,会触发【容器初始化】事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用。
    在这个方法中,spring会初始化一个【上下文】,这个上下文被称为【根上下文】,即【WebApplicationContext】,这是一个接口类,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的【context-param】配置指定,默认配置文件为【/WEB-INF/applicationContext.xml】。
    在这个IoC容器初始化完毕后,spring以【WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE】为属性Key,将其存储到ServletContext中,便于将来获取;
<!--配置一个ContextLoaderListener,他会在servlet容器启动时帮我们初始化spring容器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--指定启动spring容器的配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/app-context.xml</param-value>
    </context-param>

spring-mvc上下文

  • 配置的内容大多数servlet,和请求的分发有关
  • contextLoaderListener监听器初始化完毕后,开始初始化web.xml中配置的Servlet,这个servlet可以配置多个,通常只配置一个,以最常见的DispatcherServlet为例,这个servlet实际上是一个【标准的前端控制器】,用以转发、匹配、处理每个servlet请求。
  • spring-mvc上下文和spring的上下文是放在一起的

注:springMVC容器只负责创建Controller对象,不会创建service和dao,并且他是一个子容器。而spring的容器只负责Service和dao对象,是一个父容器。子容器可以看见父容器的对象,而父容器看不见子容器的对象,这样各司其职。

    <!--注册DispatcherServlet,这是springmvc的核心-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置springmvc上下文的路径-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/app-context.xml</param-value>
        </init-param>
        <!--加载时先启动-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--/ 匹配所有的请求;(不包括.jsp)-->
    <!--/* 匹配所有的请求;(包括.jsp)-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值