美文网首页spring mvc
Spring MVC请求处理过程

Spring MVC请求处理过程

作者: HeartGo | 来源:发表于2017-08-19 00:55 被阅读50次

HttpServletBean

主要参与创建工作,没有涉及请求的处理。

FrameworkServlet

重写了service,doGet,doPost,doPut,doDelete,doOptions,doTrance(除了doHead),在service方法中增加了对Patch类型请求的处理,其他类型的请求直接交给父类进行处理,doOptions和doTrance方法可以通过dispatchOptionsRequest和dispatchTraceRequest参数决定是自己处理还是交给父类处理;doGet,doPost和doDelete都是自己处理。所有需要自己处理的请求都交给processRequest方法进行统一处理。
processRequest方法是FrameworkServlet类在处理请求中最核心的方法。
核心语句是doService(rquest,response),这个方法在DispatchServlet中具体实现。在doService之前首先获取了LoalContextHolder和RequestContextHolder中原来保存的LocalContext和RequestAttributes并设置到previousLocaleContext和previousAttributes临时属性,然后调用buildLocaleContext和buildRequestAttributes方法获取到当前请求的LocaleContext和RequestAttributes,并通过initContextHolders方法将他们设置到LocaleContextHolder和Request-ContextHolder中,接着使用request拿到异步处理管理器并设置了拦截器,做完这些后执行doService方法,执行完后通过resetContextHolders方法将原来的previousLocaleContext和previousAttributes恢复到LocaleContextHolder和RequestContextHolder中,调用publicRequestHandleEvent方法发布了ServletRequestHandledEvent类型的消息。

总结一下:FrameworkServlet
首先在service方法添加了对Patch的处理,并将所有需要自己处理的请求都集中到了processRequest方法进行统一处理,这和HttpServlet里面根据request的类型将请求分配到各个不同的方法进行处理的过程正好相反。
然后就是processRequest方法,在processRequest里面对使用当前request获取到的LocalContext和RequestAttributes进行了保存,以及处理完之后的恢复,在最后发布了ServletRequestHandedEvent.

DispatcherServlet

是Spring MVC最核心的类,整个处理过程的顶层设计都在这里面。
执行入口是doService(),不过doService并没有直接进行处理,而是交给doDispatch进行具体的处理,在doDispatch处理前doService做了一些事情,首先判断是不是include请求,如果是则对request的Attribute做个快照备份,等doDispatch处理完之后进行还原,做完快照之后又对request设置一些属性。

doDispatcherServlet

1.根据request找到Handler.
2.根据Handler找到对应的HandlerAdapter.
3.用 HandlerAdapter处理handler。
4.调用processDispatcherResult方法处理上面之后的结果(包含找到View并渲染输出给用户)。

相关文章

  • Spring MVC入门书目录

    Spring MVC入门之DispatcherServlet处理请求过程 Spring MVC入门之基于XML文件...

  • 近期学习 2016-11-25

    Spring MVC在Web项目中的应用 Spring MVC处理请求的过程 RequestMappingHand...

  • Spring MVC的工作原理

    Spring MVC原理图 工作过程 Spring MVC是通过将需要Spring MVC处理的请求映射到一个名叫...

  • 七、Spring MVC

    Spring MVC处理请求的过程 请求到来的首先交给DispatcherServlet. DispatcherS...

  • 详解Spring MVC:下

     前面分析了Spring MVC的创建过程,本章分析Spring MVC是怎么处理请求的。我们这里分两步:首先分析...

  • spring mvc 原理深度解析(一)

    1、回顾servlet 与jsp 执行过程 2、Spring MVC请求处理流程 3,mvc 体系结构详解 URL...

  • Spring MVC简介

    1.spring mvc 请求处理流程 1.1 过程 1.用户发送请求至前端控制器DispatcherServle...

  • Spring MVC常见面试题解析

    1、请简单说一下Spring MVC的请求处理过程(工作原理) 只要问及Spring MVC框架,这一题基本80%...

  • 构建SpringMVC应用的两种方法

    dispatchServlet是Spring MVC的核心。一次Spring MVC请求的流转过程如下: 请求到达...

  • SpringMVC统一异常处理

    原理 Spring MVC把请求映射和处理过程放到try catch中,捕获到异常后,使用异常处理bean进行处理...

网友评论

    本文标题:Spring MVC请求处理过程

    本文链接:https://www.haomeiwen.com/subject/aaszrxtx.html