如何建立基于 IIS 的 ASP
动态网站为中心向大家一步一步地揭示动态商业网站设计的真正奥秘。为了使各位能够全面、细致地掌握
asp 的开发技巧,本文今后将采取连载的形式,手把手地教你如何建立属于自己
ASP 动态网站。由于本文是作者根据自己的学习和实践经验并结合了一些外文资料而写成的,因此不免会有一些偏颇,希望各位见谅。如发现本文有何不当之处,请及时通知作者,谢谢。
Microsoft Active Server Pages 即我们所称的 ASP ,其实是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.0 和 4.0 之中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX
元件建立动态、交互且高效的 WEB 服务器应用程序。有了 ASP
你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通
HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。
以下罗列了 Active Server Pages 所独具的一些特点:
1. 使用 VBSCRIPT 、 Jscript 等简单易懂的脚本语言,结合 HTML
代码,即可快速地完成网站的应用程序。
2. 无须 compile 编译,容易编写,可在服务器端直接执行。
3. 使用普通的文本编辑器,如 Windows
的记事本,即可进行编辑设计。
4. 与浏览器无关 (Browser Independence), 用户端只要使用可执行 HTML
码的浏览器,即可浏览 Active Server Pages 所设计的网页内容。 Active
Server Pages 所使用的脚本语言 (VBScript 、 Jscript) 均在 WEB
服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。
5.Active Server Pages 能与任何 ActiveX scripting 语言相容。除了可使用
VBScript 或 Jscript 语言来设计外,还通过 plug-in
的方式,使用由第三方所提供的其他脚本语言,譬如 REXX 、 Perl 、
Tcl 等。脚本引擎是处理脚本程序的 COM(Component Object Model) 物件。
6.Active Server Pages
的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。
7. 可使用服务器端的脚本来产生客户端的脚本。
8. 物件导向( Object-oriented )。
9.ActiveX Server Components(ActiveX 服务器元件 )
具有无限可扩充性。可以使用 Visual Basic 、 Java 、 Visual C++ 、 COBOL
等编程语言来编写你所需要的 ActiveX Server Component 。 </p>
<p> ASP
的奇妙之处真是不胜枚举,下面就请各位系好安全带,我将带领大家进入
ASP 的梦幻世界。 </p>
<p> 首先,让我们来看看运行 ASP 所需的环境: <ul>
<li>Microsoft Internet Information Server version 3.0 on Windows NT Server </li>
<li>Microsoft Peer Web Services Version 3.0 on Windows NT Workstation </li>
<li>Microsoft Personal Web Server on Windows 95/98 </li>
</ul>
<p> 正如前文所述,与一般的程序不同, .asp 程序无须编译, ASP
程序的控制部份,是使用 VBScript 、 Jscript
等脚本语言来设计的,当执行 ASP
程序时,脚本程序将一整套命令发送给脚本解释器 ( 即脚本引擎 )
,由脚本解释器进行翻译并将其转换成服务器所能执行的命令。当然,同其他编程语言一样,
ASP
程序的编写也遵循一定的规则,如果你想使用你所喜爱的脚本语言编写
ASP
程序,那么你的服务器上必须要有能解释这种脚本语言的脚本解释器。当你安装
ASP 时,系统提供了两种脚本语言: Vbsrcipt 和 Jscript ,而 Vbscript
则被作为系统默认的脚本语言。你也可以根据自己的喜好改变系统默认的脚本语言,关于如何改变系统默认的脚本语言请看《
<a href="a;><font color="#026BAA">在 ASP 中使用脚本语言</font></a>》一文。
ASP 本身并不是一种脚本语言,它只是提供了一种使镶嵌在 HTML
页面中的脚本程序得以运行的环境。但是,要学好 ASP
又必须掌握它的语法和规则。现在就让我们开始一步一步地认识并学习
Active Server Pages 。
ASP 程序其实是以扩展名为 .asp 的纯文本形式存在于 WEB
服务器上的,你可以用任何文本编辑器打开它, ASP
程序中可以包含纯文本、 HTML 标记以及脚本命令。你只需将 .asp
程序放在 WEB
服务器的虚拟目录下(该目录必须要有可执行权限),就可以通过
WWW 的方式访问 ASP 程序了。要学好 ASP
程序的设计,必须掌握脚本的编写,那么究竟什么是脚本呢?其实脚本是由一系列的脚本命令所组成的,如同一般的程序,脚本可以将一个值赋给一个变量,可以命令
WEB
服务器发送一个值到客户浏览器,还可以将一系列命令定义成一个过程。要编写脚本,你必须要熟悉至少一门脚本语言,如
VBScript 。脚本语言是一种介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++
等编程语言之间的一种特殊的语言,尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。如前所述
ASP 所提供的脚本运行环境可支持多种脚本语言,譬如: Jscript 、 REXX
、 PERL 等等,这无疑给 ASP 程序设计者提供了广泛的发挥余地。 ASP
的出现使得广大 WEB
设计者不必在为客户浏览器是否支持而担心,实际上就算你
在同一个 .asp
文件中使用不同的脚本语言,你都无须为此担忧,因为所有的一切都将在服务器端进行,客户浏览器得到的只是一个程序执行的结果,而你也只需在
.asp 中声明使用不同的脚本语言即可。下面是一个典型的在同一 .asp
文件中使用两种脚本语言的例子:
< HTML>
< BODY>
< TABLE>
< % Call Callme %>
< /TABLE>
< % Call ViewDate %>
< /BODY>
< /HTML>
< SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Callme
Re "< TR>< TD>Call< /TD>< TD>Me<
/TD>< /TR>"
End Sub
< /SCRIPT> </p>
<p>< SCRIPT LANGUAGE=Jscript RUNAT=Server>
function ViewDate()
{
var x
x = new Date()
Re())
}
< /SCRIPT> </p>
<p> 这是各位在本文中接触的第一个真正的 ASP 程序,千万不要被“
< % %> ”符号搞糊涂,这其实是标准的 ASP 定界符,而“ <
SCRIPT>< /SCRIPT> ”之间的就是脚本语言。 ASP
不同于脚本语言,它有自己特定的语法,所有的 ASP
命令都必须包含在 < % 和 %> 之内,如: < % test="English"
%> , ASP 通过包含在 < % 和 %>
中的表达式将执行结果输出到客户浏览器 , 如: < % =test %>
就是将前面赋给变量 test 的值 English 发送到客户浏览器中,而当变量
test 的值为 Mathematics 时 , 以下程序:
This weekend we will test < % =test %>. </p>
<p> 在客户浏览器中则显示为:
This weekend we will test Mathematics. </p>
<p> 学习 ASP
最好的方法莫过于亲自动手编写,为了在最短的时间内使各位掌握
ASP
的程序设计技巧,本文将采取实例分析法,通过一系列的实例让各位在实践中学习
ASP 。建立一个 ASP 页面,你所需的只是打开一个文本编辑器,如:
Notepad ,然后跟我开始动手编写第一个 ASP
程序。下面我们将建立一个自动监测浏览时间并根据不同时段动态显示不同页面内容的
ASP 程序,请将以下代码剪贴到你的文本编辑器中 ,并存为 :</p>
<p>
< html>
< body>
< FONT COLOR="Green">
< % If Time < #12:00:00# And Time >= #00:00:00# Then %>
早上好,今天天气不赖啊 !
< % ElseIf Time < #19:00:00# And Time >= #12:00:00# Then %>
下午好 !
< % Else %>
哈喽 ! 今晚你有没有去 IRC 聊天 !
< % End If %>
< /body>
< /html>
</p>
<p> 将 保存在 WEB 服务器的虚拟目录 ( 如: aspsamp/)
下,并在浏览器中用 HTTP 的方式进行浏览,如:
,你将会新奇地发现,你的页面真的活起来了。虽然,这只是一个非常简单的实例,而且这一功能完全可以通过
JavaScript 完成,但是不难发现使用 ASP 要比 JavaScript
简洁、迅速得多,而且运用此法,你完全可以轻而易举地令你的网页在不同的时段展示不同的风格。此例中的“
Time ”实际上是一个 VBScript
内置的显示系统当前时间的函数,由于系统默认的脚本语言是 VBScript
,因此当你在 ASP
命令中调用该函数时,脚本引擎会自动将其转换成当前的系统时间。接下来我们将给
添加一点色彩,在 < body> 标识中添加“ bgcolor="< %
=bgc %> ”即变为 < body bgcolor="< % =bgc %>"> ,并在 <
body> 标记前添加如下语句:
< % If Time < #12:00:00# And Time >= #00:00:00# Then
bgc="silver"
ElseIf Time < #19:00:00# And Time >= #12:00:00# Then
bgc="navy"
Else
bgc="red"
End If
%> </p>
<p> </p>
<p> 如此一来,当用户在不同的时段访问你的页面时,他们将会看到不同的页面背景色。我们可以做的事情还有很多,譬如你想知道在凌晨至十二点之间浏览你页面的客户的姓名,并向他或她问好,那么下面的这段程序将能助你达成心愿。首先你需要在页面中设置表单,将以下HTML代码剪贴到“ < % If Time < #12:00:00# And Time >= #00:00:00# Then %>
”之后: </p>
<p>欢迎光临我的主页,请填写以下信息 : < FORM METHOD="POST"
ACTION="">
< P>
First Name: < INPUT SIZE="48">
< P>
Last Name: < INPUT SIZE="48">
< P>
Title: < INPUT TYPE=RADIO VALUE="mr">Mr.
< INPUT TYPE=RADIO VALUE="ms">Ms.
< P>< INPUT TYPE=SUBMIT>< INPUT TYPE=RESET>
< /FORM></p>
<p> 然后在以上 HTML 代码后面添加如下 ASP 命令: < %
title=Reque("title")
if title="mr" then
%>
欢迎您 Mr.< % =reque("fname") %> 。
< % elseif title="ms" then %>
欢迎您 Ms.< % =reque("fname") %> 。
< % else %>
< B>< font color=blue> 欢迎您 < %
=reque("fname")&" "&reque("lname")
%> 。 < /font>< /B>
< % end if %>
</p>
<p> 保存文件 ,并在浏览器中以 HTTP
方式进行浏览,如果此时的系统时间在凌晨 0:00:00 和中午 12:00:00
之间的话,浏览器将显示如下画面:
这其实是一个在 Internet 和Intranet
上常见的功能,即当用户在浏览器端填写完表单后,通过调用一个通用网关程序将用户数据传送到服务器,由服务器进行处理后再将结果返还给客户浏览器。过去为了实现这样的功能必须编写一个独立于
HTML 之外的 CGI 程序,并通过 HTML 进行调用,撇开 CGI
编写复杂等缺点不谈, CGI 的执行效率也是一个大问题,每一个表单
(form)
均须执行一个可执行文档,当多人同时上线使用时,多个文档同时执行,将大大降低
WEB 服务器的执行速度,如今 ASP 提供了与 HTML
完全相融的编程环境,显然要比使用 CGI 便捷得多。 </p>
<p> 在本期的最后让我们再来看看 ASP
的循环功能,譬如你希望当客户在晚间 7:00 至凌晨 0:00:00
浏览你的页面时,在页面中央显示 6 个笑脸 表示问候,那么你只需要将以下命令剪贴到“
Good Evening! ”后面即可: < % for I=1 to 6 %>
< p>< center>< img src=";
height="32" alt=" 晚上好 ">< /p>
< % next %> </p>
<p> 这是一个最最基本的循环语句,它将一个笑脸图片重复调用六次并显示在页面上。当然此例的效果完全可以用
HTML 做到,但是不难发现使用 ASP
大大缩短了代码的重复编写,使得程序具有良好的可阅读性。另外,当你制作一个诸如根据用户投票来给所评测的对象评定星级的评测站点时,使用此法,你就完全不需要为每一个星级制作一幅图片。如果一个对象被评为
4星级,那只需将一颗星的图片循环显示 4次,以此类推即可。当然,当工作量较小的时候你不会感觉到
ASP 的好处,然而一旦数据量巨增,你将会深刻的体会到 ASP
动态网站给你带来的前所未有的轻、爽感受 ! </p>
作为微软推出的网页与数据库解决方案,ASP由于有微软得天独厚的操作系统等技术后盾支持,因此得到了迅速的发展,并且正受到越来越多的欢迎,在目前在电子商务网站的建设中有很多都使用ASP来编写程序。
很多的读者在学习ASP的方法和在学习中遇到的一些问题,初学者经常遇到和面临的问题。为了让读者在学习ASP的过程中加深对ASP的了解,并能够有效地解决遇到的问题,我们特别收集了比较有代表性的一些问题,在此列举出来并一一给予解答,希望能在这有限的篇幅里为你学习ASP助一臂之力。
1、问题:ASP是一种编程语言吗?
答:ASP不是编程语言,而是一种开发环境。ASP提供了一个在服务器端执行指令的环境,它利用了特殊的符号()来区分HTML与必须经过服务器翻译才能送往客户端的命令。它可以执行的指令包括HTML语言,Microsoft VBScript和Microsoft Jscript等,因此可以制作出功能强大的Web应用程序。
2、问题:在WEB服务器上容纳多个Web站点,能使用PWS吗?
答:在PWS上只能容纳一个Web站点。为了在相同的计算机上容纳多个Web站点,需要使用Windows NT Server或windows 2000 Server/Professional和IIS。
3、问题:如何使用6个内置ASP对象?
答:ASP提供了多个内嵌对象,无须建立就可以在指令中直接访问和使用它们,这六个对象主要有:请求(Request)对象、响应(Response)对象、工作阶段(Session)对象、应用程序(Application)对象、服务器(Server)对象、Cookies对象,这六个对象中的服务器(Server)对象可加载其他组件,这可以扩展ASP的功能。
使用Server.CreateObject所建立的对象,它的生命周期在它建立时开始,在它所在的网页程序结束时结束。如果想要让该对象跨网页使用,则可以用Session对象来记录Server.CreateObject所建立的对象。
4、问题:为什么在使用Re的时候出现以下错误:“标题错误,已将HTTP标题写入用户端浏览器,对任何HTTP的标题所作的修改必须在写入页内容之前”?
答:Re可以将网页转移至另外的网页上,使用的语法结构是这样的:Re网址,其中网址可以是相对地址或绝对地址,但在IIS4.0使用与在IIS5.0使用有所不同。
在IIS4.0转移网页须在任何数据都未输出至客户端浏览器之前进行,否则会发生错误。这里所谓的数据包括HTML的卷标,例如:< HTML>,< BODY>等,而在IIS5.0中已有所改进,在IIS5.0的默认情况下缓冲区是开启的,这样的错误不再产生。
在Response对象中有一Buffer属性,该属性可以设置网站在处理ASP之后是否马上将数据传送到客户端,但设置该属性也必须在传送任何数据给客户端之前。
为保险起见,无论采用何种ASP运行平台,在页面的开始写上< % Re %>,将缓冲区设置为开启,这样的错误就不会发生了。
5、问题:缓冲输出对于网页传输有没有影响?
答:在比较大的Web页中,第一部分在浏览器中出现可能会有一些延迟,但是加载整个Web页的速度比不用缓冲要快。
6、问题:在没有表单提交时查询字符串的值是否可以使用Reque集合?
答:Request对象用于读取浏览器的数据,它除了可以读取表单字段的内容,还可以用来读取附带在网址后面的参数,无论请求字符串怎样添加到链接地址中对Request来说都没有什么不同。使用get方法提交一个表单,还是跟随一个附加查询串的链接查询字符串中所有的值,都可以使用Reque集合。
7、问题:我在ASP脚本中写了很多的注释,这会不会影响服务器处理ASP文件的速度?
答:在编写程序的过程中,作注释是良好的习惯。经国外技术人员测试,带有过多注释的ASP文件整体性能仅仅会下降0.1%,也就是说在实际应用中基本上不会感觉到服务器的性能下降的。
8、问题:需不需要在每个ASP文件的开头使用< % @LANGUAGE=VBScript % >?
答:在每个ASP文件的开头使用< % @LANGUAGE=VBScript %>代码是用来通知服务器现在使用VBScript来编写程序,但因为ASP的预设程序语言是VBScript,因此忽略这样代码也可以正常运行,但如果程序的脚本语言是JavaScrip,就需要在程序第一行指明所用的脚本语言。
9、问题:我有没有必要在每一个ASP文件中使用“Option Explicit”?
答:在实际应用中,VBScript变量的概念已经模糊了,允许直接使用变量,而不用Dim声明变量,但这并不是一个好习惯,容易造成程序错误,因为可能重复定义一个变量。我们可以在程序中使用Option Explicit语句,这样在使用一个变量的时候,必须先声明它,如果使用了没有经过声明的变量,运行时,程序就会出错。
实践证明,ASP文件中使用“Option Explicit”可以使得程序出错机会降到最少,并且会大大提升整体性能。
10、问题:运行ASP文件时有什么安全措施?
答:ASP提供了很好的代码保护机制,所有的ASP代码都在服务器端执行而只返回给客户端代码执行结果。但仍不排除恶意人士对Web服务器的刻意破坏,所以在编写ASP文件时更要注意安全问题。
虽然在ASP中引入文件以inc作为扩展名,在这里仍建议以ASP作为引文件的扩展名。当这些代码在安全机制不好的Web Server上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在Web Server上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。
另外,不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立数据源名称DSN(Date Source Name),在DSN中存储了有关连接到指定数据提供者的信息,包括:“数据库的物理位置,用于访问数据库的驱动程序的类型,访问数据库的驱动程序所需要的任何其他参数”,在进行数据库访问时可以直接访问该DSN。
11、问题:评介Web数据库管理系统时,应该考虑哪些问题?
答:在评价一个Web数据库管理系统时,必须考虑到三方面的问题:多用户问题;所建立的Web数据库应该是关系型的;数据库的安全性问题。
12、问题:ADO是什么,它是如何操作数据库的?
答:ADO的全名是ActiveX Data Object(ActiveX数据对象),是一组优化的访问数据库的专用对象集,它为ASP提供了完整的站点数据库解决方案,它作用在服务器端,提供含有数据库信息的主页内容,通过执行SQL命令,让用户在浏览器画面中输入,更新和删除站点数据库的信息。
ADO主要包括Connection,Recordset和Command三个对象, 它们的主要功能如下:
·Connection对象:负责打开或连接数据库文件;
·Recordset对象:存取数据库的内容;
·Command对象:对数据库下达行动查询指令,以及执行SQL Server的存储过程。
13、问题:使用Recordset对象和Command对象来访问数据库的区别在哪里?
答:Recordset对象会要求数据库传送所有的数据,那么数据量很大的时候就会造成网络的阻塞和数据库服务器的负荷过重,因此整体的执行效率会降低。
利用Command对象直接调用SQL语句,所执行的操作是在数据库服务器中进行的,显然会有很高的执行效率。特别是在服务器端执行创建完成的存储过程,可以降低网络流量,另外,由于事先进行了语法分析,可以提高整体的执行效率。
14、问题:是否必须为每一个Recordset对象创建一个Connection对象?
答:可以同时对不同的Recordset对象使用相同的Connection对象,以节省资源。
15、问题:什么是数据库管理系统(DBMS)?
答:数据库为了保证存储在其中的数据的安全和一致,必须有一组软件来完成相应的管理任务,这组软件就是数据库管理系统,简称DBMS,DBMS随系统的不同而不同,但是一般来说,它应该包括以下几方面的内容:
数据库描述功能:定义数据库的全局逻辑结构,局部逻辑结构和其他各种数据库对象;
数据库管理功能:包括系统配置与管理,数据存取与更新管理,数据完整性管理和数据安全性管理;
数据库的查询和操纵功能:该功能包括数据库检索和修改;
数据库维护功能:包括数据引入引出管理,数据库结构维护,数据恢复功能和性能监测。
为了提高数据库系统的开发效率,现代数据库系统除了DBMS之外,还提供了各种支持应用开发的工具。
16、问题:当前流行的WEB数据库管理系统有哪些?
答:当前流行的Web数据库管理系统有微软的SQL Server、Oracle、DB2、Sybase,小规模的企业多使用Access。