MSDN:
1、IIS7.0的ASP.NET应用程序的生命周期 ASP.NET页面的生命周期
一、基础知识
1、一个ASP.NET Web网站包含如下:
Default.aspx文件为ASP.NET Web窗体文件,该文件作为网站的默认主页,可以包含Web控件
Default.aspx.cs文件为网页运行时要编译的源代码文件
Web.config文件为Web配置文件
Global.asax文件记录需要初始化的变量,全局文件
2、新建网站时选择的Web位置
*文件系统网站:用户选择在本地计算机上某个文件夹中存储页面和其他文件
*HTTP网站:将用户的文件存储在本地IIS根目录的子文件夹中,通常是(InetpubWwwroot)
*FTP网站:将文件存储在远程服务器上,用户可以使用文件传输协议(FTP)通过Internet访问该服务器
3、一个完整的AS.NET页面文档由指令、文档声明类型、代码声明、服务器代码、文本和XHTML标记等部分组成
*指令
ASP.NET页面通常包含一些指令,允许用户指定页面的属性和配置信息,对页面进行设置,当然对于指令指定的设置是不会出现在浏览器端的,它只是指交给浏览器来处理
.aspx文件和.cs文件的相互关联是由aspx文件的@page指令连接的
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="true" Inherits="WebApplication1.WebForm1" %>
由<% %>修饰的都是交给服务器处理的部分,该指令说明编程语言是C#,指定包含与页关联的类的已编译文件的名称是WebForm1.aspx.cs,AutoEventWireup
指示控件的事件是否自动匹配 (Autowire),Inherits="WebApplication1.WebForm1"定义供页继承的代码隐藏类。
*文档类型声明
<!DOCTYPE HTML>
DOCTYPE为文档类型声明,指定本文档遵从的DTD标准,同是指定文档中的XHTML版本,可以和哪些验证工具一起使用等信息,文档声明是每个页面文档所必须的
没有文档类型声明时浏览器采用默认的方式,即W3C推荐的HTML4.0来处理此HTML文档。
*代码声明
页面的代码声明位于<script>...</script>标记中,包含ASP.NET页面的所有应用逻辑和全局变量声明、子例程和函数。
*服务器代码
包含在服务器端运行的代码,页面的代码开始标记包含 runat="server"属性,ASP.NET将此标记标识为服务器控件,并使其可以用于服务器代码
*文本和XHTML标记
页面的文本部分由XHTML标记来实现
4、特殊文件夹
App_Data:保存应用程序使用的数据库
App_Code:存储所有应当作为应用程序的一部分动态编译的类文件,这些类文件自动链接到应用程序,而不需要在应用程序中添加任何显示指令或声明来创建依赖项。
包括的都有-自定义控件、辅助类、build提供程序、业务类、自定义提供程序和HTTP处理程序等。
Bin:包含应用程序所需的,用于控件、组件或者需要引用的任何其他代码的可部署程序集。
App_Thems:为站点上每个页面提供统一外观和操作方式的一种新方法,通过skin文件、CSS文件哎in和站点上服务器控件使用的图像来实现主题的功能。
App_GlobalResources:资源文件,可以在这个文件夹中添加程序集资源文件.resx,它会动态编译成为解决方案的一部分
二、页面管理
1、页面代码模式
ASP.NET的页面包含两个部分:一部分是可视化元素,包含标签、服务器控件以及一些静态文本等;另一部分是页面的逻辑,包含事件处理句柄和其他程序代码
ASP.NET提供两种模式来组织页面元素和代码:
*单一文件模式:页面的标签和代码在同一个.aspx文件中
*后台代码模式:将可视化元素和程序代码风别放置在不同的文件中,实现代码分离模式
2、页面往返机制
ASP.NET页面作为代码在服务器上运行的,如果要是页面的按钮或者其他内容得到处理,并将该信息提交到服务器。每次页面提交时,都会在服务器端运行其代码,然后 把运行的结果呈现给用户。
(1)用户通过客户端浏览器请求页面,页面第一次运行,执行初步处理
(2)执行的结果以标记的形式呈现给浏览器,浏览器对标记进行解释并显示
(3)用户输入信息,或者选择执行选项,如果是重定向到另一个页面,那么该页面不会被进一步处理
(4)页面发送到Web服务器,在ASP.NET中称为“回发”,也就是说页面发送回其自身
(5)服务器将执行后的页面以HTML或XHTML标记的形式发送到客户端的浏览器
只要用户访问同一个页面,该循环就会继续,有时候需要代码仅在首次请求页面的时候执行,而不是每次回发是都执行,这时候可以使用Page对象的IsPostBack属性来避免对往返行程执行不必要的处理
3、页面生存周期
ASP.NET页面在运行时将经历一个生命周期,在生命周期中,该页面将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。 浏览器从Web服务请求页面时,浏览器和服务器相连的时间仅够处理请求。Web服务器将页面呈现到浏览器之后,连接即终止。如果浏览器对同一Web服务器发出另一个请求,则即使是对同一个页面发出的,请求仍会作为新请求来处理。
三、常用内置对象
Response对象:Response对象掌管ASP.NET的Input功能,实际是在执行System.Web命名空间中的HttpResponse类,CLR会根据用户的请求信息建立一个Response对象,
Response对象将用于回应客户端浏览器,告诉浏览器回应内存的报头、服务器端的状态信息以及输出指定的内容。
主要功能: 传输数据-<%Response.Write(string);%>
跳转网页-Response.Redirt(string url);
输出文件
传递参数-Response.Redirt("index.aspx?username="zhangsan");
Request对象:Request对象接收客户端通过表单或者URL地址串发送来的变量,同时也接收其他客户端环境变量。
ASP.NET是使用表单(Form)来实现用户数据提交的,
Get方法:使用Request.QueryString方法来取得传递的数据,用户要提交的数据信息往往是作为查询字符串加在URL的后面传给接收程序,对大小有限制一般是2KB左右。
Post方法:对数据大小和长度没有什么限制,由于地址栏中不显示相关的查询字符串,那么使用Post方法就十分适合用来传递保密信息,例如用户的账户和密码
Application对象:由于在整个应用程序生存周期中,Application对象都是有效的,所以在不同的页面中都可以对它进行存取,就像使用全局变量一样方便。它可以在多个
请求、连接 之间共享公共信息,也可以在哥哥请求连接之间充当信息传递的管道。需要注意的是,首先这个状态变量是建立在内存中的,其次这个状态变量是可以被网站的所有
页面访问的,不必考虑 用户的不同,但是这样就可能造成多个用户在同一时间对Application中的信息进行修改,解决的方法是加锁。
Session对象:用于存储特定的信息,Application对象存储的是共享信息,而Session存储的信息是局部的,是随用户的不同而不同的,Session是有生命周期的,默认是20分钟。
Session对象存储在两个地方,分别是客户端和服务器端,客户端只负责保存相应的网站的SessionID,而其他的Session信息保存在服务器端,这也就是Session安全的原因,在客户端只存储SessionID,这个SessionID只能被当前请求的网站的客户所使用,其他人则是不可见的;而Session的其他信息是保存在服务器端的,而且永远也不发送给客户端
Web.Config中
<sessionState mode="Inproc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0;Trusted_Connection=yes" cookies="false" timeout="20" />
1、将其中的代码段“cookieless="false"改为“cookieless=true”客户端就不再使用Cookie存储Session信息,而是将其通过URL存储,在地址栏中就看到了SessionID,设置mode="InProc",这种存储模式就是在服务器端将Session信息存储在IIS进程中,IIS关闭、重启后,这些信息都会丢失,但是这种模式的性能最高,因为所有的Session都存储在IIS的进程中,所以IIS能够很快的访问它们。还有Session可以存储在外存和SQL Server中
Server对象:该对象提供对服务器上的方法和属性的访问,
一个重要的功能就是对字符进行URL和HTML的编码和解码
string str=Server.HtmlEncode("<B>HTML 内容</B>");
str=Server.HtmlDecode(str);
Response.Write(str);
ViewState对象:视图状态对象,保存往返过程之间的页面信息以及控件值的方法.可存储自定义对象,但是需要序列化该对象。
Cookie对象:存储数据-存储与内存中的临时数据和存储与硬盘中的永久数据,硬盘中的位置是C:UsersDefaultAppPoolAppDataRoamingMicrosoftWindowsCookies,值得一提的是Cookie与网站关联,而不是与特定的页面关联,因此无论用户请求站点中的哪一个页面,浏览器和服务器都将交换Cookie信息,用户访问不同的站点是,各个站点都可能会向用户的浏览器发送一个Cookie,浏览器分别存储所有的Cookie。