|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。asp.net|web1、服务器剧本基本先容
起首,我们先温习一下Web服务器页面的基础实行体例:
1、客户端经由过程在扫瞄器的地点栏敲上天址来发送哀求到服务器端
2、服务器吸收到哀求以后,发给响应的服务器端页面(也就是剧本)来实行,剧本发生客户真个呼应,发送回客户端
3、客户端扫瞄器吸收到服务器传回的呼应,对Html举行剖析,将图形化的网页出现在用户眼前
关于服务器和客户真个交互,一般经由过程上面几种次要体例:
1、Form:这是最次要的体例,尺度化的控件来猎取用户的输出,Form的提交将数据发送给服务器端处置
2、QueryString:经由过程在Url前面带参数到达将参数传送给服务器,这类体例实在跟Get体例的Form是一样的
3、Cookies:这是一种对照特别的体例,一般用于用户身份切实其实认
2、ASP.Net简介
传统的服务器剧本言语,如ASP、JSP等,编写服务器剧本的体例迥然不同,都是在Html中嵌进注释或编译实行的代码,由服务器平台实行这些代码来天生Html;关于这相似的剧本,页面的保存周期实践上很复杂,就是从开首至开端,实行完一切的代码,固然用Java编写的Servlet能够编写更庞大的代码,可是从布局上看,和JSP没甚么区分。
ASP.Net的呈现,冲破了这类传统;ASP.Net接纳了CodeBehind手艺和服务器端控件,到场了服务器真个事务的观点,改动了剧本言语编写的形式,加倍切近Window编程,使Web编程加倍复杂、直不雅;可是我们要看到,ASP.Net自己并没有改动Web编程的基础形式,只是封装了一些细节、供应了一些易用的功效,使代码更简单编写和保护;从某种水平下去说,将服务器端实行的体例庞大化了,这就是我们明天要会商的主体:ASP.NetWebPage的保存周期。
3、ASP.Net哀求处置形式
我们说,ASP.Net的WebPage并没有离开Web编程的形式,以是它仍旧是以哀求->吸收哀求->处置哀求->发送呼应如许的形式在事情,每次与客户真个交互城市激发一次新的哀求,以是一个WebPage的性命周期是以一次哀求为基本的。
当IIS收到客户真个哀求的时分,会将哀求交给aspnet_wp这个历程来处置,这个历程会检察哀求的使用程序域是不是存在,假如不存在则会创立一个,然后会创立一个Http运转时(HttpRuntime)来处置哀求,这个运转时“为以后使用程序供应一组ASP.NET运转时服务”(摘自MSDN)。
HttpRuntime在处置哀求的时分,会保护一系列的使用程序实例,也就是使用程序的Global类(global.asax)的实例,这些实例在没有哀求的时分,会寄存在一个使用程序池中(实践上使用程序池由另外一个类来保护,HttpRuntime只是复杂的挪用),每吸收到一个哀求,HttpRuntime城市猎取一个闲置的实例来处置哀求,这个实例在哀求停止前不会处置其他的哀求,处置终了以后,它又会回到池中,“一个实例在其保存期内被用于处置多个哀求,但它一次只能处置一个哀求。”(摘自MSDN)
当使用程序实例处置哀求的时分,它会创立哀求页面类的实例,实行它的ProcessRequest办法来处置哀求,这个办法也就是WebPage性命周期的入手下手。
4、Aspx页面与CodeBehind
在深切懂得页面的性命周期之前,我们先来切磋一些Aspx与CodeBehind之间的干系。
<%@Pagelanguage="c#"Codebehind="WebForm.aspx.cs"Inherits="MyNamespace.WebForm"%>
信任利用过CodeBehind手艺的伴侣,对ASPX顶部的这句话应当长短常熟习了,我们来一项一项的剖析它:
Pagelanguage="c#"这个就不必多说了吧
Codebehind="WebForm.aspx.cs"这一句暗示绑定的代码文件
Inherits="MyNamespace.WebForm"这句十分主要,它暗示页面承继的类称号,也就是CodeBehind的代码文件中的类,这个类必需从System.Web.WebControls.Page派生
从下面我们能够剖析出,实践上CodeBehind中的类就是页面(ASPX)的基类,到这里,大概有些伴侣要问了,在编写ASPX的时分,完整是依照ASP的体例,在Html中嵌进代码大概嵌进服务器控件,没有看到所谓“类”的影子啊?
这个成绩实践上其实不庞大,列位利用ASP.Net编程的伴侣能够到你们的体系盘:WINDOWSMicrosoft.NETFramework<版本号>TemporaryASP.NETFiles这个目次下,这个上面就放了一切本机上存在的ASP.Net使用程序的一时文件,子目次的称号就是使用程序的称号,然后再下往两层(为了包管独一,ASP.Net主动发生了两层子目次,而且子目次称号是随机的),然后我们会发明有良多相似:“yfy1gjhc.dll”、“xeunj5u3.dll”如许的链接库和“komee-bp.0.cs”、“9falckav.0.cs”如许的源文件,实践上这就是ASPX被ASP.Net静态编译后的了局,翻开这些源文件我们能够发明:
publicclassWebForm_aspx:MyNamespace.WebForm,System.Web.SessionState.IRequiresSessionState
这就印证了我们后面的说法,ASPX是代码绑定类的子类,它的称号是ASPX文件名加上“_aspx”后缀,经由过程研讨这些代码我们能够发明,实践上一切aspx中界说的服务器控件都是在这些代码中天生的,然后静态发生这些代码的时分,把本来在ASPX中嵌进的代码写在了响应的地位。
当某个页面第一次被会见的时分,Http运转时就会利用一个代码天生器往剖析ASPX文件并天生源代码并编译,然后今后的会见就间接挪用编译后的dll,这也是为何ASPX第一次会见的时分十分慢的缘故原由。
注释了这个成绩,我们再来看另外一个成绩。我们在利用代码绑定的时分,在计划页面拖一个控件,然后切换到代码视图,就能够间接在Page_Load中利用这个控件了,既然控件是在子类中发生的,那为何在父类中能够间接利用呢?
实践上我们能够发明,每当用VS.Net拖一个控件到页面上,代码绑定文件中老是会相似如许的增加一个声明:
protectedSystem.Web.WebControls.ButtonButton1;
我们能够发明这个字段被声明成protected,并且名字与ASPX中控件的ID分歧,细心想想,这个成绩就水到渠成了。我们后面提到ASPX的源代码是被天生器静态天生和编译的,天生器会发生静态天生每个服务器控件的代码,在天生的时分,它会反省父类有无声明这个控件,假如声了然,它会增加相似上面的一句代码:
this.DataGrid1=__ctrl;
这个__ctrl就是天生该控件的变量,这时候候它就把控件的援用赋给了父类中响应的变量,这也是为何父类中的声明必需为protected(实践上也能够为public),由于要包管子类可以挪用。
然后在实行Page_Load的时分,由于这时候候父类的声明已被子类中的初始化代码赋了值,以是我们就能够利用这个字段来会见对应的控件,懂得了这些,我们就不会犯在代码绑定文件中的机关器里利用控件,形成空援用的非常的毛病了,由于机关器是开始实行的,这时候候子类的初始化还没有入手下手,以是父类中的字段是空值,至于子类是甚么时分初始化我们放到前面会商。
5、页面熟存周期
如今回到第三个题目中讲到的内容,我们讲到了HttpApplication的实例吸收哀求,并创立页面类的实例,实践上这个实例也就是静态编译的ASPX的类的一个实例,上一个题目中我们懂得到ASPX实践上是代码绑定中类的子类,以是它承继了一切的protected办法。
如今我们来看看VS.Net主动天生的CodeBehind类的代码,以此来入手下手我们对页面熟命周期的切磋:
#regionWebFormDesignergeneratedcode
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:该挪用是ASP.NETWeb窗体计划器所必须的。
//
InitializeComponent();
base.OnInit(e);
}
///<summary>
///计划器撑持所需的办法-不要利用代码编纂器修正
///此办法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.DataGrid1.ItemDataBound+=newSystem.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load+=newSystem.EventHandler(this.Page_Load);
}
#endregion
这个就是利用VS.Net发生的Page的代码,我们来看,这内里有两个办法,一个是OnInit,一个是InitializeComponent,后者被前者挪用,实践上</p>结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。 |
|