SpringMVC原理分析

此博客参照了其他人的源码分析博客总结而成。


在这里插入图片描述

组件介绍

DispatcherServlet(核心控制器)

作用: 它是SpringMVC的核心,所有的请求第一步都会先到达这里,再由它调用其他组件处理。我们在web.xml中配置的核心Servlet就是它。

HandlerMapping(处理映射器)

作用: 用于查找请求的URL对应的Handler(Controller),SpringMVC中针对配置文件方式、注解方式等提供了不同的映射器来处理。

HandlerAdapter(处理适配器)

作用: 根据映射器中找到的Handler,通过HandlerAdapter去执行Handler,这是适配器模式的应用。

Handler(其实就是我们写的Controller)

Handler需要工程师开发,并且必须遵守Controller开发的规则进行开发,这样适配器才能正确的执行。例如实现Controller接口,将Controller注册到SpringIOC容器中等。

View resolver(视图解析器)

作用: 将Handler中返回的逻辑视图(ModelAndView)解析为一个具体的视图(View)对象。

View(视图)

作用: View最后对页面进行渲染将结果返回给用户。springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等


SpringMVC工作原理

准备工作

在Spring容器初始化时会建立所有的URL和Controller的对应关系,保存到Map<URL,Controller>中,这样request就能快速根据URL定位到Controller。


实现:

  1. 在SpringIOC容器初始化完所有单例bean后。
  2. SpringMVC会遍历所有的bean,获取controller中对应的URL(这里获取URL的实现类有多个,用于处理不同形式配置的Controller)
  3. 然后将每一个URL对应一个controller存入Map<URL,Controller>中。

这一步的作用在于,为HandlerMapping组件建立所有URL和controller的对应关系。

一个Request来了

  1. 监听端口,获得请求: Tomcat监听到了8080端口的请求,进行了接收、解析、封装,根据路径调用了web.xml中配置的核心控制器DispatcherServlet。

  2. 获取Handler: 进入DispatcherServlet,核心控制器调用HandlerMapping去根据请求的URL获取对应的Handler。准备工作就是为了它。这里有个细节,如果获取的Handler为null则返回404。

  3. 调用适配器执行Handler

    1. 适配器中根据request的URL去Handler中寻找对应的处理方法(Controller的URL与方法的URL拼接后对比)
    2. 获取到对应方法后,需要将request中的参数与方法参数上的数据进行绑定。(根据反射获取方法的参数名和注解,再根据注解或者根据参数名对照进行绑定)(这里的绑定比较抽象,我的理解是找到所需的对应参数,然后再反射调用方法时传入)
    3. 绑定完参数后,反射调用方法获取ModelAndView(如果Handler中返回的是String、View等对象,SpringMVC也会将它们重新封装成一个ModelAndView)
  4. 调用视图解析器解析 将ModelAndView解析成View对象

  5. 渲染视图 将View对象中的返回地址,参数信息等放入RequestDispatcher,最后进行转发。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值