1、浏览器与服务器的交互是通过Socket

2、浏览器与服务器交互的语法是:Http协议

3、浏览器于服务器交互的目的:获取服务器资源(html、图片、js、css)

4、服务器的功能:满足浏览器的需求,一旦是动态请求时,服务器创建页面类对象,并执行里面的方法,

最后生成html页面,返回。

5、WebForm开发只不过是进一步对ashx(一般处理程序的继承)

6、页面对象包含一个要输出到浏览器的《textWrite中》数据缓存区。在处理程序处理的数据放到了缓存中,在缓存区中处理http报文等,然后再一次性的输出《包括生成的html代码》。

7、开发中的js编程的效率的提高:尽量少的去遍历节点树。可以用临时变量来保存对象的引用。

Request中其他成员:

Request.UrlReferrer 上一次的地址----->防盗链

Request.UserHostAddress-------->获得访问者的IP地址

Request.Cookies--------->context.Request.Cookies["mysessionid"]   ------------>Response.Cookies<写回>

Request.MapPath(virtulPath)将虚拟路径转换为磁盘上的物理路径------------>挺重要

•响应的缓冲输出:为了提高服务器的性能,ASP.Net向浏览器Write的时候默认并不会每Write一次都会立即输出到浏览器,而是会缓存数据,到合适的时机或者响应结束才会将缓冲区中的数据一起发送到浏览器。
Response.Flush()是直接输出
•Response对象的主要成员:
–1、Response.Buffer、Response.BufferOutput:经过Reflector反编译,发现两个属性是一样的,Buffer内部就是调用的BufferOutput。这个属性用来控制是否采用响应缓存,默认是true。
–2、Response.Flush()将缓冲区中的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。案例:大批量数据的导入,显示正在导入第*条数据,用Thread.Sleep模拟耗时。
–3、Response.Clear()清空缓存区中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。
–4、Response.ContentEncoding输出流的编码。
–5、Response.ContentType 输出流的内容类型,比如是html(text/html)还是普通文本(text/plain)还是JPEG图片(image/JPEG)。

6、Response.Cookies 返回给浏览器的Cookie的集合,可以通过它设置Cookie

7、Response.OutputStream 输出流,在输出图片、Excel文件等非文本内容的时候要使用它

8、Response.End()  终止响应,将之前缓存中的数据发给浏览器,End()之后的代码不会被继续执行。在终止一些非法请求的时候,比如盗链等可以用End()立即终止请求。

9、Response.Redirect(url) 重定向浏览器到新的网址。即可以重定向到站外网址也可以重定向到站内网址。Response.Redirect("http://www.rupeng.com")、Response.Redirect("a.htm")。Redirect是向浏览器发回302重定向,是通知浏览器“请重新访问url这个网址”,这个过程经历了服务器通知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程。使用HttpWatch查看整个响应过程的Http报文。用Redirect因为是浏览器自己去重新访问新网址的,所以在地址栏中是可以看到网址的变化的。后面会用来防止刷新浏览器时提示“重试”。

10、Response.SetCookie(HttpCookie cookie),向输出流中更新写到浏览器中的Cookie,如果Cookie存在就更新不存在就增加。是对Response.Cookies的简化调用。

11、Response.Write()向浏览器输出内容。

12、(*)Response.WriteFile(filename)向浏览器输出文件。比如Response.WriteFile("c:/boot.ini")

--------------在服务器端控件中,添加了事件要加AutoPostBack=“true” 属性如textarea

-------------------------------------------------------------------------------运行过程总结------------------------------------------------------------------

1、asp.net页的生命周期——《引用其他人博客》

一.什么是Asp.Net页面生命周期

当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来创建页面对象。通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的。接下来被创建页面对象的ProcessRequest方法使页面经历了各个阶段:初始化、加载视图状态信息和回发数据、加载页面的用户代码以及执行回发服务器端事件。之后,页面进入显示模式:收集更新的视图状态,生成 HTML 代码并随后将代码发送到输出控制台。最后,卸载页面,并认为请求处理完毕。其中页面对象ProcessRequest方法 完成的这一系列事件的处理过程就是Asp.Net页面生命周期。

 

二.了解Asp.Net页面生命周期的好处

了解个掌握ASP.NET页面生命周期是非常必要的,这有助于我们更加灵活的控制页面,以我们需要的方式编程开发。ASP.NET页运行时,此页会经历一个又一个的事件链,每个事件链中执行不同的行为,这所有的行为共同组成我们所需要的页面。了解了生命周期也更有助于我们对程序调试中发生问题的地方的定位。

三.详解Asp.Net页面生命周期

 

(一)先看看在开始一个页面生命周期之前,请求的页面经历了那些过程。如图所示:

通信处理过程:

当服务器运行正常的情况下,客户端(浏览器)
向服务器端发送请求时,服务器端负责监听的套接字(socket),监听到有连接请求后,会为该客户端建立一个用于通信的套接字与客户端进行通信。当用户在浏览器向服务器发送请求时,浏览器会按照双方都约定好的网络传输层http协议,将请求转换成符合Http协议的请求报文。然后通过设备按照TCP协议发送到服务器。在服务器端接收到请求报文后。会按照Http协议对报文进行解析。若请求的内容为静态的数据,服务器端直接将被请求的数据,按照Http协议生成响应报文后返回给浏览器。浏览器然后解析收到的报文。将页面显示到浏览器窗口。(注:最开始仅是显示一个html 框架。经过多次请求。将CSS样式,图片………逐一的加载进来形成一个完整的页面。这个过程,有多次的交互通信。当通信结束后会把用来通信的套接字销毁,因为http协议是一种无状态的通信。这样减轻了服务器的压力)

当浏览器向客户端发送的请求为动态的。那么服务器(IIS)发现处理不了这种后缀名的文件时,会通过映射表到。响应实现了接口的可扩展程序asp.net_isapi.dll, 然后asp.net_isapi.dll,又将请求转交给网站程序处理.网站程序调用

httpRuntime类的processRequest方法来处理:

1.         此类会分析接收到的请求报文.将请求报文封装到名称为httpWorkerRequest的类的属性中(便于其它地方以用).

2.         创建HttpContext对象.这个对象是当前所请求报文的上下文环境.它包含了所有的请求数据.其中有两个最重要类的对象:http.Request和http.Response.  在httpRequest对象中又包含了两个属性.Form(通过表单请求的数据参数).Querystring(通过URL传递的数据参数); 通过索引器,可以找到参数的值. 在httpResponse 对象中有一个TextWriter对象.在它里面保存的是被请求的页面在执行过程中要向浏览器输出的数据.可以通过write 方法对其进行输出给浏览器。

3.         通过HttpApplicationFactory类的的一个静态方法。来为每个请求创建一个单独的httpApplication对象。在创建之前HttpApplicationFactor会到HttpApplication池中查看,有没有空闲的。若有直接用。没有的时候才创建新的HttpApplication。

4.         在httpApplication里运行己转换成接口IhttpHandler 的通过反射被请求页面对象的ProcessRequest 方法.

方法执行过程如下:先执行httpApplication中的processRequest方法。在此方法中包含了要按照先后顺序执行的19个委托事件 当在执行到第8个事件的时候就开始创建被请求页面对象,在执行到第11和第12个事件之间时。就执行被创建的请求页面对象的ProcessRequest方法。

 

(二)开始页面生命周期

1.页面生命周期的主要阶段包括: 阶段 事件/方法   
页面初始化          Page_Init  
加载View State      LoadViewState   
回发数据处理      LoadPostData   
页面加载          Page_Load   
回发通知          RaisePostDataChangedEvent  
回发事件处理     RaisePostBackEvent  
页面预渲染       Page_PreRender   
保存             viewstate SaveViewState   
Page渲染         Page_Render   
Page 卸载       Page_UnLoad

2.页面生命周期的主要事件:

PreInit:

1.检查IsPostBack 属性

2.动态设置Master Page

3.动态设置Theme

4.设置控件的默认值(UniqueId等)

5.重新创建动态控件(初始化控件),初始化控件的值

Init: 这个事件发生在所有的控件被初始化,所有的皮肤设置被应用以后。它用来读取或者初始化控件属性。它能够用来注册一些aspx页面中没有指出的控件的事件。

