|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。对照|编程|对象|对照 ASP是Microsoft于较初期推出的静态网页编程手艺,但其联合ADO对数据库便利快捷的会见、联合XML、COM/ActiveX等其它手艺 完成办事器多层布局的功效使它在明天还有着倔强的性命力,而且仍然有着必定的开展。ASP.Net固然在架构上完整分歧于ASP,但它良多内建对象也是基 于ASP停止扩大的。网上有没有数的引见ASP的文章,却鲜有引见ASP面向对象和与其它言语对照的,这也就是我下决计写这篇文章的缘由。
由于是初期的版本,ASP只供应了很弱的面向对象的接口。尽人皆知,ASP的完成言语分为VBScript和JavaScript/JScript: 在VBScript中有Class关头字,可以用来声明一个自界说类;JavaScript就对照怪,它用一个函数来“声明”类,然后在该函数里经由过程 this.prototype界说属性,this.func界说办法。这里将以VBScript为主停止会商,VBScript的类声明是如许的:
Class name
statements
End Class
这里statements里可以声明私有或公有的成员,包含函数、成员和属性。关于属性,不能不赞一下微软的get和set办法,这个在COM中呈现 的理念,直到.Net中一向被沿用上去,团体以为对法式员而言,比Java用getProp()、setProp()两个办法来完成一样后果要便利直不雅得 多。
比拟之下,VBScript中的类与PHP4中的类各有所长(固然跟最新的PHP5没法比),VBScript中的类坚持了VB的不完整面向对象的 “特征”,它仅仅完成了最根基的机关/析构函数、成员函数、变量、属性,乃至机关函数不克不及带参数。PHP4中则还完成了承继、函数重载等类的主要性质,也 只要完成了这些,才干称之为面向对象,才有能够为完成多态供应基本。但两者均没有完成类的静态(static)成员等功效。虽然可以用其它一些变灵通到同 样的功能,但从面向对象的思惟动身,这都是不完全的(因为PHP十分天真,PHP4中可以经由过程成员函数的静态变量来直接完成类的静态变量;而“::”―― 可以完成类的静态函数会见的操作符――在PHP4中没有严厉反省。换句话说,一切的成员函数都可以当做静态函数会见,只需你在该函数里不利用成员变量就不 会失足。VBScript基本没有完成static,只能用Session或Application来完成)。所以在平凡的利用中,你可使用 VBScript的自界说类来封装一些操作,但不要期望它像C++ / Java / .Net那样为你的面向对象思惟办事。
VBScript一样发扬了VB中默许的参数或变量是援用的好作风。如许,虽然Script言语中对类型不敏感,但它还可以到达C/C++里指针/援用一样的功能,完成良多工作。最根基的,好比说用它界说一个列表(List)的节点类ListNode:
<%
Class ListNode
Public Content
Public NextNode
Private Sub Class_Initialize()
Content="Node"
Set NextNode=Nothing
End Sub
End Class
%>
呵呵,就这么复杂,但不要感应鄙夷,也不要健忘对变量初始值。VB中也差不多,声明时加上类型就好了。而利用时:
<%
Set nh=new ListNode
Set nh.NextNode=new ListNode
'其它语句……
'遍历列表
Set n=nh
While Not n is Nothing
Response.Write n.Content+"<br />"
Set n=n.NextNode
Wend
%>
假如不加其它代码,下面的运转了局是两个“node”。VBScript的自界说类和对象也不过如是,只需你把握根基的概念,对它有必定懂得,就再复杂不外了。再次强调,用Set语句来对对象停止赋值,相当于Java里的赋值,都是取得一个援用。这比PHP4里默许对象赋值是挪用拷贝机关函数来创立一 个新的对象很多多少了(乃至连obj=new Obj;如许的语句城市创立两个对象!假如你想取得援用的话,要在等号后变量前显示地加上&),而仿佛PHP5也不想修正PHP4的这类做法。
ASP中的Session自己是可以贮存对象的,它可以保留根基变量,数组,主动化对象(Automation Object)等,但在贮存自界说类的对象时会碰着成绩。以下面的代码:
<%
If isempty(Session("node")) Then Set Session("node")=New ListNode
Set n=Session("node")
Response.Write n.Content
%>
仍是下面的ListNode这个类,这段代码意图在一个用户会话中只保存一个ListNode的对象。所以在用户第一次会见该网页时,会生成ListNode的一个对象,并保留在Session(“node”)中;前面会见该网页时,由于Session(“node”)不为空了,所以不会生成一个新的对象,而是到 Session(“node”)中掏出保留的对象。实际上应当也会输入100,然而成绩来了,ASP一向会报错:
Microsoft VBScript runtime error '800a01b6'
Object doesn't support this property or method: 'n.Content'
用n.Type也会失足。一样的代码翻译成PHP,运转倒是可以经由过程的。为何?
团体剖析上去,以为Session可以保留对象是没错,只是VBScript中类型转换的机制太弱,并且没有显式的强迫类型转换供用户利用,没法将 Session(“node”)准确转换为ListNode类型。由于是自界说的类,咱们只能在每一个页面中都呈现类的界说语句,如许在ASP看来,每次读 取这个页面时,ListNode类都是一个新类,所以就不认得Session中的这个类的对象了。
结论:尽可能不要想到用Session或Application来存储ASP中自界说类的对象。假如的确需求,可以思索用COM来编写类,然后在VBScript顶用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")来创立一个对象,然后便可完成下面料想的功效了。</p> ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。Apache ASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。 |
|