springmvc流程跟踪

springmvc的执行流程前端控制器继承自servlet方法我们在dispatcherServlet里找到doService方法进入:
 this.doDispatch(request, response);
里面是定义一些参数,主要的是:
 mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); 大致是调用控制器方法,执行的是RequestMappingHandlerAdapter(是HandlerAdapter的实现类) 的HandlerInternal方法,进入handleInternal:
protected ModelAndView handleInternal(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {
        this.checkRequest(request);
        ModelAndView mav;
        if (this.synchronizeOnSession) {
            HttpSession session = request.getSession(false);
            if (session != null) {
                Object mutex = WebUtils.getSessionMutex(session);
                synchronized(mutex) {
                    mav = this.invokeHandlerMethod(request, response, handlerMethod);
                }
            } else {
                mav = this.invokeHandlerMethod(request, response, handlerMethod);
            }
        } else {
            mav = this.invokeHandlerMethod(request, response, handlerMethod);
        }

if (!response.containsHeader("Cache-Control")) {
            if (this.getSessionAttributesHandler(handlerMethod).hasSessionAttributes()) {
                this.applyCacheSeconds(response, this.cacheSecondsForSessionAttributeHandlers);
            } else {
                this.prepareResponse(response);
            }
        }

return mav;
    }
此时执行的是mav = this.invokeHandlerMethod(request, response, handlerMethod);类中的方法进入其中此时执行的是ServletInvocableHandlerMethod类的invokeAndHandle方法,其实到了invocableMethod.invokeAndHandle(webRequest, mavContainer, new Object[0]);这句我们已经可以看出哪个方法执行的关系了
 Object returnValue = this.invokeForRequest(webRequest, mavContainer, providedArgs);执行的是InvocableHandlerMethod类中的invokeForRequest方法
Object returnValue = this.doInvoke(args);执行本类的doInvoke
return this.getBridgedMethod().invoke(this.getBean(), args);已经是反射调用了。

从这些追踪我们可以知道浏览器发送请求到dispatcherServlet走到了处理器映射器适配器RequestMappingHandlerAdapter 处理控制方法InvocableHandlerMethod 执行方法反射的InvocableHandlerMethod拿到modelandvew

原文地址:https://www.cnblogs.com/xyhx/p/11441712.html

时间: 2024-10-18 20:55:10

springmvc流程跟踪的相关文章

集成activiti-modeler 到 自己的业务系统(集成流程跟踪-完美支持IE)

本文目的: 将activit 5.12.1 的 modeler 流程设计器 集成到自己的工程中去 解决问题: 1. 复制相关资源文件到自己的工程中 2. 解决modeler的路径访问问题,迁移到非系统根目录 3. 跟自己系统的spring无缝集成 首先请下载官方最新 5.12.1 发布包 下载地址: https://github.com/Activiti/Activiti/archive/activiti-5.12.1.zip 解压后如下图 步骤: 1. 复制相关文件 1.1首先复制类路径资源文

I.MX6 Linux Qt 启动流程跟踪

/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 * 声明: * 1. 源代码来源MY-I.MX6: * 2. 本文仅仅是对启动流程的解析,没有解释启动流程为什么是这样的问题. * * 2015-6-13 深圳 晴 南山平山村 曾剑锋 *********************************************************

04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mvc结构 DispatcherServlet:中央控制器,把请求给转发到具体的控制类 Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置) handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略 ModelAndView:服务

SpringMVC 流程 配置 接口

SpringMVC简介 一 流程介绍 1.角色划分 前端控制器(DispatcherServlet).请求到处理器映射(HandlerMapping).处理器适配器(HandlerAdapter).视图解析器(ViewResolver).处理器或页面控制器(Controller).验证器(Validator).命令对象(Command请求参数绑定到的对象就叫命令对象).表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象). 2.流程图 3.具体步骤:(1)首先用户发送请求-

SpringMVC流程架构基础理论

Spring web mvc和Struts2都属于表现层的框架 1. 用户发起request请求至控制器(Controller) 控制接收用户请求的数据,委托给模型进行处理 2. 控制器通过模型(Model)处理数据并得到处理结果 模型通常是指业务逻辑 3. 模型处理结果返回给控制器 4. 控制器将模型数据在视图(View)中展示,web中模型无法将数据直接在视图上显示,需要通过控制器完成. 5. 控制器将视图response响应给用户 通过视图展示给用户要的数据或处理结果. springMVC

SpringMVC流程架构图

[组件说明] 以下组件通常使用框架提供实现: 1.DisPatcherServlet:前端控制器(不需要程序员开发) 用户请求到达前端控制器,它相当于MVC模式中的C(Controller),DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性. 作用:作为接受请求,相应结果,相当于转发器,中央处理器,减少其他组件之间的耦合度. 2.HandlerMapping:处理器映射器(不需要程序员开发) H

SpringMVC流程

Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3. DispatcherServlet 根据获得

u-boot2011.09 u-boot.img 的流程跟踪

一.主要是start.S 里面的 board_init_f 以及 board_init_r 函数分析,MLO与 u-boot.omg 的区别就在这里 二. MLO 加载完毕,他会重新回到 start.S 重新开始 三. board_init_f 函数的实现在 arch/arm/lib/board.c 里面 264 void board_init_f(ulong bootflag) 265 { 266 bd_t *bd; 267 init_fnc_t **init_fnc_ptr; 268 gd_

SpringMvc流程分析,简单源码分析

SpringMvc的请求入口:web.xml中的DispatcherServlet <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfi