asp.net的页面执行过程讲解
来源:互联网 发布:sketch中文版破解mac 编辑:程序博客网 时间:2024/05/22 06:40
首先先重温一下关于b/s模式的整个请求过程:
客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 -> 服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,脚本产生客户端的响应,发送回客户端 -> 客户端浏览器接收到服务器传回的响应,对Html进行解析,将图形化的网页呈现在用户面前
客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 -> 服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,脚本产生客户端的响应,发送回客户端 -> 客户端浏览器接收到服务器传回的响应,对Html进行解析,将图形化的网页呈现在用户面前
这个模式不管是asp,php,还是jsp,asp.net都适合.好了下边谈谈关于客户端与服务器的交互方式:
1:Form:这是最主要的方式,标准化的控件来获取用户的输入,Form的提交将数据发送给服务器端处理
2:QueryString:通过在Url后面带参数达到将参数传送给服务器,这种方式其实跟Get方式的Form是一样的
3:Cookies:这是一种比较特殊的方式,通常用于用户身份的确认
1:Form:这是最主要的方式,标准化的控件来获取用户的输入,Form的提交将数据发送给服务器端处理
2:QueryString:通过在Url后面带参数达到将参数传送给服务器,这种方式其实跟Get方式的Form是一样的
3:Cookies:这是一种比较特殊的方式,通常用于用户身份的确认
这些知识重温以后,该谈谈我们这次的主题了,关于asp.net中的页面执行过程分析:
首先谈谈关于asp和jsp,php这些传统的web语言,因为我对后两个不是很懂,对asp也是只知道皮毛(我开始学习程序设计时,asp.net已经如火如荼了) ,所以这个只能拷网上的东西了
下边这段是我从网上找来的:
传统的服务器脚本语言,如ASP、JSP等,编写服务器脚本的方式大同小异,都是在Html中嵌入解释或编译执行的代码,由服务器平台执行这些代码来生成Html;对于这类似的脚本,页面的生存周期实际上很简单,就是从开头至末尾,执行完所有的代码,当然用Java编写的Servlet可以编写更复杂的代码,但是从结构上看,和JSP没什么区别。
首先谈谈关于asp和jsp,php这些传统的web语言,因为我对后两个不是很懂,对asp也是只知道皮毛(我开始学习程序设计时,asp.net已经如火如荼了) ,所以这个只能拷网上的东西了
下边这段是我从网上找来的:
传统的服务器脚本语言,如ASP、JSP等,编写服务器脚本的方式大同小异,都是在Html中嵌入解释或编译执行的代码,由服务器平台执行这些代码来生成Html;对于这类似的脚本,页面的生存周期实际上很简单,就是从开头至末尾,执行完所有的代码,当然用Java编写的Servlet可以编写更复杂的代码,但是从结构上看,和JSP没什么区别。
对于asp.net, 采用了"代码后置"(CodeBehind)技术,并引进了服务器端控件,并加入了服务器端事件的概念,改变了传统的教本语言编写方式, 但是他本身没有改变web编程的模式,只是封装了一些细节、提供了一些易用的功能,使代码更容易编写和维护;从某种程度上来说,将服务器端执行的方式复杂化了
下边具体谈谈asp.net一次页面执行的整个周期.
asp.net的编程模式仍然是传统的处理方式:提交请求 -> 接受请求 -> 处理请求 -> 放松响应. 下边这句话一定要记住: 每一次与客户端的交互都会引发一次新的请求,所以一个Web Page的生命周期是以一次请求为基础的。这句话是些asp.net的程序中一定要牢记的,一次的页面执行是以一次请求为基准的,通俗的说就是一次页面的刷新,
asp.net的编程模式仍然是传统的处理方式:提交请求 -> 接受请求 -> 处理请求 -> 放松响应. 下边这句话一定要记住: 每一次与客户端的交互都会引发一次新的请求,所以一个Web Page的生命周期是以一次请求为基础的。这句话是些asp.net的程序中一定要牢记的,一次的页面执行是以一次请求为基准的,通俗的说就是一次页面的刷新,
我这些天听到的最多的一句话是:程序绝对不是代码的堆积 . 所以概念的清楚比一个语法的清楚要总要的多,这个不仅仅使用与软件,其他的同样道理,神永远都大与形的.这个是一个好朋友的 名言 ,大家也共同感悟名言吧^_^
下边这段话是从msdn上看到的,讲解的是在程序的底层如何处理一次请求:
当IIS收到客户端的请求的时候,会将请求交给aspnet_wp这个进程来处理,这个进程会查看请求的应用程序域是否存在,如果不存在则会创建一个,然后会创建一个Http运行时(HttpRuntime)来处理请求,这个运行时“为当前应用程序提供一组ASP.NET 运行时服务” HttpRuntime在处理请求的时候,会维护一系列的应用程序实例,也就是应用程序的Global类(global.asax)的实例,这些实例在没有请求的时候,会存放在一个应用程序池中(实际上应用程序池由另一个类来维护,HttpRuntime只是简单的调用),每接收到一个请求,HttpRuntime都会获取一个闲置的实例来处理请求,这个实例在请求结束前不会处理其他的请求,处理完毕之后,它又会回到池中,“一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。”
下边这段话是从msdn上看到的,讲解的是在程序的底层如何处理一次请求:
当IIS收到客户端的请求的时候,会将请求交给aspnet_wp这个进程来处理,这个进程会查看请求的应用程序域是否存在,如果不存在则会创建一个,然后会创建一个Http运行时(HttpRuntime)来处理请求,这个运行时“为当前应用程序提供一组ASP.NET 运行时服务” HttpRuntime在处理请求的时候,会维护一系列的应用程序实例,也就是应用程序的Global类(global.asax)的实例,这些实例在没有请求的时候,会存放在一个应用程序池中(实际上应用程序池由另一个类来维护,HttpRuntime只是简单的调用),每接收到一个请求,HttpRuntime都会获取一个闲置的实例来处理请求,这个实例在请求结束前不会处理其他的请求,处理完毕之后,它又会回到池中,“一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。”
所以在调试asp.net的程序时,在任务管理器里边有aspnet_wp这个进程,而且我们在研究我们的代码质量时,也往往就是用的这个进程.
当应用程序实例处理请求的时候,它会创建请求页面类的实例,执行它的ProcessRequest方法来处理请求,这个方法也就是Web Page生命周期的开始。
接下来分析页面执行的每一个时期发生的事情
1、 初始化
初始化对应Page的Init事件和OnInit方法。如果要重写,MSDN推荐的方式是重载OnInti方法,而不是增加一个Init事件的代理,这两者是有差别的,前者可以控制调用父类OnInit方法的顺序,而后者只能在父类的OnInit后执行(实际上是在OnInit里面被调用的)。
1、 初始化
初始化对应Page的Init事件和OnInit方法。如果要重写,MSDN推荐的方式是重载OnInti方法,而不是增加一个Init事件的代理,这两者是有差别的,前者可以控制调用父类OnInit方法的顺序,而后者只能在父类的OnInit后执行(实际上是在OnInit里面被调用的)。
2、 加载视图状态
这是个比较重要的方法,我们知道,对于每次请求,实际上是由不同的页面类实例来处理的,为了保证两次请求间的状态,ASP.Net使用了ViewState, LoadViewState方法就是从ViewState中获取上一次的状态,并依照页面的控件树的结构,用递归来遍历整个树,将对应的状态恢复到每一个控件上。
这是个比较重要的方法,我们知道,对于每次请求,实际上是由不同的页面类实例来处理的,为了保证两次请求间的状态,ASP.Net使用了ViewState, LoadViewState方法就是从ViewState中获取上一次的状态,并依照页面的控件树的结构,用递归来遍历整个树,将对应的状态恢复到每一个控件上。
3、 处理回发数据
这个方法是用来检查客户端发回的控件数据的状态是否发生了改变。方法的原型:
public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
postDataKey是标识控件的关键字(也就是postCollection中的Key),postCollection是包含回发数据的集合,我们可以重写这个方法,然后检查回发的数据是否发生了变化,如果是则返回一个True,“如果控件状态因回发而更改,则LoadPostData 返回 true;否则返回 false。页框架跟踪所有返回 true 的控件并在这些控件上调用RaisePostDataChangedEvent。”(摘自MSDN)这个方法是System.Web.WebControls.Control中定义的,也是所有需要处理事件的自定义控件需要处理的方法,对于我们今天讨论的Page来说,可以不用管它。
这个方法是用来检查客户端发回的控件数据的状态是否发生了改变。方法的原型:
public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
postDataKey是标识控件的关键字(也就是postCollection中的Key),postCollection是包含回发数据的集合,我们可以重写这个方法,然后检查回发的数据是否发生了变化,如果是则返回一个True,“如果控件状态因回发而更改,则LoadPostData 返回 true;否则返回 false。页框架跟踪所有返回 true 的控件并在这些控件上调用RaisePostDataChangedEvent。”(摘自MSDN)这个方法是System.Web.WebControls.Control中定义的,也是所有需要处理事件的自定义控件需要处理的方法,对于我们今天讨论的Page来说,可以不用管它。
4、 加载
加载对应Load事件和OnLoad方法,对于这个事件,相信大多数朋友都会比较熟悉,用VS.Net生成的页面中的Page_Load方法就是响应Load事件的方法,对于每一次请求,Load事件都会触发,Page_Load方法也就会执行,相信这也是大多数人了解ASP.Net的第一步。
加载对应Load事件和OnLoad方法,对于这个事件,相信大多数朋友都会比较熟悉,用VS.Net生成的页面中的Page_Load方法就是响应Load事件的方法,对于每一次请求,Load事件都会触发,Page_Load方法也就会执行,相信这也是大多数人了解ASP.Net的第一步。
5、 发送回发更改通知
这个方法对应第3步的处理回发数据,如果处理回发数据返回True,页面框架就会调用此方法来触发数据更改的事件,所以自定义控件的回发数据更改事件需要在此方法中触发。同样这个方法对于Page来说,没有太大的用处,你也可以在Page的基础上自己定义数据更改的事件
这个方法对应第3步的处理回发数据,如果处理回发数据返回True,页面框架就会调用此方法来触发数据更改的事件,所以自定义控件的回发数据更改事件需要在此方法中触发。同样这个方法对于Page来说,没有太大的用处,你也可以在Page的基础上自己定义数据更改的事件
6、 处理回发事件
这个方法是大多数服务器控件事件引发的地方,当请求中包含控件事件触发的信息时
,页面控件会调用相应控件的RaisePostBackEvent方法来引发服务器端的事件。
这个方法是大多数服务器控件事件引发的地方,当请求中包含控件事件触发的信息时
,页面控件会调用相应控件的RaisePostBackEvent方法来引发服务器端的事件。
- asp.net的页面执行过程讲解
- asp.net的页面执行过程讲解
- ASP.net页面的执行过程
- asp.net页面的执行过程
- asp.net页面执行过程
- asp.net页面事件执行过程
- ASP.NET页面事件执行过程(完整版)
- ASP.NET页面事件执行过程(完整版)
- asp.net页面事件执行过程
- asp.net 页面Load事件执行过程
- ASP.NET页面事件执行过程(完整版)
- ASP.NET页面的执行顺序
- asp.net页面的Page_Load执行两次
- asp.net 页面的事件执行顺序
- ASP.NET页面事件的执行顺序
- C#向用户控件中传递参数(涉及Asp.net页面的执行过程)
- 我对Asp.net页面一系列执行过程的认识 (转载)
- ASP.NET页面初始的过程
- OWSAP 顶尖十条最关键的网站安全缺陷
- 让vdsp与uclinux共舞(6):用vdsp开发驱动的设想
- 常用的CSS命名规则
- 诺基亚在那一角落患了伤风
- PHP防注入分析
- asp.net的页面执行过程讲解
- 完整的CSS工具列表
- 100个世界上鲜为人知的奇闻怪事小知识(转)
- Java程序员面试宝典
- Delphi图像处理 -- 获取窗口或设备的图像数据
- JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
- 重庆网络安全技术社区 http://www.cqnstc.cn
- 赵晓:某些城市房地产泡沫高达90% 狂欢即将结束
- 干掉5599cn修改iE主页