applicationContext.xml、dispatcher-servlet.xml 和 web.xml 的区别和联系

声明:使用deepseek 整理,个人备忘,仅供参考

1. web.xml(Servlet 容器配置文件)

作用

  • 是 Java Web 应用的标准配置文件,由 Servlet 规范 定义,所有 Java Web 项目都必须有(Servlet 3.0+ 后可以省略,改用注解)。

  • 主要用于 配置 Servlet、Filter、Listener 等 Web 组件。

  • 在 Spring MVC 中,它通常用于:

    • 配置 ContextLoaderListener(加载根 ApplicationContext)。

    • 配置 DispatcherServlet(前端控制器,处理 HTTP 请求)。

典型配置示例 

<web-app>
    <!-- 1. 配置 Spring 的根上下文(applicationContext.xml) -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <!-- 2. 配置 ContextLoaderListener,初始化根 Spring 容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- 3. 配置 DispatcherServlet,并指定它的配置文件(dispatcher-servlet.xml) -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

特点

  • 必须符合 Servlet 规范,文件名和位置固定(WEB-INF/web.xml)。

  • Servlet 3.0+ 可以用注解(@WebServlet)替代,但传统项目仍然使用 web.xml

2. applicationContext.xml(根 Spring 容器配置)

作用

  • 是 Spring 的全局配置文件,由 ContextLoaderListener 加载。

  • 通常用于 配置业务层(Service)、数据层(DAO)、事务管理、数据源等

  • 整个应用共享,可以被多个 DispatcherServlet 访问。

典型配置示例

<beans> 
    <!-- 数据源配置 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean> 
    <!-- 事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean> 
    <!-- Service 层 Bean -->
    <bean id="userService" class="com.example.service.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>

特点

  • 由 ContextLoaderListener 加载,在 web.xml 中通过 <context-param> 指定路径。

  • 全局可见,可以被多个 DispatcherServlet 共享。


3. dispatcher-servlet.xml(Spring MVC 容器配置)

作用

  • 是 Spring MVC 的配置文件,由 DispatcherServlet 加载。

  • 通常用于 配置控制器(Controller)、视图解析器(ViewResolver)、拦截器(Interceptor)等

  • 每个 DispatcherServlet 可以有独立的配置(默认加载 /WEB-INF/[servlet-name]-servlet.xml)。

典型配置示例

<beans>
    <!-- 启用注解驱动的 Controller -->
    <mvc:annotation-driven />

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 扫描 Controller -->
    <context:component-scan base-package="com.example.controller" />

    <!-- 静态资源处理 -->
    <mvc:resources mapping="/static/**" location="/static/" />
</beans>

特点

  • 由 DispatcherServlet 加载,在 web.xml 中通过 <init-param> 指定路径。

  • 默认命名规则[servlet-name]-servlet.xml(如 dispatcher-servlet.xml)。

  • 只管理 Web 层(Controller),不包含 Service/DAO 层。

 三者的关系和区别

文件加载方式作用范围典型用途
web.xmlServlet 容器自动加载整个 Web 应用配置 DispatcherServletContextLoaderListener、Filter 等
applicationContext.xmlContextLoaderListener 加载全局(根容器)配置 Service、DAO、数据源、事务等
dispatcher-servlet.xmlDispatcherServlet 加载当前 Servlet(子容器)配置 Controller、ViewResolver、Interceptor 等

关键点

  1. 父子容器关系

    • applicationContext.xml → 根容器(父容器),管理 Service/DAO。

    • dispatcher-servlet.xml → 子容器,管理 Controller,可以访问父容器的 Bean,但父容器不能访问子容器的 Bean。

  2. 加载顺序

    • web.xml → ContextLoaderListener(加载 applicationContext.xml)→ DispatcherServlet(加载 dispatcher-servlet.xml)。

  3. 现代 Spring Boot 项目

    • 不再使用 web.xml(改用 Java Config 或自动配置)。

    • applicationContext 和 DispatcherServlet 配置合并(通常用 @Configuration 类替代)。


总结

  • web.xml:Servlet 容器的入口,配置 DispatcherServlet 和 ContextLoaderListener

  • applicationContext.xml:Spring 的全局配置(Service/DAO 层)。

  • dispatcher-servlet.xml:Spring MVC 的 Web 层配置(Controller/ViewResolver)。

  • 现代 Spring Boot 项目 通常不再手动配置这些文件,而是使用 Java Config(@Configuration)和自动配置

如果你使用的是 Spring Boot,大部分配置已经自动化,只需要关注  application.properties  或  application.yml  即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值