WebForm

WebForm分为两个文件:aspx:是页面模板,页面描述文件,就是html+js+css的内容       aspx.cs

1. aspx页面开始的<%@Page  %> 称为指令集, 在编译的时候使用.

2. 前台页面与后台页面的继承关系     前台页面aspx --- 后台类aspx.cs ---Page类 -----实现了IHttpHandler接口,     IHttpHandler包含ProcessRequest()方法.     Control属性:控件的集合,页面上所有的代码(包括html)都以控件对象的方式存放在此集合中

2.<<<aspx页面执行过程:>>>----------------------------------------------------------------------------------  1.--首先通过反射创建aspx前台页面(第八个事件),  第九个事件尝试将页面类对象转换成IRequeiresSessionState接口对象,  如果转换不成功,则不加载Session对象, 转换成功则从请求报文头中获得  cookie里的SessionId,然后到服务器的Session池中根据Session找到Session对象  并将其引用赋值给页面对象的Session属性    2.--然后调用反射创建的请求页面的ProcessRequest()方法(第十一与第十二个事件之间)

 3.--调用父类的ProcessRequest方法,在此方法中父类调用了父类的FrameworkInitialize()  但因为被页面类重写了,所以执行的是当前页面类的FrameworkInitialize(),在中间就调用了  buildControlTree()方法,然后调用ProcessRequestMain()方法,在此方法中,执行了整个页面的生命周期  (页面生命周期,其实就是调用一系列事件的方法)

 在PR方法中 执行页面类的buildControlTree()方法来构造控件树  buildControlTree()方法中传入当前前台页面类对象,作为根节点,  生成页面控件树,将页面的每个HTML代码及相应的服务端运行的控件标签(runat=server)  都以服务器端控件类对象方式封装起来.  最后当页面执行完毕,生成整个页面对象所对应的HTML页面代码时,只需要循环遍历整个控件树的每个节点  并调用每个节点的Render方法,就可以生成每个控件里所封装的Html代码了,最后组成整个页面的html  返回浏览器.      4.--执行页面生命周期的一系列方法(PageLoad(),SaveState(),LoadState())  生命周期中有许多事件,程序员可以注册方法,并在方法中修改控件树里某个控件对象的属性    5.--通过生命周期中的方法来改变控件树中对应控件的属性,然后在调用页面的renderControl()方法生成Html代码  遍历整个控件树,调用每个控件的render方法,根据控件属性生成 并 拼成整个页面的html代码,  renderControl方法()需要传入Response对象参数,实际上是一个写出器HtmlTextWriter对象.  遍历控件树时,调用每个控件的renderControl()方法,都会传入同一个HtmlTextWriter对象,  所以每个控件生成的html代码,都按照次序存在同一个HtmlTextWriter对象中,  最后只要将这个HtmlTextWriter对象中的字符串输出 就可以形成整个页面    3.为什么在Page_Load()中Response.Write()的内容 显示在HTML代码之前,打乱页面布局???  因为页面请求时先执行Page_Load()事件,然后执行Rander()方法生成html页面

---------------------------------------------------------------------------------------------------------------    3.WebForm 前/后台页面(aspx/aspx.cs),文件在被访问时会编译成前台类和后台类    请求管道的第八个事件触发会通过反射创建的是前台类aspx,然后强转为IHttpHandler接口对象

4. 创建前台页面的后,在前台页面里可以访问其父类(后台类,Page类..)中所有的非私有成员

5.生成页面控件树的目的:  为了在服务端运行页面类对象时,可以根据用户的某些操作及环境的某些变化来修改要生成的html代码  正因为最终页面对象是要生成html代码,所以在创建封装了html代码的控件树时,就要依次添加控件.

6.在前台类中可以在<%%>里写服务器C#代码,此时可访问到后台类(父类)的非私有成员.    在前台输出 还可以使用 <%= %>

