前言

最近在思考一个问题,我的学习方法一般主要是看博客来学习新东西,但是光看,基本也没总结过,所以经常会出现这样的问题,某个知识点我知道,但是就是不能很好的表达出来,很简单的东西往往都不知道如何简短精炼的阐述清楚。所以我想到应该每天抑或是经常性的总结近期学到的知识,这样既可以巩固知识又可以提高语言的组织能力。

MVC的请求过程

有些比较细节的地方直接忽略了,我主要摸索它的大概轨迹

首先从客户端发出请求开始,iis接受请求,找到web应用程序运行的工作者进程,如果进程不存在,则创建的新的工作进程,在其初始化的时候,aspnet_isapi.dll被加载,isapi启动CLR以及相关应用程序域和相关web应用的初始化。随后一个特殊的运行时isapiRuntime被加载,它将接管http请求。

接管http请求的ISAPIRutime会首先创建isapiWorkRequset对象来封装当前http请求,随后将此对象传递给HttpRuntime,至此,请求到达了asp.net管道,接着就执行HttpRuntime.PR方法,其中主要做了两件事。

1.根据httpWorkRequset创建httpContext对象,此对象同于表示当前请求的上下文。

2.根据httpApplicationFatory创建或获取现有的httpApplication对象

httpApplicationFatory工厂初始化的时候,从asp.net维护的httpApplication对象池中获取HttpApplition对象,如果池子中没有对象,将通过global文件编译的类型通过反射获取httpApplication

在httpApplication初始化的时候,asp.net会根据配置文件加载并初始化HttpModule对象,httpApplication对象主要是在处理http请求不同阶段会触发不同的事件,而httpmodule的意义在于通过注册httpApplication管道中的事件,将所需的操作注入整个请求流程。

在mvc中,UrlRoutingModule注册了httpApplication请求处理阶段的第8个事件中(表示用户已获得缓存内容),在这个事件响应方法中主要是根据当前请求生成HttpContextWrapper对象以及获取根据请求URL从路由表匹配出对应的RouteData对象,接着根据当前请求从RouteData中获取mvcHanler,并将它映射到当前请求。此后http请求将交给mvcHttphadler接管。

当管道时间流动到11个和12个事件之间,将之前已映射好的HttpHandler,也就是mvcHandler,首先执行PR方法,获取ControllerFactory, 然后执行CreateControler方法通过类型反射创建Controller实例,执行Excute(RequestContext)方法。 在Excute方法中,执行IActionInvoker.invokeAction(ControllerContext,actionName)方法, 在执行具体action之前,会执行模型绑定的方法,将生成参数列表,创建ActionExcutor对象并执行Excute,最后执行ActionResult对象的ExcuteResult方法,通过视图引擎渲染输出html作为响应内容输出客户端

本人刚学mvc不久,见识短浅,表达能力有限,理解或描述不好的地方请多多指教!

mvc请求过程总结的更多相关文章

  1. spring mvc请求过程

    spring mvc处理请求过程 1.    首先客户端发送一个HTTP请求,Web服务器接收这个请求,如果匹配DispatcherServlet的请求映射路径,web容器将请求转交给Dispatch ...

  2. MVC请求过程 简单分析(一)

    在服务端判断客户端传过来的文件的类型,如果是静态文件,直接返回,在页面输出显示.如果是动态文件,通过aspnet_isapi.dll转交过.NetFrameWork框架执行. 创建ISAPIrunti ...

  3. spring MVC处理请求过程及配置详解

    本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...

  4. spring MVC处理请求过程

    spring MVC处理请求过程 首先看一个整体图 简单说下各步骤: handlerMapping handlerMapping将请求映射到处理器,即图中的HandlerExecutionChain. ...

  5. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  6. Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子

    这个是转载自:http://www.cnblogs.com/keyindex/archive/2012/08/11/2634005.html(那个比较容易忘记,希望博主不要生气的) 前言 本文假定读者 ...

  7. Spring MVC请求执行流程

    学习Spring MVC时间有点长了,但是最近打算找工作,需要重新了解下,所以又去温故知新了.Spring MVC就是用来写web的框架,简化你写web的一些不必要的流程,让程序员能专注于业务逻辑也就 ...

  8. spring MVC 运行过程

    以Tomcat为例,想在Web容器中使用Spirng MVC,必须进行四项的配置: 1.修改web.xml, 2.添加servlet定义.编写servletname-servlet.xml( serv ...

  9. 4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. HTTP请求过程 这里展示整体的HTTP请求的过程,这里化繁为简,保留了主干流程: 从浏览器输入域名开始,这里忽略 ...

随机推荐

  1. 重定向输入输出流--freopen

    freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流.该函数可以在不改变代码原貌的情况下改变输入输出环境. C99函数声明: FILE *freope ...

  2. [置顶] WebService调用工具(AXIS2)

    package com.metarnet.util; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Meth ...

  3. idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class

    idea中使用scala运行spark出现: Exception in thread "main" java.lang.NoClassDefFoundError: scala/co ...

  4. 【转】android windowSoftInputMode

    android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一] ...

  5. Lotus Sametime 服务器的安装和配置

    IBM Lotus Sametime 是一款强大的实时协作软件,目前最新版本是 7.5.1.通过它,您不仅能够进行网络聊天,而且可以方便地召开网络会议.在网络社区中与其他人进行沟通.了解更多关于 Lo ...

  6. 修改html很实用的insertAdjacentHTML方法

    添加HTML内容与文本内容以前用的是innerHTML与innerText方法, 最近发现还有insertAdjacentHTML和 insertAdjacentText方法, 这两个方法更灵活,可以 ...

  7. VICC国际标准ISO15693下载

    疏耦合卡(VICC)国际标准ISO15693-1点击下载 疏耦合卡(VICC)国际标准ISO15693-2点击下载 疏耦合卡(VICC)国际标准ISO15693-3点击下载

  8. Delphi 常用属性说明(超长)

    Delphi组件的常用事件Onclick——当单击时触发这个事件中的代码Onchange——当改变该组件内容时触发其中的代码Oncreate——当创建时触发这个事件中的代码Onclose——当关闭的时 ...

  9. <Win32_16>来看看标准菜单和右键菜单的玩法

    日常应用中,菜单主要分为两种:(1) 标准菜单(处于应用程序菜单栏处的菜单)    (2)右键快捷菜单 几乎你所见过或使用过的软件中,都有它俩儿 为应用程序添加它们的基本步骤: (1)用代码或者IDE ...

  10. jQuery.merge 源码阅读

    jQuery.merge(first,second) 概述 合并两个数组 返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素. 参数 first:第一个待处理数组,会改变其中 ...