InitComplete: Use this event for processing tasks that require all initialization to be complete.

PreLoad: 加载页面的ViewState和所有的控件,然后处理所有的包含在Request实例中的postback数据。

Load: 这个事件可能是大家最熟悉的了。需要注意的是,Page对象会递归的调用子控件的onload事件直到页面和所有的子控件被加载完成。这个事件主要用来设置控件属性的值,建立数据库连接(通常不这么做)。

Validation: 如果你的控件要求验证,验证会在这个阶段发生,这个时候你可以检查控件的IsValid属性。跟这个阶段关联的事件是Validate,它有一个可以接受验证字符串群的重载方法(overload method),这个重载方法执行特定控件群的验证。

Control events: 这个就不多说了,主要是处理控件的事件,例如click。这也就让我们明白了每次我们click一个Button的时候,实际上是要先去执行load事件然后才执行click事件的,一般我们用!IsPostBack来判断一下从而避免执行不必要的加载逻辑。

LoadComplete: 页面所有的控件都被加载以后执行,暂时没有想到用来干什么。。。

PreRender: 在HTML被生成之前这是最后一个事件。每一个页面中的控件都有PreRender的过程。在这里对将要输出的HTML结果进行最后一次修改。

SaveStateComplete: 在这个时间发生之前,已经保存了所有控件和页面的,任何对page或者控件的改动都不会产生左右。暂时没想到用来干啥。

Render: 它不是一个事件而是一个方法。工作就是把HTML写回客户端浏览器。

UnLoad: 页面中的每一个控件都会发生这件事。在控件中,使用这个事件来做清理工作,例如关闭数据库连接等。对与页面本身也是做清理工作,例如关闭打开的文件和数据库连接,或者结束日志或者其它指定的工作。

需要说明的是,每次Request都会创建一个全新的Page类的实例,所以在页面中的自己定义的字段是不能在两次request中传递值的,需要使用viewstate来存储。

页面处理的整体过程图解

四.什么地方用到了Asp.Net 页面生命周期

   对于这个问题,在面试中我遇到过,我觉得问这个问题有点不正常。我当时回答的是。Viewstate 对值的记录上用到了生命周期,总是觉对不太对。

生命周期理解了,并不代表我们会用它。只有理解了,我们才会在以后的工作中慢慢真正的懂它,用它。

总结:计划了好久,一直没有写,今天下定决心一定要写了。终于完成了。我看有一位博友的用三张图片详解Asp.Net 全生命周期还不错。用图结构清晰,更便于理解。故贴到下面便于博友们和以后自己的查看。原文地址:http://www.cnblogs.com/zhaoyang/archive/2011/11/16/2251200.html

说明:

1  第一张图片从全局说明从客户端发出一个Request请求,服务器windows内核中的HTTP.SYS组件接收该请求开始到IIS处理完该请求并响应到客户端结束。

2  第二张图片为图1中Http处理管线的详细步骤

3  第三张图片为图2Http处理管线中调用处理程序(HttpHandler,  此处为Page对象)的详细生命周期过程。

图1:

图2.

图3.

转载于:https://www.cnblogs.com/kongbin/p/3171468.html

