MVC请求过程 简单分析(一)
在服务端判断客户端传过来的文件的类型,如果是静态文件,直接返回,在页面输出显示。如果是动态文件,通过aspnet_isapi.dll转交过.NetFrameWork框架执行。
创建ISAPIruntime对象,执行ISAPIruntime对象中的ProcessRequest()方法
ProcessRequest()方法可以看做是进入Asp.Net的入口点。

ProcessRequest()方法:
根据传进来的句柄(请求报文的编号)寻找资源,创建ISAPIWorkerRequest对象wr,将请求报文的内容封装到wr中,在将wr传到HttpRuntime中。

ProcessRequestNoDemand()方法:

ProcessRequestNow()方法:

ProcessRequestInternal()方法:
创建HttpContext对象,然后将请求报文wr都封装到context中。
创建HttpApplication对象,通过HttpApplicationFactory()这个工厂类的GetApplicationInstance方法来创建,在HttpApplication池中创建,也就是在栈中操作,池的寿命与应用程序的寿命相同。

GetApplicationInstance():
这个是创建HttpApplication对象的工厂类GetApplicationInstance()中的方法。
创建HttpApplication对象中有三个关键的方法。
第一个方法:EnsureInited():
双重锁定这个工厂类,检查HttpApplicationFactory有没有被初始化,这个this代表的是HttpApplicationFactory这个工厂类。如果没有,通过this.Init()方法进行初始化。首先用this.GetApplicationFile()方法寻找global.asax文件地址,拿到global.asax文件。然后调用this.CompileApplication()方法对global.asax文件进行编译,得到theApplicationType这个类型。
第二个方法:EnsureAppStartCalled(context):
拿到global.asax文件,调用并且确保在程序启动的时候只调用一次global文件中Application_Start()方法。获取所有的路由信息。
第三个方法:GetNormalApplicationInstance(context):
创建HttpApplication对象,创建成功后并调用InitInternal()方法进行初始化。读取配置文件中的所有的对于module的配置内容。拿到系统定义的module和程序员自己定义的module,保存到HttpModuleCollection集合中,然后遍历读取HttpModuleCollection集合.

创建HttpApplication之后进入请求管道。
在初始化HttpApplication时候,可以拿到系统定义和程序员定义的module。
查看系统定义的module:UrlRoutingModule
找到Init()初始化module的方法

UrlRoutingModule.Init()方法:
初始化模块,将OnApplicationPostResolveRequestCache这个事件注册到管道的第七个事件中,等走到请求管道中的第七个事件中的时候执行这个方法。

OnApplicationPostResolveRequestCache()方法:
HttpApplication对象触发的这个事件,sender代表触发这个事件的源。所有可以将sender转成HttpApplication。
HttpContextBase类为抽象类,该类包含的成员与 HttpContext 类相同。使用 HttpContextBase类可以创建一些派生类,这些派生类与 HttpContext 类相似,但是可以进行自定义并在 ASP.NET 管道外部使用。
用HttpContextBase创建上下文对象context。
将请求内容进一步封装到context对象中。
执行PostResolveRequestCache(context)方法。

PostResolveRequestCache()方法:
匹配路由的 HTTP 请求,检索该路由的处理程序,并将该处理程序设置为当前请求的 HTTP 处理程序。
将获得到的路由规则和封装之后的context里的请求报文进行匹配,返回路由数据。
获取路由请求的对象 ,报文中的一些方法之类的东西,判断是否为空
如果路由数据为不为空说明是匹配成功,拿到路由数据的属性。
对请求报文进一次处理封装,返回一个实例,用IHttpHandler对象httpHandler接收。
这里的httpHandler就是MVCHandler,MVC源码中MVCHandler这个类继承IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
最后将当前请求映射到HttpHandler上。

