ASP学习的十步进阶

分类: asp   出处:iocblog整理  更新时间:2009-06-11   添加到收藏  

利用 microsoft active server pages 创建动态、交互式站点

  利用微软的软件产品 active server pages,通过在普通页面中嵌入的asp脚本语言,可以帮助建立动态的交互式站点,这一点早已是大家所熟知的了,就不用多说了.笔者也是初学asp 脚本语言编写,来谈谈自己的学习体会,希望能给后学者一点建议和启示,更期望引起大家的兴趣来交流探讨、共同提高.

一  asp 与 html 相比的优点
  关于这方面的论述已经很多了,这里就不展开讨论了.笔者认为,asp与html相比,其最大的优势在于三个方面:[iocblog.net 来源]
  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")%>
  ㈤.clientcertificate用的较少,这里就不说了.
要求客户端必须支持ssl3.0或pct1协议, 服务器端必须启动用户端认证,客户端必须进行相应的设置.

六 通过内建对象 response 向用户发送信息
  可以利用 asp 的内建对象 response 很灵活地控制向客户端发送的信息的内容和方式.例如可以自动转向另一个url页面,可以改变页面脚本的解释方法,可以设置客户的cookie等
等.
  ㈠.利用resopnse.write 控制发送的信息内容
方法 response.write 可以向发往客户端浏览器的html文件中直接输出内容.这一点与利用主脚本的<% = 变量名 %>功能基本相同,但resopnse.write 的使用更为灵活,这体现在它作为一个方法函数,可以在非主要脚本的函数中直接使用(调用时传递参数的方式遵守对应脚本语言的规定),即可以出现在<script></script>之间向客户输出内容,这一点是<% = 变量名
%>无法做到的,也是对其功能的一个补充吧.
在下面的例子中,selecolr.asp 要求用户输入一个颜色名称,用户确认后将用户申请发往同一个页面selecolr.asp,然后用用户指定的颜色将颜色名称显示出来.这里实现的功能可以用<% = 变量名 %>的方式来实现.response.write 在函数中的应用要涉及到函数调用,稍后会在讨论多脚本语言编程时有例子出现.
<% rem selecolr.asp %>
<html>
<head>
<title>选择颜色</title>
</head>

<body>
<%
if isempty( request.form( "colorname" ) ) then
   response.write "<h4>你只需选择颜色名称,我来显示</h4>"
else
   response.write "<h2>你选择的颜色是<font color ="&request.form( "colorname" )&">"&request.form( "colorname" )&"</font></h2>"
end if
%>

<form method="post" action="selecolr.asp">
<p>
颜色名称: <input name="colorname" value="black">
<p><input type=submit value="显示吧"><input type=reset value="想重选">
</form>

</body>
</html>

  ㈡.利用 response.redirect 进行url页面重新定位
假如由于业务上的原因,你的站点的域名或ip地址发生了变化,就象borland变成了inprise一样,老顾客在用原来的域名访问时,可以用 response.redirect 直接将其引导到新的站点上去;假如要求用户在访问本页面前必须先访问另外一个页面,可用 response.redirect 直接将其引导到应该去的页面上去,而不是发出用户无权访问该页面的信息.
值得注意的是,必须在向客户端发送任何信息前使用 redirect,否则会引起错误.你可以在页面的第一条语句将用户引导另一个url,也可以将 response.buffer 设置为 true 而在以后适当的时间将用户引导另一个url.
在下面的例子中,若用户调用本页面,则将其引导到另一个页面 selecolr.asp.
<% rem redirect.asp %>
<%response.redirect "selecolr.asp"%>
<html>
<head>
<title>重新定向</title>
</head>

<body>
<p> 你不可能进入到本页面,否则就是我的失败.
</body>
</html>

  ㈢.利用 response.contenttype 页面内容解释方法
在html页面代码中,经常会看见下面一个句子
<meta http-equiv="content-type" content="text/html">
其中,它用于指定html页面被浏览器解释的方式.当 content="text/html"时,浏览器将代码解释为普通html页面并显示给用户;当 content="text/plain" 时,浏览器将代码不加任何解释地显示给用户;当 content = "image/jpeg"是传递图形文件; 当未指定时,contenttype
默认为 "text/html".在asp页面中,response.contenttype 作用与普通html相同,即可以控制浏览器解释html文本的方式。
在下面的例子中,plain.asp 将 response.contenttype 设置为"text/plain",使用客户
端用户可以直接看到该页面的html代码.
<% rem plain.asp %>
<% response.contenttype = request.form( "contenttypename" ) %>
<html>
<head>
<title>内容类型设置</title>
</head>

<body>
<% if isempty( request.form( "contenttypename" ) ) then
response.write "<h4>你只需选择类型,我来显示</h4>"
else
response.write "<h1>内容类型设置成功</h1>"
end if
%>

<form method="post" action="plain.asp">
<p>
内容类型: <input name="contenttypename" value="text/html">
<p><input type=submit value="显示吧"><input type=reset value="想重选">
</form>

</body>
</html>

[1] [2] 下一页



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。