前言

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

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. Spring的事务属性

    1.事务Transactional下的属性 @Transactional( readOnly = false, // 读写事务,只读事务 timeout = -1, // 事务的超时时间不限制 //n ...

  2. Problem A: 走迷宫问题

    Problem A: 走迷宫问题Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 9 Solved: 3[Submit][Status][Web Board] ...

  3. BZOJ 3224: Tyvj 1728 普通平衡树(BST)

    treap,算是模板题了...我中间还一次交错题... -------------------------------------------------------------------- #in ...

  4. [转]如何理解c和c ++的复杂类型声明

    本文作者girlrong是网易广州社区的C语言版版主,这篇文章被选在精华区.很是不错,不敢独享!据说她乐于助人,虚心诚恳,颇受网友欢迎.只可惜现在已退隐江湖了.在最近学习C语言过程中,了解些前辈大牛的 ...

  5. C winpcap 网络抓包 并获取IP TCP 协议的相关信息

    以太网协议分析函数: void ethernet_protocol_packet_handle (u_char *argument, const struct pcap_pkthdr *packet_ ...

  6. cocos2dx中的精灵CCSprite

    什么是精灵(CCSprite),在官网文档中是这么定义的 Sprites A cocos2d CCSprite is similar to sprites you find in other game ...

  7. Warning: Unable to send packet: Error with PF_PACKET send() [11]: Message too long (errno = 90)

    今天在使用tcpreplay重放流量时,发现有的数据包没有发送成功: Warning: Unable to send packet: Error with PF_PACKET send() [215] ...

  8. robomongo

    Robomongo 是一个可视化的mongodb数据库工具,提供对mongodb的操作,javascript执行及语法高亮提示. 安装教程

  9. xen虚拟机操作整理

    1,登陆物理机器 2,查看物理机建立虚拟机的列表 root:~ # xm li Name ID Mem VCPUs State Time(s) Domain-0 0 49450 8 r----- 52 ...

  10. JavaBean讲解 规范

    一:JavaBean定义 JavaBean是一种可重复使用.跨平台的软件组件.JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean,例如NetBean中 ...