要详细了解ASP.NET的工作原理,首先要了解什么是.NET,什么是.NET Framework,什么是公共中间语言。
1 .NET
对于.NET,微软自己也没有一个详细确切的定义。但是我们可以这样认为:.NET是微软公司要提供的一系列产品的总称。具体说来,.NET由下面的几个部分组成:.NET战略、.NET Framework、.NET企业服务器和.NET开发工具。
.NET战略是指把所有的设备通过Internet连接在一起并把所有的软件作为这个网络所提供的服务的想法。
.NET Framework是一个程序设计环境,它提供了具体的服务和技术,方便开发人员建立相应的应用程序。
.NET企业服务器是指SQL Server 2000之类由.NET Framework应用程序使用的服务器端产品。它们虽然不是由.NET Framework编写成的,但是它们都支持.NET。
为了能够在.NET Framework上进行程序开发,微软把Visual Studio进行升级,并把升级后的产品命名为Visual Studio.NET。这就是.NET开发工具。
2 .NET Framework
.NET Framework是.NET战略的核心。.NET Framework分为以下几个部分:MS中间语言、CLR、.NET Framework类库、.NET语言、ASP.NET和Web服务。
MS中间语言是.NET的通用语言。无论使用哪一种.NET语言编写的程序代码,在执行之前,都会把它编译成为MS中间语言。
CLR(Common Language Runtime,公共语言运行时刻库)用于执行MS中间语言。
.NET Framework类库中包含了大量可以实现重要功能的代码库。用户在编写程序的时候可以很方便地把这些库调用到应用程序中,实现更加复杂的功能。由于这些类库的存在,使得编写功能强大的程序更加容易。
.NET语言是指可以将使用其编写的代码编译成为MS中间语言的的编程语言。常见的语言有VB.NET和C#等。
Web服务是指可以通过Web访问的组件。
3. 公共中间语言
在.NET Framework中使用高级语言(例如VB.NET、C#)编写的程序,需要在运行前将其编译成为中间语言(例如MS中间语言)。需要注意的是,中间语言并不是一种可以直接执行的机器代码。与高级语言编写的代码相比,它的可读性很差,但是进行了一系列的优化。
为了执行中间语言,需要一个执行环境CLR。CLR在.NET Framework中的位置十分重要,可以说是.NET Framework的基础。CLR用JIT(Just-In-Time)编译器把中间语言代码编译成可以执行的代码,并对程序进行最后的、与机器相匹配的优化,使得程序可以在所在计算机上尽可能高效地运行。
采用这种方式的原因是,早期的编译方式是把程序源代码直接编译成机器代码。这时编译好的程序虽然也进行了与机器相匹配的优化,但是这些优化都是针对编译源代码的机器进行的。如果把编译好的程序放到其他类型的机器上,那么所进行的优化就有可能没有任何意义,并且如果机器的硬件发生变化,那么还有编译后的程序无法执行的可能,因为新的机器可能没有原来机器所拥有的某种资源。而如果采用了公共中间语言的方式,就可以很好地解决这个问题。由于中间语言与机器无关,所以它可以在任何一个可以运行CLR的机器上运行。并且由于所有的关于机器的优化都是由CLR进行的,所以不存在早期编译所产生的由于机器不同而产生的不兼容的问题。
ASP.NET的工作原理是:首先,有一个HTTP请求发送到Web服务器要求访问一个Web网页。Web服务器通过分析客户的HTTP请求来定位所请求网页的位置。如果所请求的网页的文件名的后缀是aspx,那么就把这个文件传送到aspnet_isapi.dll进行处理,由aspnet_isapi.dll把ASP.NET代码提交给CLR。如果以前没有执行过这个程序,那么就由CLR编译并执行,得到纯HTML结果;如果已经执行过这个程序,那么就直接执行编译好的程序并得到纯HTML结果。最后把这些纯HTML结果传回浏览器作为HTTP响应。浏览器收到这个响应之后,就可以显示Web网页。
ASP.NET编程模型中ASP.NET页面生命周期是指什么呢?它包括什么呢?ASP.NET编程模型之ASP.NET页面生命周期具体的过程有哪些呢?下面就开始我们的讲解吧:
ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页的生命周期非常重要,这样就能在合适的生命周期阶段编写代码,以达到预期效果。此外,如果开发自定义控件,则必须熟悉页生命周期,从而正确地初始化控件,使用视图状态数据填充控件属性以及运行所有控件行为逻辑。
ASP.NET编程模型之页面生命周期执行一系列步骤:页面的初始化、实例化控件、还原和维护状态、运行事件处理程序代码、呈现。为了在合适的阶段执行所需的代码,所以要对页面生命周期非常熟悉。在页生命周期的各个阶段,页面会逐个引发定义的事件,通过对代码开发,在页面的生命事件中执行我们所需要的程序
页生命周期阶段
1、ASP.NET页面生命周期之页请求:发生在页面生命周期之前,用户请求页时,ASP.NET将确定是否需要分析和编译页,从而确定是否开始页面的生命周期,或者是否可以在不运行页的情况下发送页面缓存以进行响应。
2、ASP.NET页面生命周期之开始:设置页属性,如:HttpContext以及其他属性;在此阶段,页面需要确定是回发请求还是新请求,并设置IsPostBack属性;设置页面的UICulture属性。
3、 ASP.NET页面生命周期之页面初始化:加载所有主题;控件生成,并设置UniqueID;
注:ViewState、ControlState中的值还未加载至控件;如果页面是回发,则回发数据也还未加载;故此时控件可以访问,但值可能出错。
4、ASP.NET页面生命周期之加载:如果当前请求是回发请求,则为控件加载ViewState和ControlState中的值。
5、ASP.NET页面生命周期之验证:调用所有验证程序控件的Validate方法,此方法将设置验证程序控件和页的IsValid属性。
6、ASP.NET页面生命周期之回发事件处理:如果请求是回发请求,则调用所有事件处理程序。
7、ASP.NET页面生命周期之呈现:首先对该页和所有控件进行保存视图状态,然后对每个控件调用Render方法,它会提供一个文本编写器,用于将控件的输入写入页的Response属性的OutputStream中。
8、ASP.NET页面生命周期之卸载:完成呈现,并已将页发送至客户端、准备丢弃该页后,调用卸载。将卸载属性如:Response和Request等等。