ASP学习的十步进阶(2)
㈣.利用 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 = "spsampsp"&i&".asp"
%>
<!-- include file=aspfilename -->
<% next %>
3.应避免自包含,即 file1 包含 file1;在多个文件中有包含语句时,应避免间接自包含即循环包含,如file1包含file2,file2包含file3,file3包含file1.
4.被包含的脚本语言的类型必须是默认语言类型,即必须是主文件<%@ language%>语句中指定的脚本语言类型;被包含文件中不能使用<%@ language%>语句.
5.可以使用 "../"来表示相对路径.此时应保证服务器端 enableparentpaths 设置为 1,当然在win95上无法设置了.
以上是学习和使用asp创建动态、交互式站点的一些入门知识,有了这些基础知识,就可以发挥以前自己积累的编程经验,自己动手学习和探索用asp创建动态、交互式站点的高级应用了.欢迎大家将自己的学习所得发表出来,让我们来共同分享你成功的喜悦;也欢迎大家写信到 wangfajun@163.net 与笔者交流学习心得.
[iocblog.net 来源]
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。