7. Request.UrlReferrer : 记录跳转页面的域名地址     Request.UserHostAddress : 服务器端是通过与客服端浏览器的套接字获取彼此的IP及端口号

8.CLR编译器会在 第一次访问aspx页面 或者 修改aspx 页面后,会重新编译生成程序集,    并将之前的的程序集标识为不可用状态,CLR内部会自己对不可用的程序集进行清理

1. runat="server" 标记该控件在服务端运行  <input type="text" id="txtName" runat="server"/>  此控件在服务器端会被运行,会变成一个对象,在服务器端可以访问到,  通过 . 可以设置一系列属性

2. Response的其他成员:      2.1 Response.Buffer=false;     //关闭输出对象的内容缓存(只要调用Write就立即输出到浏览器)      2.2 Response.BufferOutput      2.3 Response.Flush()      立即一次性输出Response对象中的内容缓存(就是之前Write的内容)      2.4 Response.Clear()      清空Response对象中的内容缓存.(就是之前Write的内容)      2.5 Response.ContentEncoding 输出流的编码,指定报文体的编码方式            Response.Charset 告诉浏览器 用什么字符集解码      2.6 Response.ContentType:报文体的格式      2.7Response.End() 终止响应

3.Server 对象:  Mappath();

4无状态 HTTP:   ASP.NET状态保持方案: 5.Session:一种吧信息保存在服务器内存中的方式  Session存在于上下文对象Context中  在服务端存一个Session键值对 Session原理:  5.1 Session["id"]=strName;  向服务器Session池添加Session对象,将键值对存入Session对象中  同时以cookie方式向浏览器发送SessionId.  5.2在浏览器未关闭的前提下,当再次访问该网站页面时,  浏览器会自动将保存了SessionId的cookie发送到服务器来  5.3在调用页面对象的ProcessRequest方法之前,  服务器端会根据Cookie里的SessionId到Session池中去找  看是否有对应的Session对象,并且将该对象的引用设置给  HttpContext里的Session属性  5.4页面对象执行PR方法时,就直接通过Page类的Session属性  可以访问到HttpContext里的Session引用. Session操作:  销毁(取消/退出) :   Session.Abandon();销毁服务端的Session   一般处理程序中访问Session对象时,必须实现IRequiresSessionState接口   标志要求使用Session状态

Session常用属性:  SessionID:唯一用户会话标识符  TimeOut:用户超时,默认为20分钟  Count: Session池中 Session对象中 键值对的对数.

6.Cookie(小甜饼):     Cookie是一种能够让网站服务器把少量数据(4kb左右)储存到客户端的硬盘或内存,并且读取出来的一种技术。  保存位置:未设置失效时间的时候保存在内存中,设置了之后保存在硬盘中  创建Cookie对象(保存键值)    cookie注意:  与域名相关  与浏览器相关  4kb左右存储    1.HttpCookie cookie=new HttpCookie("id","110");  cookie.Expires=DateTime.Now.AddDay(2);//设置失效时间 当前时间+2天  Response.Cookies.Add(cookie);    服务器获取Cookie  Request,Cookies["id"].Value    删除浏览器Cookie  创建一个cookie  与登录时的cookie名相同  HttpCookie cookie=new HttpCookie("id"," ");  cookie.Expires=DateTime.Now.AddDay(-2);//设置失效时间 当前时间-2天  Context.Response.Cookies.Add(cookie); Cookie的实现原理,  就是通过请求报文头和响应报文头实现的

Request.Cookies 服务器端获取Cookie Response.Cookies 向浏览器输出cookie

7 viewstate:在客户端保存用户数据     只帮助服务器控件保存状态,不支持html控件     其使用页面上必须包含一个服务器form标签   用法:1 非单值服务器控件的状态自动保存在viewstate中         2 保存用户自定义的数据

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-09-01 08:02  zxp19880910  阅读(255)  评论(0编辑  收藏  举报