有关ASP的组件

=== 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>

  ㈣.利用 Response.Cookies 设置客户端Cookies
通过设置Response.Cookies可以增加或修改客户端的Cookies,其设置方法与取得对应Cookie的值的方法相同.当要设置的Cookie不存在时,将创建一个新的Cookie,其值为要设置的值;Cookie存在且没有下属类别时,以新值代替原有的值;Cookie存在且有下属类别时,若要设置的Cookie不含下属类别,则原有的下属类别将被删除,若含下属类别且无对应类别则创建新的下属类别,有对应类别则以新值代替原有的值.
在下面的例子中,cookie.asp 用来设置一个名称为 wfj 的Cookie的值.调用时将显示上次设置的Cookie(wfj)的值.由于设置Cookie值要在发送内容之前,所以这里将Response.Buffer 设置为 true( 其原因见后 Response.Buffer 的说明 ).
<%rem cookie.asp %>
<%Response.Buffer = true%>
<html>
<head>
<title>Cookie设置</title>
</head>

<body>
<%
Response.Write "<p>原来的Cookie(wfj) = "&Request.Cookies( "wfj" )

if not isEmpty( Request.Form( "CookieValue" ) ) then
Response.Cookies("wfj") = Request.Form( "CookieValue" )
Response.Write "<p>Cookie(wfj) 已经设置为 "&Request.Form( "CookieValue" )
Response.Write "<p>下次调用时你会看到的"
end if
Response.write "<p><hr><H4>你只需设置Cookie,我来显示</H4>"
%>

<form method="post" action="cookie.asp">
<p>
Cookie设置: <input name="CookieValue" value="wangfajun">
<p><input type=submit value="设置吧"><input type=reset value="想重选">
</form>

</body>
</html>
  ㈤.利用 Response.Buffer 控制页面发送进度
Response.Buffer 的默认值为 Flase,在这种情况下,服务器在处理对ASP页面的请求时,采用边处理边发送反馈的方式,即在处理完一部分脚本后即向客户端发送反馈,这样在处理耗时较长的ASP页面时,用户不用等待很长时间就可以得到反馈,在用户浏览的同时服务器继续处理和发送反馈信息.当Response.Buffer 为 True 时,服务器在处理对ASP页面的请求时使用缓冲技术,在页面所有的脚本处理结束后才将处理结果传送给客户端,这样在处理耗时较长的ASP页面时,用户需要等待较长的时间,而服务器端则可减少与客户端连接的次数而提高整体响应速度,并可以在满足某种条件时撤消已经处理的结果而不会出现响应完成一部分才停止的状况.
在下面的例子中,buffer.asp 可以根据 BufferValue 的值来决定是否撤消反馈.当输入yes时,用 Response.Clear 取消前面的反馈信息,用 Response.Redirect 将用户引导到Cookie设置页面,用 Response.End 停止反馈.
<% rem buffer.asp%>
<% Response.Buffer = true %>
<html>
<head>
<title>Buffer设置</title>
</head>

<body>
<% if isEmpty( Request.Form( "BufferValue" ) ) then
Response.write "<H4>你只需设置BufferValue,我来显示</H4>"
else
Response.Write "BufferValue="&Request.Form( "BufferValue" )
end if
%>

<form method="post" action="buffer.asp">
<p>
是否撤消响应: <input name="BufferValue" value="no">
<p><input type=submit value="显示吧"><input type=reset value="想重选">
</form>

<% if Request.Form( "BufferValue" ) = "yes" then
Response.Clear
Response.Redirect "cookie.asp"
Response.End
else
Response.Write "BufferValue="&Request.Form( "BufferValue" )
end if
%>
</body>
</html>
㈥.Response其它属性和方法
  1.Expires属性: 网页在客户端保留的时间长度
  2.ExpiresAbsolute属性: 网页在客户端保留的日期与时间
  3.AddHeader方法: 设定HTML文件的HTTP报头.
  4.AppendToLog方法: 在服务器日志中增加字符串.
  5.Flush方法: 立刻送出缓冲区中的的HTML资料.

七 多种脚本语言混合编程
  在同一个ASP页面中,可以同时使用多种脚本语言,充分利用各个脚本语言的功能优势.但必须指定一个主要脚本语言,若没有指定则默认为 VBScript.要在一个ASP页面中指定其它脚本语言为主要脚本语言,必须在该页面的第一行指定,方法如下:
<%@ Language = LanguageName %>
如果要将JScript指定为某页面的主要脚本语言,则须在该页面第一行加入:
<%@ Language = JScript %>
若没有指定,则相当于:
<%@ Language = VBScript %>
  应注意,这种方法只对支持 Object.Method 语法的脚本语言有效,不支持的要在WinNT服务器上对 LanguageEngines 进行设置,由于笔者没有用到,就不讨论了.
  上述是改变单个ASP页面中主要脚本语言,在改变所有ASP页面中主要脚本语言,采用上述方法可能不够聪明,最好是在WinNT服务器上对 DefaultScriptLanguage 进行设置,由于笔者没有用到,就不讨论了,还是用笨办法吧.
  除了主要脚本语言外,还可在页面的局部采用其它脚本语言来实现特定的功能.此时要用<Script>来实现,具体方法如下:
