前言

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

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. N个任务掌握java系列之统计一篇文章中单词出现的次数

    问题:统计一篇文章中单词出现的次数 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中. (2)定义一个Map,key是字符串类型,保存单词:valu ...

  2. 枚举与define的区别

    1.枚举enum的用途浅例      写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等.  ...

  3. Android应用开发提高篇(1)-----获取本地IP

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/21/2361802.html 一.概述 习惯了Linux下的网络编程,在还没用智能机之前就一直想 ...

  4. Maven Spring JUnit 在Maven Clean Install时报

    问题: Maven Clean Install时, 遇到报错package org.junit does not exist 明显, Unit Test在Compile阶段就被检查了. 而POM.xm ...

  5. Nmon的安装及使用

    1.安装软件 1) 用root用户登录系统,建立目录:#mkdir  /nmon 2) 通过FTP将下载的nmon工具上传至服务器 192.168.40.212目录/nmon下. 3) 修改tar包权 ...

  6. 高质量程序设计指南C/C++语言——malloc/free使用要点

  7. linux所有信息查询网址

  8. Json.Net系列教程 4.Linq To JSON

    原文 Json.Net系列教程 4.Linq To JSON 更改历史 2013-05-31 添加一个FAQ   一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSO ...

  9. 基于Visual C++2013拆解世界五百强面试题--题17-程序结果分析1

    分析程序结果,分析过程我们就写在程序注释里面. 写出下列代码的输出内容 #include <stdio.h> int inc(int a) { return (++a); } int mu ...

  10. Installing on CentOS/RHEL / KB forum / Ajenti

    Installing on CentOS/RHEL / KB forum / Ajenti Ajenti → KB → Installation Is it?: Inappropriate Spam ...