2013年7月04日_回顾总结相关推荐

  1. 2013年10月17日_羊豆豆_新浪博客

    一个人,不能了解生命,生命对他来说是一种惩罚. 改变别人,不如先改变自己. 拥有财富的人,不如拥有智慧的人. 常常原谅自己的人,往往得不到上苍的原谅. 常常责备自己的人,往往能得到他人的谅解. 人很奇 ...

  2. 2013年11月26日 20:26:36 做某香米过程中问题总汇

    个人工作: A.图片编辑界面: ①图片旋转 ②滤镜效果[*] 使用GPU Image开源库,120种滤镜效果,3-4天之内 ③缩放 ④亮度[*] ⑤文字编辑 B.代码方面: ①代码合并 细节点比如一天 ...

  3. 百万年薪背后 是人工智能领域泛起的人才泡沫 2017年07月04日 06:30 PingWest 微博 微信 空间 分享 添加喜爱 //d1.sina.com.cn/201706/26/14587

    百万年薪背后 是人工智能领域泛起的人才泡沫 2017年07月04日 06:30 PingWest 微博微信空间分享添加喜爱 (原标题:百万年薪背后 是人工智能领域不断泛起的人才泡沫) 应采访者要求,戴 ...

  4. 2013年期中总结 2013年9月10日20:17:49

    题目中的时间,我改了几次,一直在想这半年来的经历,我想我是成长着的吧! 继上次总结<2012年年度总结   2013年2月25日21:49:44>,眨眼过去了半年,细细想来这半年来的重头戏 ...

  5. 2013年5月18日华东数据库技术大会演讲嘉宾和演讲主题等信息

    [导读] 自2009年于上海举办技术类会议以来,一直坚持公益性且技术干货为主的特点,在2009年致2011年底之间的三年期间一直是IT168坚持真诚奉献,后因公司被收购等因素不得不放弃华东地区的免费技 ...

  6. 湖南卫视节目单2013年3月17日

    2013年3月17日周日 湖南卫视24小时节目预告单 早间节目 00:40 我是歌手 02:40 我是大美人 03:20 媳妇是怎样炼成的(22) 04:03 媳妇是怎样炼成的(23) 04:46 媳 ...

  7. php 类加载失败,记2013年5月17日,php部分模块加载失败案例

    公元2013年5月17日,星期五.今天是个普通的日子,但对于我而言,这一天似乎充满着劫难.算了,不白话了,直接上苦情剧吧! 今天部署测试服务平台,基于PHP网站的服务器架构. 平台搭建 平台软件:ap ...

  8. 第十一届中国国际软件合作洽谈会——ChinaSoft2013——2013年4月11日上午摘要

    大会摘要 时间:2013年4月11日--2013年4月12日 地点:成都新会展中心 图一 第十一届中国国际软件合作洽谈会外景 图二 第十一届中国国际软件合作洽谈会内景 图三 第十一届中国国际软件合作洽 ...

  9. 【加】德鲁·卡宾森 - 质量效应3:天罚(2013年6月26日)

    <质量效应3:天罚> 作 者:[加]德鲁·卡宾森 译 者:冯蔚骁 系 列:质量效应 出 版:重庆出版社 字 数:215千字 阅读完成:2013年6月26日 转载于:https://www. ...

最新文章

  1. PCA目标函数的推导
  2. Hadoop集群管理与NFS网关
  3. friend之友元函数和友元类
  4. boost::depth_first_search用法的测试程序
  5. NIFI从mysql导入Hbase
  6. ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
  7. IBM软件服务创新运用 提升市民生活质量
  8. Mysql常用分组聚合函数(统计行的数量、最大值、最小值、平均值、求和)
  9. python open方法1001python open方法_怎样才能写出 Pythonic 的代码 #P1001#
  10. 通过web的方式动态查看tomcat的catalina.out的日志(web.py)
  11. near、far、huge,based四个个指针的区别
  12. oracle常用数据字典 表,Oracle数据库中常用的数据字典表和视图
  13. 保护你的端口(转自赛迪网)
  14. [开源之美] nanomsg -- 进程间通讯
  15. Matlab filter2、conv2报错:不支持N维数组
  16. 单片机延时问题20问
  17. 微型计算机第十一章答案,计算机习题答案总.docx
  18. java毕业生设计眼科医疗室信息管理系统计算机源码+系统+mysql+调试部署+lw
  19. win7 系统装SQLServer2000 成功。
  20. Matlab:License checkout failed. License Manager Error-95解决办法与Matlab加速启动

热门文章

  1. 【Ubuntu】 Ubuntu16.04搭建Samba服务
  2. 【面试题】 迅雷2014校园招聘笔试题
  3. 正则表达式不包含某个字符串_JMeter必知必会系列(18) JMeter正则表达式提取器疑难分析...
  4. Qt5.0中lineEdit的输入输出
  5. java中垃圾收集_Java中的垃圾收集器是什么?
  6. 查看某个方法在哪里被调用_MATLAB局部函数公有化的方法: localfunctions
  7. 远程协助TeamView软件 轻松控制计算机
  8. VBScript在服务器上创建目录
  9. 命令行运行vbs脚本并传参数给vbs中的变量简单示例
  10. 用scikit-learn和pandas学习线性回归