MVC开发流程:
1)新建一个MVC项目
2)新建Controller
3)创建Action
4)根据Action创建View
5)在Action获取数据并生产ActionResult传递给View
6)View是显示数据的模板
7)URL请求-》Controller.Action处理--》View响应
默认项目模板中的内容
1.App_Data:用来 存储数据库文件,XML文件或者应用程序需要的一些其他数据
2.Content:用来存放应用程序中需要乃至的一些静态资源文件。如图片和CSS样式文件。
3.Controllers:用于存放所有的控制器类,控制器负责处理请求。并决定哪一个Action执行,充当一个协调者的角色。
4.Models:用于存放应用程序的核心类、数据持久化类,或者视图模型。
5.Scripts:用于存放项目中用到的JavaScript文件,默认情况下,系统自动添加了一系列的JS文件,包含jquery和jquery验证等js。
6.Views:包含了许多用于用户界面展示的模板,这些模板都使用Rasor视图来展示的,子目录对应着控制器相关的视图。
7.Global.asax:存放在项目根目录下,代码中包含应用程序第一次启动时的初始人操作,诸如路由注册。
8.Web.config:同样存在于项目根目录,包含ASP.NET MVC正常运行所需要的配置信息。
约定:
1)Controller放到controllers文件夹中,并且命名方式以Controller结尾
2)每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同。
3)控制器必须是非静态类,并且要实现IController接口
4)Controller类型可以放到其他项目中。
MVC整体运行流程
1)当我们在浏览器端输入一个URL时,客户端会发送一个基于HTTP的Web请求给服务器,在请求到达Web服务器的那一刻,Web服务器Windows内核中的HTTP.SYS组件就会捕获到请求。当HTTP.Sys组件分析到这个是一个需要交给IIS服务器处理的http请求时,http.sys组件就会将Request请求交给IIS服务器来处理。
HTTP.SYS是一个位于Windows Server和Windows XP2中操作系统核心组件(内核模式中),能够让任何应用程序通过它提供的接口以HTTP进行信息通信。
2)如果请求有缓存内容就直接响应。
http.sys组件有一个重要作用就在于它有一个缓存区,会将近期处理的响应结果放入缓存区之中,如果再次请求这个内容,就会从缓存区中取得内容并进行响应,提高了响应速度。而且,静态的内容现在被缓存于内核模式下,使服务响应速度更快。
3)IIS服务器会分析Request请求的context-type类型,然后从处理程序映射表中去匹配,当在处理程序映射表中能够匹配Request请求的context-type类型时,IIS服务器就将请求交给映射表中的所对应的程序处理。当IIS发现在处理程序映射表中没有能匹配的时候,就直接去下载Request请求所对应路径 的文件。
4)对于动态资源的处理,IIS首先会通过一个工作进程去加载具体的处理组件dll。以IIS6.0为例,如果IIS判断它自己无法处理asp.net的请求,就会W3WP.exe所维护的工作进程来加载aspnet_isapi.dll。
5)如果Web应用程序是第一次加载,那么首先会由aspnet_isapi.dll加载.NET运行时库。IIS工作进程里有一个应用程序池,其中可以承载多个应用程序域AppDomain。
6)HTTP.SYS接收请求,通过应用程序域工厂AppDomainFactory创建应用程序域AppDomain。
7)一个IsapiRuntime被加载,并创建一个IsapiWorkerRequest对象封闭当前的HTTP请求,并把该IsapiWorkerRequest对象传递给ASP.NET的HttpRuntime运行时,此时,HTTP请求开始进入ASP.NET请求管道。HttpRuntime是ASP.NET请求管道的入口。当请求进来时,首先进入HttpRuntime,由HttpRuntime来决定如何处理请求。
8)HttpRuntime维护着一个HttpApplication池,当有HTTP请求过来时就从池中选取可用的HttpApplication处理请求。
9)HttpRuntime根据IsapiWorkerRequest对象创建HttpContext对象。
10)HttpApplicationFactory创建新的或者从HttpApplication池获取现有的、可用的HttpApplication对象。
11)HttpApplication调用ProcessRequest方法,内部执行19个管道事件。MVC的19个管道事件如下