第7章 与用户交互
当用户在客户端发出请求后,服务器要把用户所需信息发送到客户端,这些信息可能是静态的文本、图片等,也可能是通过执行脚本程序动态生成的。那么,在ASP网页中如何将动态信息发送给客户?以及当客户通过表单提交信息时如何接收呢?为此本章讨论以下内容:
动态信息插入到HTML文档 缓冲输出及发送其它类型文档 重定向网页
表单的发送和接收 获取环境变量
通过本章的学习,希望读者能掌握动态信息的输出方式,了解缓冲输出的概念及实现方法,了解输出其它类型文档的方法,学会网页的重定向,熟练掌握表单的发送和接收方法,学会常用环境变量的获取方法。
7.1 发送信息
当客户端浏览器向服务器请求一个HTML文档时,服务器直接将HTML文档发送给浏览器,由浏览器对文档中的内容进行逐项解释,并显示在客户的窗口中。
但是,如果要根据用户的请求信息动态地生成网页,就需要使用ASP的内置对象Response。它可以将来自于用户或来自于数据库、来自于文件的有关信息嵌入到HTML文档中发送到客户端。
7.1.1 将动态信息插入到HTML文档中
通过ASP中的内置对象Response可以实现将需要动态生成的信息嵌入到HTML文档中,也可以通过它向客户端浏览器传递一些其它信息。
1. 少量信息插入
为了将少量信息插入到HTML文档中,(如插入一个变量的值、一个表达式的值),可以使用如下形式:
<%=表达式%> 与之等价的形式为:
<% Response.write 表达式%>
其中,Response是ASP内置的对象名,write是该对象的一个方法。
当HTML文档中插入了这样的动态信息后,你必须将其文件的扩展名改为asp。对于这样的网页文件,当用户请求访问该网页时,服务器端首先会调用相应的脚本引擎来计算该表
VBScript+ASP动态网页制作
达式的值,并将得到的结果信息象一般文档那样插入到原来的HTML文档中,形成临时的HTML文档发送给客户端浏览器。
2. 较多信息插入
但如果一个网页文件中要插入大量的动态信息,一般直接使用一次或多次Response对象的Write方法,例如要显示当前的日期,尽管可以使用上面的方法,写成如下形式:
今天是<%=year(date())%>年<%=month(date())%>月<%=day(date())%>日。 但我们一般写成如下形式: <%
Response.write “今天是”& year(date) & “年” & month(date) & “月” & day(date) & “日” %>
从上面的讨论看出要使用Response对象将一些动态生成的信息插入到网页中,需要使用如下形式:
Response.write 表达式
其中,不管表达式的结果是什么类型,最终都作为字符串插入到网页中。另外,由于这一行是由服务器执行的脚本,它必须包含在<%和%>之间。
【例7-1】在网页中嵌入动态信息
<%@language=VBScript%> <% dim d,m,y d=day(date()) m=month(date()) y=year(date()) %>
<% Response.write \"今天是\" & y & \"年\" & m & \"月\" & d & \"日 现在时间是<%=time()%>
\" %>
本例中,第一行指定本页中所使用的脚本语言为VBScript,如果你的网站或者你的网页准备存放到的网站所用的默认脚本语言不是VBScript,则该行是必须的,否则,可以像以后各例中那样省略该行。第2行定义三个变量,第3、4、5行分别求出当前日期对应的年、月、日,赋值给这些变量。在主体部分中指定用6号字显示内容后,用Response的write方法将
• 120 •
第7章 与用户交互
包含年月日的字符串显示出来,换行后又用<%=time()%>的形式输出当前的时间。输出形式如图7-1所示。
图7-1 嵌入动态信息后的网页显示
为了验证本例中的代码,你首先要像前一章中所讨论的那样,创建一个能运行ASP文件的环境,如在Windows 98操作系统中安装个人Web服务器(PWS)。之后,把例中的代码使用文本编辑程序输入,并保存成扩展名为asp的文件,如L7_1.asp,放入到指定目录中,(由于最方便的做法是将这些文件放在Inetpub\\wwwroot目录中,因此,以后说的“指定目录”一般指的就是Inetpub\\wwwroot)。最后启动浏览器,在其地址栏中输入相应地址,如localhost/L7_1.asp。
代码中,如果把单词Response拼写错了,在浏览时,系统会显示缺少对象。如果把write拼写错误,则系统会显示该对象不支持该属性或方式。如果你把网页的扩展名写成htm,则浏览时会显示文件不存在或只显示“现在时间是”这几个汉字。
7.1.2 输出静态信息
我们经常看到如下形式的文档: <% if 条件 then %>
条件满足时发送的文档 <% else %>
条件不满足时发送的文档 <% end if %>
例如:控制某网页在星期天时不能访问的脚本如下 <%
if Weekday(date)=1 then %>
<% else
• 121 •
VBScript+ASP动态网页制作
%>
欢迎您!…<% end if %>
上面的代码中,由<%和%>括起来的脚本和HTML文档信息几乎占有相同的篇幅,这样,来回在两种形式间进行转换,会给代码阅读带来困难。甚至有的网页中只有少量的HTML文档,这时,我们完全可以考虑把整个文件全部写成脚本形式,方法是把原有的HTML文档部分改成用Response来输出,即把上述代码改为如下:
<%
if Weekday(date)=1 then
Response.write \"\" else
Response.write \"
\" Response.write \"欢迎您!„\"Response.write \"\" end if %>
再看下面形式的一段代码: <% select case tweekday %> <% case 1%> 星期日 <% case 2%> 星期一 <% case 3%> 星期二 <% case 4%> 星期三 <% case 5%> 星期四 <% case 6%> 星期五 <% case 7%> 星期六
<% end select %> 如果改成如下形式:
• 122 •
第7章 与用户交互
<%
select case tweekday case 1
strweek=“星期日” case 2
strweek=“星期一” case 3
strweek=“星期二” case 4
strweek=“星期三” case 5
strweek=“星期四” case 6
strweek=“星期五” case 7
strweek=“星期六” end select
Response.write strweek %>
显然后面一种形式符合一般程序设计语言的表述方式。 再如以下形式的代码: <% dim I I=0 %>
<% do %>
”>使用DO … Loop 循环, [<% if I<>0 then %>负<%end if%> <%=I%>号字]
<%I=I+1
loop until I>3%> 和如下形式比较: <% dim I I=0 Do
Response.write “使用DO…Loop 循环, [ ” If I<>0 then Response.write “负” Response.write I & “号字]
” I=I+1
Loop until I>3
• 123 •
VBScript+ASP动态网页制作
%>
后者更象是一个脚本程序。
从上面讨论中,希望读者理解,用Response.write可以将动态的内容插入到静态HTML文档中,但反过来,静态内容也可以用Response.write动态生成,合理地选用,有利于网页文件的阅读和理解。
7.1.3 缓冲输出
有时,我们希望将已经发送给客户的信息作废掉。例如分页输出一个表格时,有可能表头已经输出,而又发现数据库中记录已经结束,此时希望把已经输出的表头删除掉。
为此,在ASP中引入了缓冲输出的概念,即把输出内容先放到服务器的缓冲区中,在适当的时候再发送到客户端。
1. 设置缓冲输出方式
使用Response对象的buffer属性可以设置缓冲输出页面的内容,形式为: Response.buffer=true
这一设置,将告诉服务器,不要把后面的内容(包括HTTP报头)直接送往客户端。这一属性的设置必须放在所有的文档输出之前,即标签之前。
一旦设置完成后,可用一般的HTML文档形式,如: Hello User
也可用Response对象的Write方法,如: <% Response.write “Hello User”%>
来缓冲输出所需内容,即将这些要输出的内容先存入缓冲区。
2. 清除缓冲区的内容
缓冲输出的缓冲区是建立在服务器中的,在缓冲输出方式中,可以把一些已经放入缓冲区的内容清除掉(作废),其形式如下:
Response.Clear
即使用Response对象的clear方法,它清除缓冲区中原有的内容。但这一方法只清除BODY标签之间的内容,所以清除后不必再送入头部信息,就可输出新的网页。
3. 输出缓冲区中的内容
在缓冲输出方式下,要将缓冲区中的内容发送到客户端,可使用Response对象的Flush方法来实现,形式如下:
Response.Flush
它把缓冲区内容立即送往客户端输出。
4. 结束输出
可以使用Response对象的end方法来结束输出,执行到该语句时,系统将已经送往缓冲区中的内容发送到客户端浏览器输出,并通知浏览器文档已经结束。形式为:
Response.End
• 124 •
第7章 与用户交互
其后的文档或脚本输出均无效。 【例7-2 】使用缓冲输出例
<%@language=VBScript%> <%
Response.buffer=true %>
这是一行客户端看不到的内容 <% Response.write \"这是第二行看不到的内容\" Response.clear Response.write \"这是客户端能看到的第一行内容 这是看到的第二行内容 Response.write \"这是看到的最后一行内容 这是结束后输出的一行内容,客户端看不到这行内容。
\" %>
<% Response.flush
\" Response.end %>
在验证本例中的代码时,同样要使用任一文本编辑器输入例中的代码,考虑到阅读方便,代码中用了较多的汉字,在你输入验证时,完全可以使用一些自己能理解的英文或符号代替一下。输入完成后,必须使用扩展名为asp的文件存盘,并保存到指定的目录中。之后才能打开浏览器,输入地址,观看结果。正确输出结果如图7-2所示。
图7-2 缓冲输出
• 125 •
VBScript+ASP动态网页制作
7.1.4 输出内容指定
我们常说当浏览器请求一网页时,服务器会将一个HTML文档发送给客户端浏览器,但服务器也可以使用Response对象的ContentType属性指明向浏览器发送的是其它类型的文档。指明发送给客户端浏览器的是什么类型的文档,可使用如下形式:
Response.ContentType[=内容类型] 内容类型的书写格式为:“类型/子类型”,如默认值为“text/HTML”,可以是“text/plain”表示纯文本,“application/msword”表示WORD文档,还可以是“image/GIF”表示GIF图片等。
1. 输出文本文件
要想向客户端发送文本文件,使用如下形式的指定: Response.ContentType=“text/plain”
要注意的是,这一行必须放在输出任何内容之前。 【例7-3 】输出纯文本文件
<% @LANGUAGE = VBScript %> <%
Response.ContentType = \"text/plain\" %> 你好:
你看到的是纯文本文件,它不识别HTML的标签。 请注意这里的
标志并不处理成换行。
要验证本例中的代码,你需要记住,文件的扩展名也必须用asp,并把文件存放在指定的目录中,执行结果如图7-3所示。
图7-3 输出纯文本文件
2. 输出Word文档
• 126 •
第7章 与用户交互
【例7-4 】输出Word文档
<% @LANGUAGE = VBScript %> <%
Response.ContentType = \"application/msword\" %> 用户好:
这一信息将直接使用MS Word来显示,并且你能直接修改和保存它。 注意:在这里原来的象
这样的HTML标签不被处理成换行。
验证本例中的代码时,当在浏览器中输入地址后,客户端会启动Word程序来打开具有上述内容的网页,如图7-4所示,此后你可以编辑并保存它的内容。
图7-4 发送WORD文档
7.1.5 重定向用户
当某个用户来访问你的网站时,你可能希望它首先访问某一网页,如访问用于输入用户名、口令等信息的网页。但如果他试图跳过这些必要的检查而直接去访问某些网页时怎么办。这里提供一种强制让用户转到某一页的手段。
使用Response对象的redirect方法可以把用户引导到指定的某个网页。形式如下: Response.redirect 网页地址
其中,网页地址可以是本地的,也可以是其它服务器的地址。例如: Response.redirect “Login.asp”
这里,Login.asp是已经存在的网页文件名。在网页文件名后还可以用“?”带上查询字符串,对此在下一节将进行深入的讨论。
注意:redirect方法必须在输出任何信息之前使用,即必须放在标签之前。
7.1.6 其它属性和方法
除了以上讨论的属性和方法外,Response对象还有一些其它属性和方法,分别讨论如
• 127 •
VBScript+ASP动态网页制作
下:
1. Expires属性
设置网页的失效时间,单位是分钟,形式如下: Response.Expires=分钟数
其中,Response是对象名,Expires为该对象的属性。这一属性的设置表示让网页在规定的时间后失效。当将分钟数设为0时,表示网页马上失效。
为了提高浏览器访问网页的速度,系统在硬盘上开辟一个区域用于存放最近访问过的网页,这一区域称为缓冲区。当用户再次请求相同的网页时,浏览器将首先从缓冲区中取出网页内容显示,通过设置网页的失效时间,可以让浏览器了解到这些网页是否已经过期,即是否应该再从对应的网站上下载该网页。
同样,这一属性的设置需要放在任何信息发送到浏览器之前进行。
2. ExpiresAbsolute属性
设置网页失效的绝对时间,即指出网页在某年某月某日后失效。形式如下: Response.ExpiresAbsolute=日期时间 例如:
<% Response.ExpiresAbsolute=#Dec 31,1999 23:59:59#%>
指出网页在1999年12月31日23:59:59后失效。如果未指定时间,该页面将在当天午夜过期。如果未指定日期,则该主页在脚本运行当天的指定时间到期。
3. IsClientConnected属性
有时,由于脚本执行的时间太长,当用户放弃访问该页时,脚本还在执行。为此,可以通过Response对象的IsClientConnected属性来判断用户是否已经离开,一旦用户离开,则网页中的脚本就不应继续执行。
【例7-5 】使用IsClientConnected属性
<% i=0 do
if i mod 10=0 then Response.write \"
\" & i/10 & \":\" i=i+1
Response.write \"Hello!\"
loop until not(Response.isclientconnected) %>
本例中重复显示Hello!,(每10个一行),直到按下浏览器的停止按钮。注意:这一属性的值实际上是在上一次使用write方法时设置的。
• 128 •
第7章 与用户交互
4. CacheControl属性
本属性用于指出是否允许代理服务器缓存该页的内容,缺省值为FALSE。允许代理服务器缓存该页能提高访问速度,但有可能让用户得到过时的内容。
5. AppendToLog方法
AppendToLog 方法用来将一个字符串添加到Web服务器日志条目的末尾。这一方法主要用于记录访问该网页的用户,及相应的访问时间等,以便于通过其它应用程序来统计。使用形式如下:
Response.AppendToLog 字符串
根据日志文件的格式要求,字符串中不能包含逗号,并且字符串最长不能超过80个字符。
7.2 接收信息
有时,你希望通过网页来接收用户的一些信息,如用户输入的用户名、口令,用户对你的网页的评价,用户请求帮助的一些信息。为此,ASP中内置了一个对象Request,它封装了所有用户的请求和表单信息。
另外,根据HTTP协议的规定,用户发送表单有两种方式,即GET和POST方式,对于这两种不同的方式,在ASP中接收信息的处理方式也有所不同,所以本节中将分别讨论这两种方式下的接收和发送问题。
7.2.1 接收用户通过GET方式发送的信息
要让用户通过GET方式向服务器发送信息,常用的形式是,首先让用户填写一个表单,用户填写完成后,单击提交按钮,由浏览器组成查询字符串发送给服务器,再由服务器中某一指定文件来接收并处理。这一过程中,涉及到两个部分的内容,一个是表单的设计与显示,另一个是接收数据部分的设计。以下分别进行讨论。
1. 表单设计
若要设计一个表单,用于输入姓名和口令,形式如下:
从上述形式中可以看出,要想以GET方式发送表单信息,表单设计部分的FORM标签中需要指出两个方面的内容:
(1) 指出表单中填入数据后,以什么方式发送给服务器。它是用method属性指出,它可以取两种不同的值,即GET和POST,在这里它的值设置为GET,即指出以GET方式发送
• 129 •
VBScript+ASP动态网页制作
表单中填写的信息。
(2) 指出接收表单数据的文件名,它用action属性来指出,这里使用一个名为“abc.asp”的文件。如果你的网页中除了使用ASP技术外,还要使用其它技术,如CGI、IDC等,这时,在action属性中可能使用像abc.exe、abc.cgi或abc.idc等这样的文件名。
有时你还可以给表单起一个名称,使用FORM标签的name属性,形式如下: name=myform
给表单命名,在客户端脚本中是常见的。关于客户端脚本请参见第5章的有关内容。
2. 接收表单数据
浏览上述形式的网页时,将显示等待输入的一个文本框和一个密码框,如图7-5所示。 此时,若用户输入相应信息,并单击提交按钮时,浏览器将发送信息给服务器,服务器通过指定的网页文件来接收信息。对于上述表单,指定abc.asp来接收和处理数据。那么,接收数据的网页文件如何设计呢?
设计用于接收表单信息的网页文件中,关键是如何获得用户在表单域中输入的数据,对此,可以使用ASP内置对象Request来实现,要得到以GET方式发送的表单域中的信息可以使用如下形式:
Request.querystring(\"表单域的名称\")
例如使用Request.querysting(\"username\")可获得名称为username的表单域的值。其中,Request 是ASP中内置对象,querystring称为该对象的集合。由于它的中文含义是查询字符串,所以,我们常常把以GET方式发送的表单信息称为发送的查询字符串。
另外,在不至于引起混淆的场合也可以把读取表单域信息的形式简写成如下形式: Request(\"表单域的名称\")
图7-5 发送信息的表单
【例7-6 】GET方式发送和接收信息
本例中需要使用两个文件,一个文件用于显示表单,另一个文件用于接收表单信息。 (1) 显示表单的文件L7_6.html
• 130 •
第7章 与用户交互
(2) 接收表单信息的文件L7_6.asp
<%
name=Request.querystring(\"username\")
password=Request.querystring(\"userpassword\") %>
你的名字是:<%=name%>
你的口令是:<%=password%>
验证本例时需要分别输入并保存这两个文件到指定目录中,前一个文件可以用htm或html作为扩展名,如L7_6.html,后1个文件必须用asp作为扩展名,文件名必须同前一个文件中所指定的文件名L7_6.asp一致,如果要改用其它文件名,则需要修改前一个文件的form标签中action属性的值。
浏览本例中网页时,首先打开浏览器,输入网页地址,显示如图7-5所示的表单。 接着,在表单中输入,如姓名框中输入“abc”,口令框中输入“123”,并单击提交,显示如图7-6所示。
图7-6 接收表单后的显示
注意:即使本例中第1个文件使用htm或html作为扩展名,浏览时也不能通过在文件夹窗口中双击文件图标来实现,否则,在提交表单时,将显示要求下载文件的错误提示。
• 131 •
VBScript+ASP动态网页制作
3. 合并两个文件
可以看出,实现表单显示和接收表单信息是实现交互的不可分割的部分,而用两个文件来实现,对于文件的管理将带来困难,并且不便于修改,为此,我们来考虑怎样将两个文件合并成一个文件。
首先,若把这两个部分合并成一个文件后,当文件被第一次访问时,应执行显示表单部分,而当表单内容输入后提交时,执行接收表单信息的部分。根据访问该网页时是否同时发送了表单信息,可以判断出该网页是不是第一次访问。为此,可以使用如下形式条件表达式:
Request.servervariables(“QUERY_STRING”)<> “”
当它为FALSE时,表示访问网页时没有同时发送查询信息,而当它为TRUE时,表示在请求网页时,同时发送了表单信息,可以断定很有可能该网页第二次被访问。注意,不等号右侧是不包含任何字符的空串。
【例7-7 】用同一个文件显示表单和接收表单信息
<% if Request.servervariables(“QUERY_STRING”)<>”” then name=Request.querystring(\"username\")
password=Request.querystring(\"userpassword\") %>
你的名字是:<%=name%>
你的口令是:<%=password%> <% else %>
读者在验证本例时,可能发现执行结果不正确,实际上,在设计表单时,已经假设表单的信息是发送给文件“L7_7.asp”,因此,合并后,如果你给它起的文件名不是“L7_7.asp”,当浏览网页时,表单中输入的信息实际上并没有发送给自身文件 。
为了指出表单中数据是发送给文件本身,可以使用如下形式: <%=Request.servervariables(“SCRIPT_NAME”)%> 这样,可以把上述网页改为例7-8中的形式。 【例7-8】表单信息发送给网页本身。
<%
if Request.servervariables(“QUERY_STRING”)<>”” then
Response.write “你的名字是:” & Request.querystring(\"xm\") & \"
\"
• 132 •
第7章 与用户交互
Response.write “你的口令是:” & Request.querystring(\"kl\") else %>
<%end if%>上述代码不管以什么文件名保存,只要扩展名为asp,并存放到指定目录中,浏览时都能得到如图7-7所示结果,输入表单信息后单击提交,如姓名框输入“a”,口令框输入“1”,最终得到如图7-8的显示结果。
图7-7 发送信息到自身 图7-8 接收信息后的显示
注意:在将例7-7中的代码改为例7-8中的代码时,对内容作了较大的调整,特别要注意的是表单域的名称已经改成“xm”和“kl”了。如果没有注意这一点,接收数据部分会接收不到数据。这也说明设计表单和接收表单数据密切相关。
4. 直接使用查询字符串
在验证例7-8中代码时,当你在表单中输入信息,并提交后,会发现在显示结果的同时,浏览器的地址栏中在文件名后自动添加了“?”开始的一串字符,见图7-8,这些内容我们称为查询字符串。那么,在浏览网页时是否可以不让它显示表单,而直接在地址栏中输入查询字符串呢?答案是肯定的。对于例7-8中的网页,可以直接在地址栏中输入如下内容:
localhost/L7_8.asp?xm=abc&kl=123 其中,“?”前面部分为网页地址,也称“URL”,后面部分为查询字符串,结果如图7-9所示。
• 133 •
VBScript+ASP动态网页制作
图7-9 直接输入查询了符串
注意,这种方式发送的信息只能用Request对象的querystring集合来读取。 5. 重定向到其它网页
有时,可能希望在网页中提供搜索功能,这时,可以通过其它著名的搜索网站来实现,如Yahoo!,实现的完整代码如下:
【例7-9 】重定向到其它网站
<%@ language=VBScript%> <% option explicit dim searchstr,str
searchstr=Trim(Request.Querystring(\"Searchstr\")) if len(searchstr)<>0 then
str=\"http://search.yahoo.com/bin/search\" str=str & \"?p=\" & searchstr Response.redirect str else %>
<%end if%>本例中,首先显示一个供输入需要搜索的字符串的表单,当单击提交后,该表单信息发送给网页本身,处理后再重定向到其它网站。代码中通过第4行获得表单中输入的内容,即查询字符串,放入到变量searchstr中,第5行判断查询字符串是否为空,若不为空,第6、7两行构成对Yahoo!网站的请求串,第8行使用重定向方法转向Yahoo!网站,并同时发送查询字符串。
• 134 •
第7章 与用户交互
如果你使用的环境不能直接访问Yahoo!网站,则本例无法运行成功,但可以从浏览器的地址栏中看出最终向Yahoo!网站发送的信息。
6. GET方式总结
可以看出,由于GET方式是把表单中的信息附加到URL发送到服务器,这样,一方面可能有一些需要保密的东西可能被其它人发现,另一方面,这种方式只适合于发送少量信息。
7.2.2 接收通过POST方式发送的信息
当你需要让用户安全地提交大量信息时,可以使用POST发送方式。
和GET方式类似,以POST方式传递数据时也涉及到表单设计和接收表单数据两部分内容,所不同的是,在以POST方式传递信息时一定要有表单。
1. 表单设计
以下还是以输入姓名和口令的表单为例,设计如下:
从上述形式中看出,和GET方式下不同的只时form标签的method属性的设置,它指出发送表单中数据的方式是“POST”方式。
2. 接收表单输入
为了接收使用POST方式发送的表单信息,可以使用Request对象的form集合,形式如下:
Request.form(\"表单域的名称\")
例如Request.form(“username”)可用于接收用户在名为username的表单域中填入的数据。 有时,为了判断用户是否用POST方式的表单发送了信息,同GET方式类似,可以用如下形式:
Request.servervariables(\"CONTENT_LENGTH\")<>0
当条件为真时,表示发送了信息,而当条件为假时,表示没有发送信息,如例7-10所示。
【例7-10】POST方式发送和接收表单
<%@language=VBScript%> <%option explicit dim name,age
if Request.servervariables(\"CONTENT_LENGTH\")=0 then %>
• 135 •
VBScript+ASP动态网页制作
<%else %> <%
name=Request.form(\"txtName\") age=Request.form(\"txtAge\") %>
<%=name%>,你好!
你今年<%=age%>岁. <%end if%>
验证本例中的代码时,你必须先使用文本编辑程序输入并以asp 作为扩展名存放到指定目录,之后启动浏览器,输入地址。
浏览时,首先在浏览器窗口显示表单供用户填写,如图7-10所示。
图7-10 POST方式发送的表单
当用户输入内容后,如姓名框中输入“张三”,年龄框中输入“23”, 单击提交按钮,则显示结果如图7-11所示。可以看出,在显示结果时,地址栏中没有发生变化,这就是和GET方式形式上的不同点。
• 136 •
第7章 与用户交互
图7-11 表单接收后的显示
3. 混合发送方式
有时,我们希望通过表单,既以POST方式发送一些信息,又通过GET方式传递一些信息,这时,可以将要传递的一些信息放在
<% else %>
<%Response.write \"以GET方式发送的内容如下:
\" for each qs in Request.querystring
Response.write qs & \"=\" & Request.querystring(qs) & \"
\" next
Response.write \"以POST方式发送的内容如下:
\"
• 137 •
VBScript+ASP动态网页制作
for each fm in Request.form
Response.write fm & \"=\" & Request.form(fm)& \"
\" next %>
<%end if%>
例7-11中,如果文件以L7_11.asp存盘的话,
<% else %>
<%Response.write \"服务器端接收到的内容如下:
\" for each fm in Request.form
Response.write fm & \"=\" & Request.form(fm)& \"
\" next %>
<%end if%>
浏览时,首先显示如图7-19所示,根据表单中各项选择情况不同,显示结果也有所不同,如图7-20所示。
本章小结
本章讨论了在ASP网页中实现与用户交互的方法,主要分成两个方面,即向用户发送信息,和接收用户发送的信息。
网页中除了使用HTML文档向用户发送静态信息外,使用ASP内置对象Response的Write方法向用户发送动态生成的信息。少量的静态信息也可以作为字符串,使用Write方法发送。
为了接收来自用户的信息,可以设计一个表单,让用户填写。在网页中,可以指定用户表单信息以两种不同的方式发送,即GET方式和POST方式。其中GET方式适合于发送少量不加密的数据,而POST方式适合于用在需要发送较多信息的表单中。在ASP中使用内
• 147 •
VBScript+ASP动态网页制作
置对象Request来接收网页中或用户在表单中填写的数据。对于不同的发送方式,接收方式也有所不同。
在本章中还讨论了使用Request对象的Servervariables集合来获得与用户有关的一些信息,这些信息的获得有利于实现与用户的交互。
图7-19 多个表单域的表单 图7-20多个表单域的接收
习题
一、问答题
1.下面两行代码是否等价: <%=“Hello User”%>
<% Response.write “Hello User”%>
2.在使用Response对象的Flush方法之前必须使用哪一个语句? 3.用户能否被服务器端脚本重定向到另一个Web站点上的Web页? 4.哪一个VBScript语句可防止浏览器缓存你的Web页? 5.脚本中怎样求出自已的虚拟路径?
6.是否能同时以GET方式和POST方式向服务器发送信息? 7.提交的表单中不同类型的表单域是否可以有相同的名称?
8.如果表单域中没有输入值,或没有被选中的值,则浏览器是否还发送该项? 9.一个表单中能看到有两个被选中的单选按钮吗? 10.能发送大量信息的是哪一种发送方式?
二、设计题
• 148 •
第7章 与用户交互
1.设计一个网页,当访问日期在2002年12月30日前重定向到名称为“old.asp”的另一网页。
2.设计一个网页,首先接收用户输入10个字符串,再显示一个包含列表框的表单,把用户提交的字符串作为列表框中的选项。 3.设计一个网页,首先显示一个包含姓名输入框的表单,让用户输入姓名,使用POST方式,表单提交时附加一个查询字符串“?try=success”,提交后脚本显示所提交的内容。
4.试设计一个网页,当发现用户使用的是英文时,显示一英文字符串,当用户使用的是中文时,显示一中文字符串。
5.自己设计一个表单,用于接收并显示你能想到的需要提交的信息。
• 149 •
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务