Spring mvc 核心 DispatcherServlet 详解

文章详细介绍了SpringMVC的核心ServletDispatcherServlet,包括其作为前端控制器的角色、配置方式、容器的上下文层次结构、特殊类型的Beans如webmvc组件、请求处理流程、路径映射、拦截器的使用以及异常处理策略。此外,还提到了配置DispatcherServlet的不同方法和WebApplicationContext的层次结构对于多DispatcherServlet共享配置的支持。

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

目录

1、核心Servlet:DispatcherServlet 介绍

2、DispatcherServlet 容器的上下文层次结构

3、特殊类型的 Beans(web mvc 组件)

4、Web MVC 的一些基础配置项

5、Servlet Config 容器的配置

6、DispatcherServlet 请求处理过程

7、有关路径映射的问题

8、拦截器

9、异常处理


1、核心Servlet:DispatcherServlet 介绍

        与许多其他的 web 框架一样,Spring MVC 也是围绕前端控制器模式设计的,核心的 Servlet DispatcherServlet 为请求处理提供了共享算法,但是实际工作由可配置的委托组件执行的。这种设计非常灵活,可以支持不同的工作流。// 核心Servlet,其他组件可配置

        DispatcherServlet 和其他 Servlet 一样,也需要通过一些配置去发现它的委托组件(请求映射、视图解析、异常处理等组件),这些配置可以是 Java 代码,也可以是 web.xml 文件。// 通过配置发现组件

        下面是通过 Java 代码注册和初始化一个 DispatcherServlet 的例子,这些配置信息会被 Servlet 容器自动进行检测:

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) {

        // 加载Spring web应用程序配置
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(AppConfig.class);

        // 创建并注册DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(context);
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
        // 定义容器的初始化顺序
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}

2、DispatcherServlet 容器的上下文层次结构

        DispatcherServlet 需要通过 WebApplicationContext 来加载自己的配置。DispatcherServlet 的上下文结构:

        WebApplicationContext 的上下文结构:

        WebApplicationContext 可以通过 getServletContext() 方法访问到关联 Servlet 的上下文。通过 RequestContextUtils 工具类又可以访问到 WebApplicationContext。// Servlet 和上下文绑定

        对于许多应用程序来说,一个 WebApplicationContext 就足够了。但也可以使用一个带层次结构的上下文,在层次结构的上下文中,底层 WebApplicationContext 可以在多个 DispatcherServlet(或其他Servlet)之间进行共享,而每个 Servlet 又都可以有自己单独的子WebApplicationContext 配置。// 分层设计上下文

        底层  WebApplicationContext 通常包含一些基础设施的 Bean,比如跨多个 Servlet 共享的数据存储实例和业务服务等。这些 Bean 可以被有效地继承,并且在特定的 Servlet 的子WebApplicationContext 中进行重写(即重新声明),该子 WebApplicationContext 通常包含给定的 Servlet 的本地 Bean。下图显示了这种关系:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值