<Script Language = LanguageName RunAt = Server>
....
功能实现部分
....
</Script>
其中,LanguageName 为脚本语言名称,可以是VBScript、JScript、Perl 等服务器上已安装的解释引擎的脚本语言;Runat = Server 指定该段脚本在服务器运行,以区别在客户端浏览器运行,因为默认是在客户端浏览器运行,所以该设置不能省略,否则对应的脚本将发送到客户端让浏览器解释运行.
  在ASP页面中,一般每种脚本完成一个完整的功能,然后用主要脚本语言进行调用,调用方法为<%Call Function%>.
  用<Script>方式编写服务器端脚本时应注意:
1.脚本语句必须作为某个函数的一部分出现,而不能单独出现在函数体之外.
2.不能使用输出语句,如<% = 变量名 %>向生成的HTML页面输出.
3.编写函数时不可再用<!-- -->来屏蔽,因为服务器必须能解释脚本,否则会引起错误.
  多种脚本语言混合使用时应注意,要使用某种脚本语言,必须首先在服务器上安装对应的脚本语言解释器.在 ASP 中已经内置了VBScript和JScript两种脚本语言解释器,故可不必安装,但其它脚本语言则必须安装后才能使用.
  下面是一个VBScript和JScript两种脚本混合使用的例子,是上面例子query.asp的改写.
<html>
<head>
<title>用户帐号</title>
</head>

<Script Language = VBScript RunAt = Server>
Sub VBSQuery
for i = 1 to Request.QueryString("CustomerID").count
Response.Write "<p>第"&i&"个用户帐号:"&Request.QueryString("CustomerID")( i )
next
End Sub
</Script>
<SCRIPT LANGUAGE=JScript RUNAT=Server>
function JSQuery()
{
var i;
for ( i =1; i <= Request.QueryString("CustomerID").count; i++ )
Response.Write("<p>第" + i + "个用户帐号:" + Request.QueryString("CustomerID")( i ));
}
</Script>

<body>
<H2>VBScript :您指定的客户帐号如下</H2>
<% Call VBSQuery %>
<H2>JScript :您指定的客户帐号如下</H2>
<% Call JSQuery %>
<H2>主脚本 :您指定的客户帐号如下</H2>
<%for i = 1 to Request.QueryString("CustomerID").count %>
<p>第<% = i %>个用户帐号:<% = Request.QueryString("CustomerID")( i ) %>
<%next%>
</body>
</html>

八 服务器端脚本和客户端脚本混合编程
  当使用<script></script>编写一段脚本程序时,如果没有指定 Runat = Server,则认为其中的脚本程序在客户端执行,此时可以在程序中混合使用服务器端主要脚本和客户端脚本,这样就可以根据客户端的请求灵活地控制客户端脚本的执行,使对客户的反馈更具有个性化.在混合使用时,服务器端脚本要以<%%>的形式嵌入,以示区别.
  下面就是一个服务器端脚本和客户端脚本混合编程的例子.在该例子中,将输出10条记录,并为每条记录定制不同的函数.
<html>
<head>
<title>服务器端脚本和客户端脚本混合编程</title>
</head>
<body>
<H1>鼠标移到各记录上的【项目名称】上时,请注意状态条内容的变化</H1>
<table border = "1">
<tr><td>项目名称</td><td>状态条应出现的内容</td></tr>
<% for i = 1 to 10 %>
<tr>
<td onmouseover = "Status<% =i %>()"><% =i %></td>
<td>第<% =i %>条记录出现了</td>
<tr>
<script language = JavaScript>
<!--
function Status<% =i %>()
{
window.status = "第<% =i %>条记录出现了";
}
-->
</script>
<% next %>
</table>
</body>
</html>

九 增加注释
  在编程时添加注释是一个好的习惯.ASP 允许在页面代码中添加注释.具体的注释方法可参见各脚本语言的规则规定,如VBScript的注释符号为 Rem 或 单引号" ' ",JScript的注释符号为 双斜杠"//".有一点要注意,就是在HTML输出语句中不能添加注释,如<p>当前时间为<% =now '在HTML输出当前时间%>
即是无效的.

十 利用 Include 来实现功能模块化
可以将常用的功能函数存于一个ASP文件,在其它ASP页中要用其中的功能时,将包含函数的ASP文件包含在调用函数的ASP文件中.这时可使用 Include 语句.具体语法为:
<!-- #include file="AspFileName" --> 或 <!-- #include Virtual="AspFileName" --> .
使用时应该注意:
  1.<!-- include file >用于被包含的ASP文件的文件名为普通文件名,其中文件所在的目录为实际目录;而<!-- include virtual>用于被包含的ASP文件的文件名为虚拟文件名,其中文件所在的目录为虚拟目录.
  2.被包含文件的文件名称不能使用ASP脚本变量,因为包含语句是先于脚本语句被解释和执行的,此时文件名为无效文件名称.如下面语句即为无效的:
  <% for i = 1 to 4
AspFileName = "/aspsamp/Asp"&i&".asp"
%>
<!-- include file=AspFileName -->
  <% next %>
  3.应避免自包含,即 File1 包含 File1;在多个文件中有包含语句时,应避免间接自包含即循环包含,如File1包含File2,File2包含File3,File3包含File1.
  4.被包含的脚本语言的类型必须是默认语言类型,即必须是主文件<%@ language%>语句中指定的脚本语言类型;被包含文件中不能使用<%@ language%>语句.
  5.可以使用 "../"来表示相对路径.此时应保证服务器端 EnableParentPaths 设置为 1,当然在Win95上无法设置了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值