mvc源码

1.请求入口 DispatcherServlet

在这里插入图片描述

在这里插入图片描述
流程:

1、给Web项目中配置一个 DispatcherServlet,拦截 / 请求

2、初始化的时候 DispatcherServlet 会启动IOC容器,而且会 初始化他底层的九大组件

3、请求到来的时候,Tomcat找到 DispatcherServlet 能处理请求,交给他,DispatcherServlet调用底层的九大组件结合容器、自动装配、反射等功能进行请求处理

2.九大组件

protected void initStrategies(ApplicationContext context) {
        this.initMultipartResolver(context);
        this.initLocaleResolver(context);
        this.initThemeResolver(context);
        this.initHandlerMappings(context);
        this.initHandlerAdapters(context);
        this.initHandlerExceptionResolvers(context);
        this.initRequestToViewNameTranslator(context);
        this.initViewResolvers(context);
        this.initFlashMapManager(context);
    }
//全是接口
initMultipartResolver(context);

##以下都有默认功能
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
  • MultipartResolver:文件上传解析器。
    从容器中获取MultipartResolver类型的,并且名字叫multipartResolver的组件。如果有用容器中的,如果没有就为null

  • LocaleResolver:国际化解析器 zh_cn\en_us。来完成页面国际化功能
    从容器中获取LocaleResolver类型的组件,并且名为localeResolver。如果没有,加载 DispatcherServlet.properties文件中指定的。org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

  • ThemeResolver:主题解析器(用的比较少)

  • HandlerMapping: 处理器映射(解析了系统中所有Controller组件,缓存他们请求映射信息,。想要知道哪个请求由谁处理,在他里面找即可。 请求–controller–method)

    从容器中找 类型为HandlerMapping并且名字为handlerMapping的组件。没有就加载 DispatcherServlet.properties文件中指定默认的

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(组件名字作为请求映射),\
  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping(把@RequestMapping标注的路径作为请求的路径进行映射),\
   org.springframework.web.servlet.function.support.RouterFunctionMapping(webflux)

在这里插入图片描述

  • HandlerAdapter: handler(我们自己的controller)的适配器,未来决定目标方法如何执行的(反射进行请求处理的核心逻辑)。

    从容器中获取所有的 HandlerAdapter 组件。没有就加载默认值

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
   org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter(反射处理标注@RequestMapping注解的方法),\
   org.springframework.web.servlet.function.support.HandlerFunctionAdapter(webflux)

在这里插入图片描述

  • HandlerExceptionResolver:异常解析器
    从容器中获取所有的 HandlerExceptionResolver 组件。没有就加载默认值
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
   org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
   org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
  • RequestToViewNameTranslator:请求转为要跳转的视图名的转换器

    从容器中获取 RequestToViewNameTranslator 并且名为 viewNameTranslator;

#没有就加载默认的
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
  • ViewResolver:视图解析器。决定页面的视图跳转逻辑。

    • 容器中找到所有的 ViewResolver,
    • 如果没有SpringMVC会给我们自动配置一个 org.spri
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值