lientCertificate用的较少,这里就不说了.
要求客户端必须支持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>
要求客户端必须支持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>