ASP应用中心得回放
学好一门编程语言有两个条件是必不可少的,一是理论与实践结合,在实际例程去验证书本上的理论能加深你对理论的理解;二是学会总结,把学习、运用中的心得体会记下来,当成一种经验或者教训加以提炼并在日后的应用中加以改进,一定能提高你对这门编程语言的认识。以下是笔者在学习与运用ASP编程中的两点经验,希望能对大家有所帮助。 ASP页面内VBscript和Jscript的交互 ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。ASP开发环境提供了两种脚本引擎,即VBscript(缺省)和Jscript。不过,开发者并没有被限制于只能使用这两种语言,只要能够提供合适的ActiveX脚本引擎就能使用任何脚本语言。 脚本语言的选择往往基于许多不同原因:它可能是开发者最为熟悉的语言,可能是对给定工程来说能够提供最多特色支持的,也有可能是最具效率的。不同的环境和要求使得我们在选择脚本语言时注重不同的因素,同时也使得我们在某些时候面临选定的脚本语言不能直接提供其它语言固有的函数这一问题,或某个脚本已经写成但用的却是另外一种脚本语言。 此时应该怎么办?是否需要用当前所用的脚本语言重写这些脚本?或者说,是否有可能在一种脚本语言中调用其它脚本语言的内置函数?本文要说明的就是在ASP应用中如何让VBscript脚本和Jscript脚本交互以最大限度地获得两种脚本语言的特色支持。 一、VBscript和Jscript的内置函数 在VBscript和Jscript中,有大量的内置函数功能是相同或类似的。然而,在一种脚本语言中内置的函数并非总是在另外一种脚本语言中也有对应的函数。例如,VBscript提供了许多用于操作字符串和格式化数据的函数,这些函数在Jscript中并不存在。这些函数包括StrReverse()、Filter()以及FormatCurrency()等。在另一方面,Jscript所提供的用于管理数组、字符串编码等的函数在VBscript中也没有定义,如join()、reverse()、pow()、位操作、escape()和unescape()等。 那么,如果在Jscript程序中需要一个VBscript函数该怎么办呢? 二、异种脚本的互相调用 如果需要在Jscript脚本中调用一个VBscript中内置的函数,则应该写一个VBscript用户定义函数(在这里调用VBscript内置函数),然后在Jscript脚本中象调用公用Jscript函数一样调用这个用户定义函数。 例如,如果要调用的VBscript内置函数是FormatCurrency(),则可以声明如下自定义函数: < script LANGUAGE="VBscript" RUNAT="SERVER"> Function Formatvalue(value) Formatvalue = FormatCurrency(value) End Function < /script> 接下来在Jscript代码中就可以象普通Jscript函数一样调用Formatvalue()了。用类似的方法也可以实现VBscript代码调用Jscript函数。 应用同样的规则,我们可以在任何脚本内调用任何用户定义函数。不过,从Jscript脚本内调用一个不带参数的VBscript过程(Sub)时应略加注意,此时在Jscript中应该象调用一个不带参数的Jscript函数一样调用它,如用foo()调用VBscript Sub foo过程。 三、数据共享 在某些情形下混合运用VBscript和Jscript函数是非常有用的,但在不同语言脚本之间共享数据也可能很有用。实现这种共享的方法很简单:不管使用的是什么语言,只要是在页面级声明的变量就可以任意引用。 对象的使用方法也相似,可以任意选用合适的语言读取、修改属性或调用对象的方法。当然给定对象的属性和方法是由创建该对象实例的语言所定义的。正如上例VBscript的过程调用,当从Jscript中调用一个不带参数的VBscript对象的方法时,其调用方法也遵从Jscript的调用规则,反之亦然。 四、数组管理 数组共享问题稍微复杂一点。虽然数组也象其它变量一样可以在不同语言脚本之间共享,但必须注意兼容方面的问题。 VBscript数组在Jscript下可以用VBscript的符号引用,即用myArray(2)引用数组元素而不是Jscript的数组元素引用符号myArray[2]。此外,还可以使用一个特殊的Jscript对象――VBArray对象将VBscript数组转换为Jscript数组。下面的代码从VBscript数组myVBArray创建Jscript数组myJSArray: var Temp = new VBArray(myVBArray) var myJSArray myJSArray = Temp.toArray() 上述代码首先创建一个临时的VBArray对象,然后使用它的toArray()方法将自己转换为Jscript数组。此后就可以象普通Jscript数组一样使用myJSArray,如myJSArray[1]。但应当注意的是,toArray()方法将把一个多维的VBArray转换为一维的Jscript数组。 从VBscript中引用Jscript数组更为复杂。虽然在VBscript中我们可以直接访问Jscript数组相关的方法和属性,但没有直接访问Jscript数组的单个元素的方法。也就是说,我们可以在VBscript脚本中读取Jscript数组的长度属性,如下所示: x = myJSArray.length 但无法直接读取该数组的单个元素,下面的VBscript代码是不正确的: x = myJSArray(3) 解决该问题的一个可行的方法是执行一个转换过程,如下面的代码所示,此处假定VBscript是缺省的脚本语言: < % Dim Temp Dim myVBArray Temp = myJSArray.join(", ") myVBArray = Split(Temp, ", ") %> 此处的Jscript join()方法将数组myJSArray元素转换到一个以逗号为分割符的字符串,VBscript Split()函数将字符串转换为VBscript数组。注意这里我们是在VBscript环境下调用Jscript的join方法。依照此例,我们可以通过自定义VBscript函数来模拟Jscript的VBArray对象的toArray()方法以实现Jscript数组到VBscript数组的转换。 用模板建立动态ASP页 对于模板,我想大家可能都有一些概念,在word中很多模板,设计好了大概的版面,你只要用你自己的话填充那些占位字符就好了。这儿的模板大概也就是这个意思,页面中相对稳定的部分固定下来,其他的部分根不同的情况在输入不同的内容。其实在DreamWeaver中也有模板的功能,不过那个静态的,只能手动填充内容,而这儿讲的是动态的自动的内容填充。 首先,我先来解释一下为什么要用到模板文件。有时候,模板能够带给你对网页功能和布局更为完整的概念。当你看到Word的模板格式之后,就知道最后版面是个什么样子的了,在这儿也是如此。例如,你可以保留ASP语句,而使用不同的模板来建立不同的页面风格。这样,你就不用为每种不同风格的网页分别来写不同的ASP页面了,这显然可以为我们节省很多时间和精力。而且,模板文件能够让你更容易的浏览页面代码,不用担心ASP和HTML的混杂搞的你头昏脑胀。你可以只用把注意力集中在HTML上,而完全不用去管ASP了。再有就是,摸板很简单,你绝对很快就能搞懂搞定。在这篇文章中,将会用到一个数据库――一个用的很广泛的雇员表。包括雇员ID,姓名,照片,以及工作摘要和照片的注脚。下面是这个Access数据库的结构: 文件名 - myDatabase.mdb 表名 - Employees ID 自动计数(Autonumber) FullName 文本 - 最多100个字符 PicURL 文本 - 最多255个字符 Duties 注释类型 PicCaption 文本 - 最多50个字符 一个很简单的数据库,是吧。当然你可以按要求来扩展它,那就是你自己的事了。我假设你已了解数据库的基本操作,这样我不用在这上面花太多的笔墨,其实这儿的代码都是很简单的,只要你知道一些基本的东西,就能把它看懂。建立了数据库之后,我们可以开始建立模板文件了。这个文件是每个页面的骨架。我没有用到表格,那样有些麻烦,而我很懒:-)而且,也不用加入,标签,因为那是要加在ASP页面中的。所以到最后,它的样子就是这样了: Full Name: %name% < br>Description of duties: %duties% This picture was taken: %date% Employee ID: %empID% 就是这样了!这就是一个简单的模板。把它存为template.tmp,在后面的ASP页面中将要引用到它。要注意的是:我们可以在模板中加入各种HTML标签,你完全可以在摸版中定义好网页的结构和样式,就像实际写一个网页一样,只是要把关键的地方标出来――注意到了那些%围着的东西了吗?那就是模板的精髓了。或许你已经注意到,那些%围着的是和数据库中的字段意义对应的。看看下面的ASP代码,是如何读入模板和数据库文件,把他们揉和在一起,然后输出我们想要的HTML页面。 这就是所有的代码了,很简单,不是吗?它所作的只是打开模板文件,按顺序读入每一行,然后用冲数据库中读入的实际的字段值来代替模版中那些%img%,%name%标记。而且,它还把在“Duties”字段内大段文本中的回车解释成HTML的回车 ,这样就不至于打乱整个的排版格式了。怎么样?轻松搞定吧。模板在某些应用上真的是可以发挥奇效,省时省力。理论上,你还可以修改这段代码,用FileSystemObject来读写文本,这样数据就不一定要存储在数据库中了。在一些应用中,比如即时的新闻发布,这样也许更为方便一些。
|