springmvc原理源码级别分析

本文探讨SpringMVC的启动原理,指出其作为Web服务的原因在于DispatcherServlet作为入口,继承自Servlet。详细分析了DispatcherServlet的内部机制,包括HandlerMapping、HandlerAdapter、MultipartResolver等组件的作用。并描述了请求从接收到处理的完整流程,涉及HandlerExecutionChain的匹配、拦截器的执行以及ModelAndView的渲染过程。
摘要由CSDN通过智能技术生成

1.Springmvc的启动原理是什么?为什么可以作为web服务?
因为springmvc的入口就是一个servlet,所以可以作为web服务使用,而controller实际上做了一层封装,对dodispart做了解析操作,可以Springmvc可以支持rest风格请求。

Springmvc的原理分析:

  1. DispatcherServlet 为Springmvc的顶层servlet入口,继承了frameworkservlet继承了httpservlet,所以就是一个servlet。
  2. dispatcherServlet中有handlermapping list 以及adapterlist ,mutilpartreslover,exeptionresolver,viewreslover,

dispatcherservlet 实现了applicationcontentaware 接口,因此可以监听容器的启动状态,例如当容器关闭时,关闭web 服务等等,设置容器等等,
initWebApplicationContext()用来初始化一个webapplicationcontent,并设置父亲为applicationcontent,所以,webapplicationcontent的parent为applicationcontent。

  1. service()方法为http请求入口,用来对http提供处理,如果不是patch执行super.service,用来解析header,请求方式,判断使用哪种请求风格,所有请求统一走processRequest方法,
  2. 最后处理方法统一为dodispatch()方法,首先判断是否为multipart格式的request,如果是则转化成multuparthttpservlertrequest对象,否则不处理,根据request获取对应的HandlerExecutionChain对象,
  3. 获取HandlerExecutionChain 的方式:先拿到所有的handlermapping结合,然后进行遍历,找到第一个符合的handlerexecutionchain对象。
  4. 筛选handlerexecutionchain的规则:根据request,先通过path进行查找,如果找到匹配上的handler时,并且handler为string,用name去容器中获取bean,找到后去容器中拿到所有的intecepters,然后就行过滤后组装到handlerexcutionchain对象中,返回。
  5. 检查modified,header请求方式
  6. 通过handlerexecutionchain的handler拿到adapter,然后执行prehandler(),方法,chain.prehandler(req,resp);
  7. 执行handler方法,mv = ad.handler(req,resp,chain.gethandler)
    10.执行posthandler
    11.执行processresult,对exception,modelandview 进行解析,当exe不为空时,判断是否为ModelAndViewDefiningException ,如果是,找到对应异常的modelandview,否则使用默认的errmodelandview
    12.执行render方法将modelandview进行解析,先根据view name解析拿到view,执行view render,是转发还是直接对data输出逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值