概念:ASP是一种语言么?

正文
vbscript和jscript竟然被称作是低级语言,我倒是第一次听说!它们可以算得上高级语言中的高级语言了。所谓脚本语言就是指某个大型的软件为了实现复杂的功能而为此开发的一种比较简单的语言,类似的还有flash的ActionScript,甚至一些游戏也提供了脚本语言。像《无冬之夜》里就提供了很强大的脚本语言,里面的函数甚至比vbscript还要多得多。脚本语言一般是解释执行的,一旦脱离了它的宿主程序,那它也就不存在了。
一种脚本语言也可以有多个宿主程序,例如vbscript放在HTML里运行那它的宿主就是ie浏览器,所以可以直接调用网页的文档对象以及它们的属性和方法,如window.document.write();window.alert()等等;而把vbscript程序直接保存为vbs文件,并直接在windows下运行的话那它的宿主就是Windows Script Host(windows脚本宿主),这样可以通过WSH中提供的对象的属性和方法来访问电脑里的资源,如:CreateShortcut (可以建立快捷方式),RegRead(可以读取注册表)等等。而把vbscript放在asp文件中的话,那它就会在web服务器端执行,这时它的宿主就是svchost(也可以看作是IIS),通过它就可以访问到服务器上的资源,或通过过它的内建对象Response,Request等发送或取得客户端数据。
它们这些脚本宿主也是基于组件对象模型的,这样它们也可以互相访问。如在HTML里建立WScript.Shell对象来访问windows脚本宿主:
<script language=vbscript>
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMainStart Page", "http://www.pchome.net", "REG_SZ"
</script>
运行以上程序你的ie的主页就变成pchome的了。
说到这里,大家应该明白ASP并不是一种语言,而是一种让web服务程序(如IIS)执行相应的脚本语言并通过公共网关接口(CGI)和客户端浏览器(或其他支持http协议的程序)交互的一种技术。而其中的脚本语言一定要支持com对象,因为它们的宿主就是建立在com对象模型之上的。所以说vbscript和jscript可以作为asp中的脚本语言来使用,而flash中的ActionScript就不行!
说到这里又不得不说CGI了,我对CGI并不是很熟悉,但至少知道CGI也不是一种语言,它定义一种服务器端和客户端交互的一种方式,任何语言只要通过这种方式都可以和客户端来交互。所以严格意义上来说asp,php和jsp都算是cgi。不过现在我们一般对在服务器端运行的来处理客户端发送的数据的可执行程序称为CGI,如:C,Perl(因为它们是最早实现CGI的),而asp,php等它们用了脚本化的执行方法所以就独立了出来(其实php也可以用CGI化来实现)。两者一个很大的区别就是用CGI时客户端的每一个链接都要启动一个进程来执行,就好比运行普通的应用程序一样,只不过它输出的不是在服务器的显示器上,而是在客户端上的浏览器上;而后者只要启动一个进程就可以了(也就是宿主程序),所有的连接请求都放在这个进程的线程之中来处理。这样使用的资源是前者比后者多,而效率是后者比前者高。再加上CGI非嵌入式的编程很麻烦,所见非所得,所以现在使用了越来越少了。
现在最新的asp.net已经不再使用脚本语言和com来处理了,取而代之的是.net语言和.net framework,前者是完完全全的面向对象的语言,语法更严谨效率也更高,而后者完全封装了操作系统大部分的功能,使用起来比以前松散的com更加有效率。
说了那么多,索性再说说javascript和jscript。论坛里曾经好多人问这两者有什么区别。其实在ie中两者是没什么区别的。当年网景公司为netscape推出了javascript,随后微软则模仿了javascript推出了jscript。因此很多人都认为javascript才是正宗,其实我告诉大家,这两种脚本语言都不算正宗,真正正宗的只有ECMAScript(ECMA是欧洲计算机制造商联合会)。javascript和jscript都只是ECMA262语言规范的一种实现。当初微软和网景两家公司的人走到了一起,共同制定了ECMA262语言,把javascript和jscript中的东西融合在一起,也就是说现在netscape中的javascript和ie中的jscript都是符合这个标准的,不信的话你可以用<script language=ecmascript>来代替原有的标签,也一定可以正常运行的。但看上去为什么两者有不少差别呢?其实这种差别不是语言的差别,而是它们宿主程序的差别,ie和netscape对自身内建对象的属性和方法不一致,就造称了两者编程上的不一致。如ie有window.navigate()这个方法,而netscape就没有。
以上是我这几年来通过web开发得出的几点,可能还有些错误的地方。我只希望初学者们能对一些基本的定义搞清楚,少走一些弯路。水平是靠实际经验积累起来的,而不是靠几张证书。考到证书的人的素质低,并不代表微软证书的含金量低。现在考证书的有几个人是不靠看bible的?

 

---------------------------------------------------------

 

后记(非原作者写,是我个人的想法)-*_*-
    初学者会遇到很多概念,往往理解的都不是特别清楚,但网上的文章又很少能给初学者讲的清楚的。比如JRE,JVM到底各干什么活,为什么一定要有个jvm和jre等等这种问题。我觉得那些介绍性的文章,一般都是懂的人看了说没错就是那样,不懂的人看了还是不懂 :(。
    这篇文章倒是把概念讲的比较清楚。至少把作者自己理解的讲的很清楚,而不像有些“大牛”,自己都搞不太清楚还胡乱说,搞得人读了更晕。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值