利用 Microsoft Active Server Pages 创建动态、交互式站点
利用微软的软件产品 Active Server Pages,通过在普通页面中嵌入的ASP脚本语言,可以帮助建立动态的交互式站点,这一点早已是大家所熟知的了,就不用多说了.笔者也是初学ASP 脚本语言编写,来谈谈自己的学习体会,希望能给后学者一点建议和启示,更期望引起大家的兴趣来交流探讨、共同提高.
一 ASP 与 HTML 相比的优点
关于这方面的论述已经很多了,这里就不展开讨论了.笔者认为,ASP与HTML相比,其最大的优势在于三个方面:
1.在创建动态、交互式站点方面,其功能强大、处理方式灵活,具体可参见其它歌颂 ASP 功能的文章.
2.由于ASP脚本语言是由服务端来解释和运行,动态生成普通的HTML页面,然后再传送到客户端供浏览,因而对客户端浏览器要求相对较低,并不要求其必须支持特定的某些脚本语言如JavaScript、JScript、VBScript、Perl等等.
3.由于传送到客户端的只是解释后的HTML页面,因而有效地保护了页面开发者的知识产权.
二 搭建学习 ASP 的应用系统平台
关于这方面的文章也不少,如【计算机世界】1998年第38期Internet&Intranet版的一篇文章《自己搭建ASP集成开发环境》就挺不错,目前读者还保留这篇文章,如果你需要就发个Mail过来吧.笔者所用的开发平台为 Win95 + TCP/IP + PWS + ASP + FrontPage98,其中 FrongPage 不是必须的,可以用其它页面开发工具甚至是 NotePad 来代替.PWS 应该容易获得和安装,在 Win95 OSR2 及其后的版本中都有;而ASP 则需要在 WinNT 的 IIS 中去找,或在 Visual Interdev 的安装光盘中去找,实在找不到就到微软的站点上去下载一个吧.
三 建立自己的简单ASP页面
所谓的ASP页面就是在普通的HTML页面文件中插入一些特殊的脚本语言并以扩展名asp保存后的页面,所以可以很容易地建立一个自己的简单的ASP页面,体会一下ASP的入门感觉,同时获得点成功的快感以便保持继续学习下去的兴趣.
首先来学习一下ASP脚本语言的简单的语法.最基本的的是,在与HTML语言混合使用时ASP语句是以""<%"为开始,以"%>"为结束的,且必须成对出现.另外,由ASP默认的脚本语言是VBScript(设置其它脚本语言稍后再谈),你还应该熟悉VBScript的基本语法.有了这些,建立一个简单的ASP页面应该是没有问题了.
看看下面的一个页面文件( test1.asp ):
<% rem test1.asp %>
<html>
<head>
<title>一个简单的ASP页面</title>
</head>
<body>
<p>
<h1>下面应出现4行语句,字体大小从4到7</h1>
<% for i = 4 to 7 %>
<br><font size = <% =i %>>这行语句的字体大小为
<% =i %></font>
<% next %>
</p>
</body>
</html>
其中,语句 <% =i %> 是将变量 i 的值输出到HTML文件中.ASP用"<%=变量名%>"将指定变量的内容输出到其生成的HTML页面中.
由上可见,可以先设置制作一个普通的HTML页面文件,然后在需要的地方插入ASP脚本语言即可.关键是熟练应用ASP脚本语句.
该页面虽然简单,却可以帮助熟悉和理解ASP语法.可以用浏览器查看运行效果,再用其查看源代码的功能看一下源代码,可以看对ASP页面解释后的HTML文件.注意必须用http的方式访问ASP页面,不能象HTML页面文件那样双击文件名以文件方式浏览.如在笔者的计算机上的访问方式为 http://wangfajun/aspsamp/test1.asp
四 利用Request对象制作简单的交互页面
ASP的内建对象Request中包含了访问者的一些申请信息.可以将这些信息作为某些应用(如商业订单信息)并对申请者的申请要求作出反馈.
在我们的这个例子中,读者会员资格注册申请页面要求申请者填写其姓名全称、身份证号码、EMail地址.在收到读者申请后通知其注册成功.
先做一个读者会员资格注册申请页面,可以是HTML页面或ASP页面.这应该不成问题.
<!-- apply.htm -->
<html>
<head>
<title>读者会员资格注册申请</title>
</head>
<body>
<H2>读者会员资格注册申请</H2>
<form method="post" action="result.asp">
<p>
姓名全称: <input name="FullName" SIZE="20" value="姓名全称">
<p>
身份证号码: <input name="UniversalID" SIZE="15" value="888888888888888">
<p>
电子邮箱: <input name="Email" value="mailbox@yourcompany.com">
<p><input type=submit value="提交申请"><input type=reset value="重新填写">
</form>
</body>
</html>
在申请页面中,所有的申请数据均填写在Form元素中,并且在Form的Action中指定处理申请的页面为result.asp.当收到申请时,对应项目的数据可以由Request.Form("项目名称")来获得,其中"项目名称"为Form元素的名称,如"姓名全称"对应"FullName" ,如"身份证号码"对应"UniversalID" .现在利用这些信息来制作一个注册成功的通知页面Result.asp.
<% rem result.asp %>
<html>
<head>
<title>读者会员资格注册申请成功</title>
</head>
<body>
<p align="center"><H2><font color="green">读者会员资格注册申请成功</font></H2>
<p>亲爱的<%=Request.Form("FullName")%>读者:<br>
我们已经收到你的申请,并接受你的申请.你已经成为我部正式读者会员.<br>你的读者号为CN<%=Request.Form("UniversalID")%>.我们将通过你的电子信箱<%=Request.Form("Email")%><br>来正式通知你.此后我部举行读者沙龙活动的时间和地点也将通过该信箱通知你.
</body>
</html>
现在用浏览器打开申请页面,填入对应数据后提交申请,查看反馈效果,再用浏览器的查看源代码的功能看一下源代码,可以看对ASP页面解释后的HTML文件.
五 通过内建对象 Request 获取用户申请信息
可以从 ASP 的内建对象 Request 获取用户通过HTTP传送过来的申请信息,如客户认证、Cookies数据、Post信息、查询参数、服务器环境信息等,这些可以分别从对象 Request 的集合属性ClientCertificate、Cookies、Form、QueryString、ServerVarables 中获取,获取方式为 Request.CollectionName( ItemString ),其中CollectionName为集合属性名称即
ClientCertificate、Form、QueryString、ServerVarables 中的一个,ItemString 为要获取的项目的名称.如果可以确定没有重复的项目名称,也可直接以Request( ItemString )来获取用户信息,而不用指明集合属性名称.例如请求页面中有一个Form元素CustomerID,且没有其它元素名称为CustomerID,则用Request.Form( "CustomerID" ) 与用Request.( "CustomerID" )
具有同样的效果.
㈠.用Request.Form获取表格信息
1.ASP页面可从一个HTML中获取表格信息,只要将该表格的Action指定为对应的ASP页面即可.该项应用可参见前面的列举的读者会员资格申请的例子.在该例子中,result.asp 从一个HTML中获取表格信息并提供反馈信息.
2.ASP页面可从另一个ASP页面生成的HTML中获取表格信息.具体运作方式基本与从HTML页面中获取信息相同.
3.ASP页面可从自己生成的HTML中获取表格信息,只不过需要判断该页面是输入页面还是反馈页面.在下面的例子中,login.asp 提供了一个用户登录页面,要求用户输入登录帐号和密码,然后再通过Form的Action属性将表格发送给自己进行处理.在 login.asp 中,将根据帐号和密码是否全为空来判断是输入页面还是反馈页面,并给予不同的提示,若是输入则提示"用户登录,请输入用户帐号和密码",否则显示用户帐号和密码.
<% rem login.asp %>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<% if isEmpty( Request.Form( "CustomerID" ) ) and isEmpty( Request.Form( "Password" ) ) then
PromptString = "用户登录,请输入用户帐号和密码"
else
PromptString = "用户"&Request.Form( "CustomerID" )&"登录成功,密码为"&Request.Form( "Password" )
end if
%>
<H2><% = PromptString %></H2>
<form method="post" action="login.asp">
<p>
用户帐号: <input name="CustomerID" value="">
<p>
用户密码: <input name="Password" value="">
<p><input type=submit value="开始登录"><input type=reset value="重新登录">
</form>
</body>
</html>
㈡.用Request.QueryString获取用户查询参数信息
当用户以 xxxxx.asp?ParaName = ParaValue 的方式发出查询请求时,xxxxx.asp 可以从Request.QueryString("ParaName") 中获取用户提交的查询参数ParaName的信息ParaValue,还可以从Request.QueryString("ParaName").count得知同一个参数被赋值的次数并进行相应的处理.
当用户以 query.asp?CustomerID=7777 的方式发出查询请求时,query.asp 可以从Request.QueryString("CustomerID") 中取得查询参数 CustomerID的值为 7777,Request.QueryString("ParaName").count 为 1.
当用户以 query.asp?CustomerID=7777&Password=DogIsDog 的方式发出查询请求时,query.asp 可以从Request.QueryString("CustomerID") 中取得查询参数 CustomerID 的值为 7777,从Request.QueryString("Password") 中取得查询参数 Password的值为 DogIsDog ,Request.QueryString("CustomerID").count 为 1,Request.QueryString("Password").count 为
1.
有时用户可能对一个参数指定若干个值,此时可以从Request.QueryString("ParaName ").count 获取该参数ParaName被指定的内容的个数,并以索引的方式来取得参数值.例如用户希望查询到三个客户7777 、 8888 和 9999 的相关资料时就可能以下面的方式query.asp?CustomerID=7777&CustomerID=8888&CustomerID=9999 发出查询请求,此时在query.asp 可以获知 :
<p><% = Request.QueryString("CustomerID").count %> 为 3
<p><% = Request.QueryString("CustomerID") %> 为 7777,8888,9999
<p><% = Request.QueryString("CustomerID")(1) %> 为 7777
<p><% = Request.QueryString("CustomerID")(2) %> 为 8888
<p><% = Request.QueryString("CustomerID")(3) %> 为 9999
其中Request.QueryString("CustomerID")可同时获取三个参数,各个之间参数用逗号隔开.
下面的例子(query.asp)用于获取用户指定的客户帐号,并显示出来反馈给用户.
<% rem query.asp %>
<html>
<head>
<title>用户帐号</title>
</head>
<body>
<H2>您指定的客户帐号如下</H2>
<%for i = 1 to Request.QueryString("CustomerID").count %>
<p>第<% = i %>个用户帐号:<% = Request.QueryString("CustomerID")( i ) %>
<%next%>
</body>
</html>
㈢.用Request.ServerVariables获取服务器环境信息
Request.ServerVariables 包含了请求HTTP服务的服务器的环境变量信息.由于应用较少,现列出常用的几个.
Request.ServerVariables( "SERVER_PORT" ) : HTTP服务端口号,一般为 80.
Request.ServerVariables( "HTTP_ACCEPT_LANGUAGE" ) : 服务器采用的语言,
"en"表示英文,"zh-cn"表示简体中文.
Request.ServerVariables( "SERVER_NAME" ) : 服务器的名称或IP地址
Request.ServerVariables( "REQUEST_METHOD" ) : 发出Request的方法
(Post/Get/Head)
Request.ServerVariables( "SCRIPT_NAME" ) : 程序被调用的路径及文件名称
Request.ServerVariables( "REMOTE_HOST" ) : 发出Request的客户端机器的名称
Request.ServerVariables( "REMOTE_ADDR" ) : 发出Request的客户端机器的IP地址
Request.ServerVariables( "REMOTE_IDENT" ) : 发出Request的用户名称,当NCSA
IdentityCheck为True且客户端机器支持RFC931时有效.
Request.ServerVariables( "CONTENT_TYPE" ) : 数据的MIME类型
Request.ServerVariables( "HTTP_ACCEPT" ) : 客户端可接受的MIME类型列表.
Request.ServerVariables( "HTTP_USER_AGENT" ) : 发出Request的客户浏览器类型
Request.ServerVariables( "HTTP_REFERER" ) : 在发出CGI程序之前,客户所指的文本
URL
㈣.用Request.Cookies获取用户的Cookies信息
Cookies 可以服务器和客户端之间双向传递,它记录了特定用户的某些信息.利用Request.Cookies获取用户的Cookies信息.
如果请求用户的Cookies为 Product=Floppy,则Request.Cookies("Product")的值为"Floppy";如果用户发送的Cookies为多重信息即包含有下属类型时,则可采用类似查询参数QueryString的多维方式获得,此时可以用Request.Cookies(cookie)的属性HasKey来判断某个Cookie是否有下属类型。如当用户的Cookies为 Product=Floppy&Floppy=Sony时,属性
Request.Cookies("Product").HasKey为True,可通过Request.Cookies("Product")("Floppy")
得知其值为 "Sony".
<p>Product = <%=Request.Cookies("Product")%>
<p>Floppy = <%=Request.Cookies("Product")("Floppy")%>
㈤.C
[1] [2] [3] 下一页