SpringMVC之DispatcherServlet

前言

本文参考自《看透SpringMVC》韩路彪著;SpringMVC版本为4.2.6。

简介

DispatcherServlet是SpringMVC最核心的类,处理请求的整个过程的顶层设计都在这个类中。

类图

这里写图片描述

核心方法

重要概念
Handler(干活的工具)
处理器;对应Controller层,有多种表现形式(可以是类或方法等等),类型为Object

HandlerMapping(根据干的活去找对应工具的方法)
用来查找Handler;每一个请求都需要一个Handler来处理,接收到一个请求过后,具体使用哪个Handler来处理呢?这就是HandlerMapping要做的事情

HandlerAdapter(使用工具干活的人)
Servlet处理方法的结构是固定的,都是以Request和Response为参数的方法。而HandlerAdapter让处理变得更加灵活

initStrategies

初始化SpringMVC策略组件,入口是在HttpServletBean的init方法,各组件默认配置在spring-webmvc-4.2.6.RELEASE.jar里面的DispatcherServlet.properties中。

protected void initStrategies(ApplicationContext context) {
        //处理上传请求,没有默认配置
        initMultipartResolver(context);
        //从Request中解析出Locale
        initLocaleResolver(context);
        //主题解析
        initThemeResolver(context);
        //映射处理器,从Request中查找Handler和Interceptors
        initHandlerMappings(context);
        //处理器适配,使用Handler执行具体的业务逻辑
        initHandlerAdapters(context);
        //解析请求过程中产生的异常
        initHandlerExceptionResolvers(context);
        //Handler返回View为空时,根据request获取viewName
        initRequestToViewNameTranslator(context);
        //视图解析器
        initViewResolvers(context);
        //用来管理FlashMap,而FlashMap用于在Redirect时传递参数
        initFlashMapManager(context);
    }

doDispatch

此方法非常简洁,包含整个请求的处理过程,核心代码只有4句。

  • 根据Request找到Handler列表内容
    mappedHandler = getHandler(processedRequest);

  • 根据Handler找到对应的HandlerAdapter
    HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());

  • 用HandlerAdapter处理Handler
    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

  • 找到View并渲染输出
    processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值