MVC请求过程 简单分析(一)的更多相关文章
- struts2请求过程源代码分析
struts2请求过程源代码分析 Struts2是Struts社区和WebWork社区的共同成果.我们甚至能够说,Struts2是WebWork的升级版.他採用的正是WebWork的核心,所以.Str ...
- mvc请求过程总结
前言 最近在思考一个问题,我的学习方法一般主要是看博客来学习新东西,但是光看,基本也没总结过,所以经常会出现这样的问题,某个知识点我知道,但是就是不能很好的表达出来,很简单的东西往往都不知道如何简短精 ...
- spring mvc请求过程
spring mvc处理请求过程 1. 首先客户端发送一个HTTP请求,Web服务器接收这个请求,如果匹配DispatcherServlet的请求映射路径,web容器将请求转交给Dispatch ...
- mini-uboot 启动过程简单分析
单片机有最小系统,所谓最小系统,就是单片机能正常工作所需要的最少外设.对于Uboot来说,同样有个最小系统,因为Uboot最主要的功能就是引导内核.下面我们通过一个简单的Mini-Uboot来分析Ub ...
- 用户HTTP请求过程简单剖析
用户终端(如电脑浏览器)发起某个url请求,如http://www.baidu.com/1.jpg. 1.电脑首先会对www.baidu.com进行解析请求,获得域名对应的服务器IP. 2.电脑对服务 ...
- Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
这个是转载自:http://www.cnblogs.com/keyindex/archive/2012/08/11/2634005.html(那个比较容易忘记,希望博主不要生气的) 前言 本文假定读者 ...
- spring MVC处理请求过程及配置详解
本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...
- spring MVC处理请求过程
spring MVC处理请求过程 首先看一个整体图 简单说下各步骤: handlerMapping handlerMapping将请求映射到处理器,即图中的HandlerExecutionChain. ...
- Asp.Net MVC 请求原理分析
分析Asp.Net MVC的请求过程,我们从以下几方面看: 配置:IIS网站的配置可以分为两个块:全局 Web.Config 和本站 Web.Config . Asp.Net Routing属于全局性 ...
随机推荐
- uC/OS-II内核架构解析(1)---嵌入式RTOS(转)
uC/OS-II内核架构解析(1)---嵌入式RTOS 1. 嵌入式系统基本模型 2. RTOS设计原则 采用各种算法和策略,始终保持系统行为的可预测性.即在任何情况下,在系统运行的任何时刻,OS的资 ...
- hdu 2019
Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包含多 ...
- iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习
iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习 如果你不希望应用运行时 iPhone 进入锁屏待机状态,加入下面这行代码即可 [[UIApplication share ...
- Android Content Provider简介
Content Provider是Android的四大组件之一,与Activity和Service相同,使用之前需要注册: Android系统中存在大量的应用,当不同的应用程序之间需要共享数据时,可以 ...
- JVM基础和调优(二)
主要讲述java虚拟机的内存体系结构 了解了JVM 的一些基础之后,我们来看看java虚拟机内存的体系结构,这个是理解JVM垃圾收集算法的前提,理解了内存结构我们才能够针对不同的部分根据我们的程序进行 ...
- 个性化定制——物流app
众所周知,在互联网不断迈进的大环境下,各行各业都不免在这大潮下纷纷卷入.人们早已不再满足于传统行业,即便是所谓的新兴行业所带来的体验,他们更多的希望能够在便捷的基础上获取更加个性化的服务,个性化服务在 ...
- 迅雷API:实现文件下载
今天到迅雷公司的SDK文档网站上逛了逛,竟然发现它们已经提供了完备的API接口,我心中不禁大喜,但是SDK资料中的原版开发文件已经很难找到了,幸运的是我在github上搜索到了所需的文件,在这里我已 ...
- CCF软考---《有趣的数》
脑子一热报了CCF的软测..但是又觉得好像并没有什么卵用,就当为蓝桥杯预热然后顺便去软件学院玩一玩吧,遇到一个有意思的题: time limits : 1s 问题描述 我们把一个数称为有趣的,当且仅当 ...
- (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...
- 字典树-百度之星-Xor Sum
Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ...