配色: 字号:
《ASP动态网页设计与应用(第2版)》第4章 Request对象与Response对象
2023-05-24 | 阅:  转:  |  分享 
  
第?4 章? Request 对象与?Response 对象?4.1? 使用?Request 对象提交网页信息?4.1.1 ASP 内置对象
概述为了便于网络程序的设计,ASP?提供六个内置对象——Request、Response、Application、?Session
、Server?和?ObjectContext?对象,通过这些对象使网站开发者可以更容易地收集通过浏览器请求发送的信息、响应浏览器
以及存储用户信息。由 ASP 提供的两个主要内置对象——Request 对象和 Response 对象可以直接映射访问 Web?服
务器时客户端的两个行为,即发送信息到客户端和接收客户端提交的信息。另外几个对象则提供了附加功能,对编写脚本是非常有用的。每个对象都
提供了一系列的集合、属性和方法,这在后续章节中将加以介绍。下面简要说明每一个对象。(1)Request?对象可以使用? Reque
st? 对象访问任何用? HTTP? 请求传递的信息,包括从? HTML? 表格用?POST? 方法或? GET? 方法传递的参数
、cookie? 和用户认证。Request? 对象使您能够访问发送给服务器的二进制数据,如上载的文件。(2)Response 对
象可以使用? Response? 对象控制发送给用户的信息。包括直接发送信息给浏览器、重定向浏览器到另一个? URL? 或设置?
cookie? 的值。(3)Server?对象?Server? 对象提供对服务器上的方法和属性进行的访问。最常用的方法是创建? A
ctiveX? 组 Server?对象其它的方法可用于将? URL? 或?
HTML? 编码成字符件的实例? (Server.CreateObject)。?串,将虚拟路径映射到物理路径以及设置脚本的超时期限
。(4)Application 对象可以使用? Application? 对象使给定应用程序的所有用户共享信息。(5)Sessio
n 对象可以使用? Session? 对象存储特定的用户会话所需的信息。当用户在应用程序的页之间跳转时,存储在? Session?
对象中的变量不会清除;而用户在应用程序中访问页时,这些变量始终存在。也可以使用? Session? 方法显式地结束一个会话和设置
空闲会话的超时期限。(6)ObjectContext?对象该对象用于控制?Active?Server?Pages?的事务处理,可以
使用? ObjectContext? 对象来提交或撤消由? ASP? 脚本初始化的事务。(由于 ObjectContext?对象在
网站开发中使用较少,对于初学者来说更是如此,因此,本书中不作详细介绍。)?ASP?六大内置对象中,使用得最多的是?Request?
对象和?Response?对象,分别用于收集客户信息和发送服务器端数据到客户端。本章中将重点学习?Request?对象和?Resp
onse 对象。146?4.1.2 Request 对象简介?Request?对象用于获取所有从客户端提交到服务器的请求信息,?R
equest?对象提供了?5?种集 Form、?Cookies、?Server
Variables?和?ClientCerificate。?合来获取客户端的信息,分别是 QueryString、?ASP?中,可
以通过?Request?对象集合来从浏览器、Cookie、HTTP?头和用户会话中取得信息。?Request?对象为脚本提供客户端
在请求一个页面或传送一个表单时提供的所有信息,这包括能够标识浏览器和用户的?HTTP?变量,存储用户的浏览器对应的?cookie,
以及附在?URL?后面的提交的内容(查询字符串或页面中
表单中的?HTML 控件内的值)。?Request?对象使用格式
如下:?Request[.集合|.属性|.方法](参数)?其中,集合、属性和方法是可选的,当选择不同的集合、属性或方法时,要设置相
应的参数。通常,在使用?Request?来获取信息时,需要写明使用的集合、属性或方法,如果没有写明,即当写成?Request(参数
)的格式后,ASP?会自动依次按如下顺序来获取信息:?QueryString→Form→Cookies→ServerVariabl
es→ClientCerificate?下面对?Request?对象的集合、属性和方法进行简单介绍,然后在本节的各个任务中对相应内
容进行详细说明。?1.Request 对象的集合?Request?对象提供了?5?个集合,可以用来获取客户端对?Web?服务器发送
的各类请求信息,如提交的查询、Cookies、HTTP?报头值等,表?4-1?给出了这些集合的说明。表 4-1?Request 对
象的集合集合名称ClientCertificate?说明?当客户端访问一个页面或其他资源时,用来向服务器表明身份的客户证书的所有字
段或条目的数值集合,每个成员均是只读?Cookies?根据用户的请求,用户系统发出的所有 cookie 的值的集合,这些 cook
ie 仅对相应的域有效,每个成员均为只读?Form?METHOD?的属性值为?POST?时,所有作为请求提交的<FORM>段中的?
HTML?控件单元的值的集合,每个成员均为只读?QueryString?依附于用户请求的? URL?后面的名称/数值对或者作为请求
提交的且?METHOD? 属性为 GET(或者省略其属性)的,或<FORM>中所有 HTML 控件单元的值,每个成员均为只读?Se
rverVariables?随同客户端请求发出的 HTTP 报头值,以及 Web 服务器的几种环境变量的值的集合,每个成员均为只读
?2.Request 对象的属性?TotlBytes? 是? Request? 对象唯一的属性,它用于获取由客户端发出的请求的整个
字节数,是一个只读属性。TotlBytes?属性使用得很少,在?ASP?设计中,通常关注指定的值而不是客户端提交的整个内容。147
?3.Request 对象的方法?BinaryRead? 是?Request?对象唯一的方法,该方法允许访问从一个表单
中传递给服务器的用户请求部分的完整内容,用于接收一个表单的未经过处理的内容。使用格式如下:?BinaryRead(co
unt)?其中,参数?count?是所要读取的字节数,当数据作为表单?POST 请求的一部分发往服务器时,从客户请求中
获得?count?字节的数据,返回一个?Variant?数组。如果?ASP?代码已经引用了?Request.Form 集合, Bi
naryRead 方法就不能再使用。同样,如果用了?BinaryRead 方法,就不能访问?Request.Form 集合。?4.
1.3 QueryString?集合与?Form 集合?QueryString 集合与?Form 集合是?Request?中使用得
最多的两个集合,用于获取从客户端发送的查询字符串或表单的内容。?1.QueryString?集合?QueryStrin
g 是获取查询字符串的变量值的集合,其使用格式如下:?Request.QueryString(Varible)[(Index).C
ount]?其中,Varible 是在查询字符串中变量的名称。当某个变量具有多个值时,使用?Index。当某一变量具有多个值时,C
ount?指明值的个数。例如:?strname=Request.QueryString("name")?上面的语句将用户提交的查询
字符串中变量?name 的值赋给?strname。?likecount=Request.QueryString("like").C
ount?上面的语句将统计用户提交的查询字符串中变量?like 的值的个数。?2.Form 集合?Form? 集合用于获取在? H
TML? 的表单中所有的表单元素内容的集合,使用格式如下:?Request.Form(Parameter)[(Inde
x).Count]? Parameter?是在?HTML 表单中某一元素的名称,其中,当某个参数具有不止一个值(比如,当在 elect>中使用?multiple 属性时)时,使用?Index。当某个参数具有多值时,Count?指明多值个数。?strpwd
=Request.Form("pwd")?上面的语句将用户以?Post?方式所提交的表单中,名为?pwd 的对象内容赋值给?str
pwd。?4.1.4? 客户端信息的提交在网站开发中,为了实现用户与服务器的动态交互,通常需要从客户端浏览器向服务器发送信息,AS
P?中提供了?Request?对象来接受客户端发送回来的数据。通过该对象,服务器可148?以获得客户端提交的数据。一个用户请求包含
从用户传递给?ASP?的信息,产生请求的部分工作就是声明或者生成一个代表对?ASP?的调用的?URL,一个?URL 一般具有以下语
法:?Protocol://host:port/VirtualPath?QueryString?其中,Protocol?表示协议,
用于声明在远程机器之间传送信息的底层机制,可用的协议包括?http、https、ftp 等,本书中使用的都是?http 协议。?h
ost?表示请求要发送到的远程机器的名字或者?IP?地址。?port?声明服务器要监听请求的机器端口号。对于?http?协议来说,
端口号—般都是?80,这也是当这项参数空缺时的缺省值。?VirtualPath 包含一个以斜线为分隔符的一组标识符,服务器把它映射
到一个物理的路径和?ASP?页面的位置。?QueryString 是查询字符串,它是一个成对的名字和值的列表,作为?ASP?的参数
被传递到处理它的?ASP?页面。如果有多个参数需要传递,将会以“&”号分隔开的成对的名字和值,查询字符串可以想象成传递给目标?AS
P?的参数列表,就像是函数调用一样。下面是一个带有查询字符串调用?ASP?的?URL 例子:?http://localhost/a
sptech/Request.asp?p1=val1&?p2=val2?上面的信息在浏览器中提交时将被传递给本地主机的? 80?
端口(默认端口),处理该信息的脚本文件为? asptech? 目录下的? Request.asp,查 询字符串是在“?”之后的所有
内容即“p1=val1&p2=val2”,这里有两个查询参数?p1?和?p2,其值分别为?val1?和?val2。浏览器在用户点击
一个超级链接或者提交一个? HTML? 表单时都将产生一个请求(HTML?表单会在本节的后面讲到),下面是一个使用超级链接产生查询
字符串的语句:?ASP?教程?对于上面的语句,在点击链接文字“A
SP?教程”时,将产生一个?URL 请求,该请求将发送给文件?hyperlinkquery.asp 进行处理,请求中传递的参数是?
str,其值为“ASP?教程”。此外,在?ASP?中提交用户请求时,通常都是由客户端的网页产生请求,服务器端的?ASP?脚本处理请
求,所以,在设计时通常将客户端网页与服务器端脚本分为两个文件,即可见的前台网页文件与处理请求的后台脚本文件。下面来看一个提交查询字
符串的例子,例子由两个文件构成,分别是前台网页文件?qry.htm?和后台脚本文件?qry.asp。前台网页文件?qry.htm
内容如下:? EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">? tml?xmlns="http://www.w3.org/1999/xhtml">?? ="Content-Type"?content="text/html??charset=utf-8"?/>?提交查询<br> 字符串???149? asp?str1=ASP">ASP
?案例教程 >?ASP?案例教程
??<
/html>?后台脚本文件?qry.asp 内容如下:?<%@LANGUAGE="VBSCRIPT"?CODEPAGE="6500
1"%>? N"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">? ml?xmlns="http://www.w3.org/1999/xhtml">?? "Content-Type"?content="text/html??charset=utf-8"?/>?处理查询字<br> 符串??<%?''下面脚本获取客户端请求查询字符串中变量?str1?和?str2?的值?str1=re
quest.QueryString("str1")?str2=request.QueryString("str2")?%>? dy>?str1=<%=str1%>
?str2=<%=str2%>
???上面网页?qr
y.htm?在浏览器中运行效果如图?4-1?左图所示。单击网页中的链接文字“ASP?案例教程”,结果如图?4-1 右图所示。图 4
-1 查询字符串的处理从图中?Internet?Explorer?浏览器地址栏可以看到,带有查询字符串的超链接被作为?URL 提交
到服务器。服务器在收到?URL“http://localhost/4/4-1/qry.asp?str1=ASP&str2=案例教程
”后,调用了脚本文件?qry.asp?进行处理。在脚本文件中,通过下面的语句获取查询字符串中的变量?str1?和?str2?对应的
变量值“ASP”和“案例教程”,最后将其显示到网页上。150?str1=request.QueryString("str1")?s
tr2=request.QueryString("str2")?除了使用链接来提交查询字符串外, (Form)表单的?get?方法
也同样可以提交查询字符串。?4.1.5? 表单及其在客户端信息提交中的应用在前面网页信息传递的例子中,所有信息的传递都是通过超链接
来提交,这种信息的提交方式是静态的,即只能提交设计时指定的信息。在真正的网站设计中,更多情况下,需要能够进行动态提交的信息,即信息
是由用户输入数据后在客户端产生并提交信息,而不是由服务器端指定的。例如,网上常见的用户注册信息的提交,图?4-2?就是一个网站的注
册页面,图 4-2 注册页面在这种需要用户输入的页面中,使用由超级链接在设计时用标签硬编码来设计查询字
HTML?符串显然是行不通的。这种情况下,就需要使用?HTML 表单来
进行信息的输入和提交。表单允许在用户提交表单时动态生成?URL 的查询中,查询字符串中的变量名和变量值从表单中取得,然后生成变量名
和变量值配对列表,并追加到?URL 的后面。表单是一个能够包含表单元素的区域,HTML? 为表单提供了多种图形用户界面组件元素(比
如文本框,密码框,下拉菜单,单选框,复选框等等),这些表单元素能够让用户在表单中输入信息,可以用它们来构成表单内容,作为用户可以输
入的域,并可以将其提交给一个?ASP?进行处理。表单是用 HTML 的?form 标签来声明的,格式如下:? "?"?action="?"?method="?">?…?
标签的属性? name? 用于指定表单的名称,
这在同一页面有多个表单时会很有用;?action?属性指定当表单被提交时所要执行的动作,对?ASP?来说,可以指定为所要调用的?A
SP151? 标签的 method 参数指定传递请求给 ASP 所用的方法,文件的 URL;?它的值可以
是 GET、?POST 或?PUT,比较常用的是?POST 和?GET。当提交的信息较少,且不太注重安全性时,可以使用使用 GET
方法进行提交,这将在?URL 后生成以“?”开头的查询字符串,查询字符串中的变量名和变量值是在表单被提交时,动态地根据表单元素的
名字和用户的输入信息产生的,与前面所学过的查询字符串一样,这样生成的?URL 将可以在浏览器地址栏中看到,可以通过?Request
?的?QueryString?集合来获取?GET?方法提交的内容。如果提交的内容较多,或需要注重安全性时,则可以使用?POST 方
式提交,这种提交方式将表单所有内容进行整体提交,可以通过?Request?的?Form 集合来获取?POST 方法提交的内容。在标
签和
之间的则是表单元素。此外,如果?action?中没有指定处理提交信息的?ASP?文件,则由当前文件进
行处理。在表单标签里,可以使用?HTML?标签(输入标签)、?其中,cols?为文本域宽
度(字符数) rows?为文本域的高度,?(行数) 和?,?之间的是文本域的内容,对应
的就是文本域提交时的值。例如:?这是
一个?textarea?文本域?上面语句定义的文本域如图?4-5?所示。''输出选项内容?图 4-5 文本域?
4.select 标签??其中,和标签之间的是列表的内容
,列表内容用标签标签之间的是显示在选项列表中的选项内容。下面是一个?select?标签的
示例:157??? eea.cn">北京教育考试院?北京
教育考试指导中心?北京大学 ion>?清华大学?
elect>?上面的代码在浏览器中效果如图?4-6 左图所示,鼠标单击后展开列表如图 4-6?右图所示。图 4-6 列表选项?4.
2? 使用?Request 对象获取环境信息?4.2.1? ServerVaribles 集合?ServerVaribles?是?
ASP?环境变量的集合,它允许读取 HTTP?头,可以通过使用“HTTP_前缀”来读取任何头信息。ServerVaribles?集
合的使用格式如下:?Request.ServerVaribles(ServerEnvironmentVariable)?其中,参数
?ServerEnvironmentVariable 环境变量的集合,可以使用的环境变量如表?4-2?所示。表 4-2?Serve
rVaribles 集合环境变量环境变量ALL_HTTP?ALL_RAW?APPL_MD_PATH?APPL_PHYSICAL_P
ATH?AUTH_PASSWORD?AUTH_TYPE?AUTH_USER?CERT_COOK?CERT_FLAG?CERT_IS
SUER?CERT_KEYSIZE?CERT_SECRETKEYSIZE?CERT_SERIALNUMBER?说明?客户端发送的所
有 HTTP 标头,他的结果都有前缀 HTTP_。?客户端发送的所有 HTTP 标头,其结果和客户端发送时一样,没有前缀 HTTP
_?应用程序的元数据库路径。?与应用程序元数据库路径相应的物理路径。?当使用基本验证模式时,客户在密码对话框中输入的密码。?这是用
户访问受保护的脚本时,服务器用于检验用户的验证方法。?代验证的用户名。?唯一的客户证书 ID 号。?客户证书标志,如有客户端证书,
则 bit0 为 0。如果客户端证书验证无效,bit1?被设置为 1。?用户证书中的发行者字段。?安全套接字层连接关键字的位数,如
128。?服务器验证私人关键字的位数。如 1024。?客户证书的序列号字段。158?环境变量CERT_SERVER_ISSUER
?CERT_SERVER_SUBJECT?CERT_SUBJECT?CONTENT_LENGTH?CONTENT_TYPE?GAT
EWAY_INTERFACE?HTTPS?HTTPS_KEYSIZE?HTTPS_SECRETKEYSIZE?HTTPS_SERV
ER_ISSUER?服务器证书的发行者字段?服务器证书的主题字段。?客户端证书的主题字段。?客户端发出内容的长度。?说明?客户发送
的 form 内容或 HTTP?PUT 的数据类型。?服务器使用的网关界面。?如果请求穿过安全通道(SSL),则返回 ON。如果请
求来自非安全通道,则返回 OFF。?安全套接字层连接关键字的位数,如 128。?服务器验证私人关键字的位数。如 1024。?服务器
证书的发行者字段。?IIS 实例的?ID 号。?响应请求的 IIS 实例的元数据库路径。?返回接受请求的服务器地址。?用户登录 W
indows NT 的帐号?客户端提供的路径信息。?通过由虚拟至物理的映射后得到的路径。?查询字符串内容。?发出请求的远程主机的
IP 地址。?发出请求的远程主机名称。?提出请求的方法。比如 GET、HEAD、POST 等等。?执行脚本的名称。?服务器的主机名
、DNS 地址或 IP 地址。?接受请求的服务器端口号。?如果接受请求的服务器端口为安全端口时,则为 1,否则为 0。?服务器使用
的协议的名称和版本。?应答请求并运行网关的服务器软件的名称和版本。?提供 URL 的基本部分。?HTTPS_SERVER_SUBJ
ECT? 服务器证书的主题字段。?INSTANCE_ID?INSTANCE_META_PATH?LOCAL_ADDR?LOGON_
USER?PATH_INFO?PATH_TRANSLATED?QUERY_STRING?REMOTE_ADDR?REMOTE_HO
ST?REQUEST_METHOD?SCRIPT_NAME?SERVER_NAME?SERVER_PORT?SERVER_PORT
_SECURE?SERVER_PROTOCOL?SERVER_SOFTWARE?URL?4.2.2 ClientCertifica
te?集合?ClientCertificate 集合是所有客户证书的信息的集合。使用格式如下:?Request.ClientCer
tificate(key[SubField])?其中,对于参数?Key,该集合具有如表?4-3?所示的关键字。表 4-3?Clie
ntCertificate 集合关键字关键字Subject?Issuer?VadidFrom?ValidUntil?159?说明?
证书的主题。包含所有关于证书收据的信息。能和所有的子域后缀一起使用。?证书的发行人。包含所有关于证书验证的信息。除了 CN 外,能
和所有的子域后缀一起使用。?证书发行的日期。使用 VBScript 格式。?该证书不在有效的时间。SerialNumber?Cer
tificate?包含该证书的序列号。?包含整个证书内容的二进制流,使用 ASN.1 格式。 Subj
ect?和?Issuer?关键字还可以具有如表?4-4?所示的子域后缀此外,对于?SubField,?(比如:?SubjectOU
或?IssuerL)。表 4-4? 子域后缀子域后缀C?O?OU?CN?L?S?T?GN?I?起源国家。?公司或组织名称。?组织
单元。?用户的常规名称。?局部。?州(或省)。?个人或公司的标题。?给定名称。?初始。说明?当文件?cervbs.inc(VBSc
ript?使用)或?cerjavas.inc(Jscript?使用)通过使用#include?包含在?ASP?中时,下面两个标志可
以使用:(1)ceCertPresent?指明客户证书是否存在,其值为?TRUE?或?FALSE。(2)ceUnrecongniz
edIssure?指明在该链表中的最后的证书的发行者是否未知,其值为?TRUE?或?FALSE。?4.3?Response 对象的
应用?4.3.1 Response?对象简介?Response 对象用来访问所创建的并返回客户端的响应。可以使用? Respons
e? 对象控制发送给用户的信息,包括直接发送信息给浏览器、重定向浏览器到另一个? URL? 或设置? cookie? 的值。Res
ponse? 对象为脚本提供了标识服务器和性能的? HTTP? 变量,发送给浏览器的信息内容和任何将在?cookie?中存储的信息
。Response?对象还提供了一系列用于创建输出页的方法,如前面多次用到的?Response.Write 方法。?1.Respo
nse?对象的集合?Response 对象只有一个集合——Cookies,该集合设置希望放置在客户系统上的?Cookie 的值,它
对应于?Request.Cookies?集合。?Response 对象的?Cookies?集合用于在当前响应中,将 Cookies
?值发送到客户端,该集合访问方式为只写。160?2.Response?对象的属性?Response? 对象提供一系列的属性,通常这
些属性由服务器设置,不需要设置它们。在某些情况下,可以读取或修改这些属性,使响应能够适应请求。Response? 对象的常用属性如
下所示。(1)Buuffer?指明由一个? ASP? 页所创建的输出是否一直存放在? IIS? 缓冲区,直到当前页面的所有服务器脚
本处理完毕或?Flush、End 方法被调用。使用格式如下:?Response.Buuffer=True?|?False?当缓冲页
输出时,只有当前页的所有服务器脚本处理完毕或者调用了? Flush? 或? End? 方法后,服务器才将响应发送给客户端浏览器,服
务器将输出发送给客户端浏览器后就不能再设置? Buffer? 属性。Buuffer?属性设置必须在任何输出(包括?HTTP?报送信
息)送住?IIS?之前。因此,在.asp?文件中,这个设置应该在<%@LANGUAGE=…%>语句后面的第一行。在?ASP? 3.
0?中,Buuffer?缺省设置缓冲为开(True),而在早期版本中缺省为关(False)。(2)Charset=”value”?
在由服务器为每个响应创建的 HTTP?Content-Type 报头中附上所用的字符集名称,格式如下:?Response.Char
set="value"?例如:?Response.Charset="gb2312"?设置字符集为?gb2312。(3)? Cont
entType?指明响应的 HTTP?内容类型,内容类型告诉浏览器所期望内容的类型。使用格式如下:?Response.Conten
tType="MIME-type"?标准的?MIME?类型有?text/html? 、image/GIF、image/JPEG?和
?text/plain 等。假如缺省该值,表示使用?MIME?类型?text/html。?Response.ContentType
和 Response.Charset 应用比较少,通常是直接在头中的?标签中设置?ContentType
和?Charset?的内容。例如:? html??charset=gb2312">?(4)Expires?指明页面有效的以分钟计算的时间长度,假如用户请求其有效期满之前
的相同页面,将直接读取显示缓冲中的内容,这个有效期间过后,页面将不再保留在用户或代理服务器? "的缓冲中。使用格式如下:?Resp
onse.Expires=value?Expires? 属性指定了在浏览器上缓冲存储的页,距过期还有多少时间。如果用户在某个页过期
之前又回到此页,就会显示缓冲区中的页面。例如:?Response.expires=0? Expire
s 属性是一个较实用的属性,上面的设置可使缓存的页面立即过期。?当用户通过? ASP?的登陆页面进入?Web? 站点后,应该利用该
属性使登陆页面立即过期,以确保安全。161?(5)ExpiresAbsolute?日期/时间型,指明一个页面过期和不再有效时的绝对
日期和时间。使用格式如下:?Response.ExpiresAbsolute=?#date?[time]#?例如:?Respons
e.ExpiresAbsolute=?#2006-2-15?12:00:00#?设置页面失效时间为 2006?年?2 月?15?日
12?点。(6)? IsClientConnected?返回客户是否仍然连接和下载页面的状态标志,返回值为?True 或?Fal
se。在当前的页面已执行完毕之前,假如客户转移到别一个页面,这个标志可用来中止处理(使用?Response.End 方法)。例如:
?<%?if?not?response.IsClientConnected?then?response.End()?end?if?
%>?(7)PICS(“PICS-Label-string”)?创建一个?PICS?报头定义页面内容中的词汇等级,如暴力、性、不良
语言等。(8)Status="Code?message"?设置页面状态描述,指明发回客户的响应的? HTTP? 报头中表明错误或页
面处理是否成功的状态值和信息。例如:?<%?Response.Status?=?"401?Unauthorized"?%>?需要注
意的是,当设置某些属性时,使用的语法可能与通常所使用的有一定的差异。?3.Response?对象的方法?Response? 对象提
供一系列的方法,方便直接处理为返回给客户端而创建的页面内容。常用?Response 方法如下所示。(1)AddHeader?Add
Header?用于创建一个定制的?HTTP?报头,并增加到响应之中,可以利用?request?对象的?ServerVariable
集合来读取报头内容。使用格式如下:?Response.AddHeader?("name","content")?参数?name
和?Content?表示报头名称和对应的值。例如:?Response.AddHeader("cache-control","pri
vate")?AddHeader? 方法不能替换现有的相同名称的报头。一旦已经增加了一个报头就不能被删除。这个方法必须在任何页面内
容被发住客户端前使用。(2)在当前的?HTTP?输出流中写入?Variant?类型的?SafeArray,而不经过任何字符转换。使
用格式如下:?Response.BinaryWrite(safeArray)162?''设置状态为 401?Unauthorized
?BinaryWrite? 方法对于写入非字符串的信息,例如,定制的应用程序请求的二进制数据或组成图像文件的二进制字节,是非常有用
的。(3)End?让?ASP?结束处理页面的脚本,并返回当前已创建的内容,然后放弃页面的任何进一步处理,停止页面编译,并将已经编译
内容输出到浏览器。使用格式如下:?Response.?End?例如:?<%?response.write?time()?respo
nse.end? ''程序执行显示到此结束?response.write?time()?%>?(4)? Clear?当?Respon
se.Buffer?为?True 时,Clear?方法从?IIS?响应缓冲中删除现存的缓冲页面内容。但不删除?HTTP?响应的报头
,可用来放弃部分完成的页面。使用格式如下:?Response.Clear()?该方法主要作用是清除缓冲区中的所有? HTML? 输
出,但该方法只清除响应正文而不清除响应标题。该方法和 End 方法似相反,End 是到此结束返回上面的结果,而?Clear?却是清
除上面的执行结果,然后只返回下面的结果。?<%?response.write?time()?response.clear?resp
onse.write?time()?%>?(5)Flush?发送?IIS?缓冲中所有当前缓冲页给客户端。当?Response.Bu
ffer?为?True?时,可以用来发送较大页面的部分内容给个别的用户。使用格式如下:?Response.Flush()?(6)R
edirect?通过在响应中发送一个“302?Object?Moved”HTTP?报头,指示浏览器根据字符串?url?下载相应地址
的页面。停止当前页面的编译或输出,转到指定的页面。使用格式如下:?Response.Redirect("url")?例如:?Res
ponse.Redirect("http://www.sina.com.cn")?上面语句执行时将停止当前网页的编译或输出,跳转到
新浪网(http://www.sina.com.cn)首页。(7)Write?在当前的 HTTP?响应信息流和?IIS?缓冲区写入
指定的字符,使之成为返回页面的一部分。?Write 方法是?Response 中使用得最多的方法,它将信息直接从服务器端发送到客户
端,达到在客户端动态显示内容的目的。163?''以上程序到此全部被清除?Write 方法使用格式如下:?Response.Write
(“string”)?Response.Write 后面是要发送到客户端所显示的信息,可以用括号包含,也可以直接书写(注意和?Re
sponse.Write 之间有空格)。如果?string 为字符串信息或者?HTML 代码相关,用引号包含;而?ASP?本身的函
数或变量则不需要,直接用即可。并且无论字符串信息、HTML?代码、函数还是变量之间进行连接都是采用&号(针对 vbscript)。
例如:?<%?for?i=1?to?6?Response.Write(""&"ASP?教程"&"
")?next?%>?上面代码将在页面中依次使用标题格式?h1~h6?输出文字“ASP?教程” 如图?4-9?左图所示,,通过?R
esponse.Write 方法生成的源代码如图?4-9?右图所示。图 4-9 动态标题文字同样,其它的?ASP?内容也可以通过?
Response.Write?方法输送到客户端,例如,动态输出的表格、数据库记录等等。?Response.Write 有一种省略用
法,就是之前常用的<%=…%>方式,这种方式实际上相当于如下的脚本段。?<%?Response.Write(…)?%>?4.3.2
? 客户端脚本对事件的响应在?ASP?的动态交互中,经常有一些工作会要求在客户端进行,例如,对数据的校验,检164?查用户名和密码
是否符合要求等。这些工作如果提交到服务器端来进行,则会耗费大量网络资源,给服务器造成很大的负担。此外,还有些工作只能在客户端完成,
因此,这就需要编写能够在客户端进行工作的脚本。?1.处理表单内对象的事件客户端脚本通常写在???

输入验证


? validform">?请输入一个? 1? 到? 10? 之间的数字:? t"?>? "?value="提交">????上面的案例运行效果如图?4-10?所示。图 4-10
输入验证在浏览网页时,当按钮被单击后,将通过下面的代码来响应鼠标单击(onClick)事件。? n1"?type="button"?onClick="button1_onclick"?value="提交">?由于设置了? on
Click="button1_onclick",因此,按钮单击事件发生时,将调用客户端脚本过程?button1_onclick 进
行处理。在? button1_onclick?过程中,文本框? Text1? 的? Value? 属性被用于检查输入值。要使用文本
框的? Value? 属性,在代码中必须引用文本框的名称。每次引用文本框时都应写出全称,即?Document.ValidForm.
Text1。但是,当多次引用窗体控件时,这样比较繁琐。因此,过程中首先声明一个变量 theform,然后使用? Set? 语句将表
单? Document.ValidForm? 赋给变量? TheForm,这样就能使用? TheForm.Text1? 引用文本框
。常规的赋值语句(例如? Dim)对表单对象无效,必须使用? Set? 来保持对对象的引用。在程序中,还用到了?msgbox?函数
来显示消息,该函数用于在客户端弹出一 个 消 息对 话框 , 将? msgbox? 函 数 中 的 信 息 显示 出 来 。下 面
这一 句 即 对 应于 图? 4-10? 中 的 消 息 对 话框 。?msgbox?"请输入一个? 1? 到? 10? 之间的
数字。"?此外,还可以在窗体中提供内部代码以响应窗体中对象的事件。例如,以下示例在窗体166?中嵌入脚本代码以响应窗体中按钮的单击
事件:? "?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">? l?xmlns="http://www.w3.org/1999/xhtml">?? Content-Type"?content="text/html??charset=utf-8"?/>?测试按钮事件<br> ???? name="button1"?value="单击">?? "button1"?event="onclick"?language="vbscript">?msgbox?"按钮被单击!"? script>????大多数脚本代码通常都是在? sub? 或? function? 过
程中,仅在其他代码要调用它时执行。然而,也可以将? vbscript? 代码放在过程之外、script? 块之中。这类代码仅在?
html? 页面加载时执行一次,这样就可以在加载? web? 页面时初始化数据或动态地改变页面的外观。?2.验证后将数据传递到服务
器前面的“输入验证”案例使用的是普通按钮控件,不能将表单内容提交到服务器。如果使用? Submit? 按钮,所有数据都会被立即传送
到服务器,示例将不会看到数据来进行检查。避免使用? Submit? 按钮则可以检查数据,但不能向服务器提交数据。如果需要提交数据则
需要再添加一段代码,如下所示:??Sub?Button1_OnClick?
Dim?TheForm?Set?TheForm?=?Document.ValidForm?If?IsNumeric(TheForm
.Text1.Value)?Then?If?TheForm.Text1.Value? lue?>?10?Then?MsgBox?"请输入一个? 1? 到? 10? 之间的数字。"?Else?MsgBox?"谢谢。"?
TheForm.Submit?End?If?Else?MsgBox?"请输入一个数字。"167?''? 数据输入正确,传递到服务器。
?End?If?End?Sub??在数据输入正确时,程序通过语句“TheForm.Submit”来调用表单对象的
? Submit? 方法,将数据传递到服务器。除非在数据被传递到服务器之前判断其正误,否则服务器将处理数据,而不论其正确与否。注意
,代码中的?ValidForm?需要用实际的表单名称替换,Text1?是表单中输入文本框的名称。?4.4?Cookie?在网站中的
应用?4.4.1 Cookie?简介?Cookie 是?Web?服务器保存在客户端的一段数据文本。?Cookie 允许一个?Web
?站点在客户端的计算机上保存信息并在以后再取回它。可以用?Cookie 临时保存用户的账号和口令,ASP?可以随时读取,验证用户的
合法性;也可以将用户的浏览状态保存在?Cookie?中,下次用户再访问网页时,由?ASP?向浏览器显示个性化页面。从本质上来说,C
ookie? 其实是一个标签,经常可能听到的中文翻译:小舔饼。当用户访问一个需要存储? Cookie? 的? Web? 站点时,网
站会在用户的硬盘上留下一个标记,下一次用户访问同一个站点时,站点的页面会查找这个标记,并执行相应内容。每个? Web? 站点都有自
己不同的标记,标记的内容可以随时读取,但只能由该站点的页面完成。通常,服务器端会为每一个访问者产生一个唯一的?ID,然后以?Coo
kie 文件的形式保存在每个用户的机器上。如果使用? IE? 浏览器访问? Web,将会看到所有保存在用户硬盘上的?Cookie。
每个站点的?Cookie 与其他所有站点的?Cookie 存在同一文件夹中的不同文件内。通常存放的地方是 C:\windows\C
ookies 目录下, Windows2000 以上版本系统中则是 C:\Documents?在and? Settings\用户名
\Cookies?目录下。有一点需要注意,Cookie 的个数并非可以是无限多个,在客户端的?Cooike 最多可以保存?300?
个,其中,对于同一服务器端所保存的?Cookie 不能超过?20?个。一个? Cookie? 就是一个唯一标识客户的标记,Cook
ie? 可以包含在一个对话期或几个对话期之间某个? Web? 站点的所有页面共享的信息,使用? Cookie? 还可以在页面之间交
换信息。这项功能经常被使用在要求认证客户密码以及电子公告板、WEB? 聊天室等? ASP? 程序中。通过? Cookie,设计者能
实现许多有意义的功能。例如:可以在站点上放置一个调查问答表,询问访问者最喜欢的颜色和字体,然后根据这些定制用户的? web? 界面
。并且,还可以保存访问者的登录密码,这样,当访问者再次访问这个站点时,不用再输入密码进行登录。当然,Cookie 也有一些不足。首
先,由于利用?Cookie?的功能可以编程实现一些不良企图,所以大多数的浏览器中都有安全设定,其中可以设置是否允许或者接受?Coo
kie(如,在?IE?浏览器中,通过对“工具”→“Internet? 选项...”→“安全”→“自定义级别”→“Cookie?的使
用”项进行设置,就可以对?Cookies?进行限制),因此这就不能保证随时能使用?Cookie。此外,用户可能有意或者无意地删除
Cookie,当用户重新格式化硬盘、安装系统后,原来保存的 cookie168?将全部丢失。最后一点,有一些较老的浏览器并不能支持
?cookie。?4.4.2? 创建?Cookie?Cookie 的创建可以通过?Response 对象的?Cookies?集合来
进行,创建?cookie 的基本语法如下:?Response.Cookies(cookie)[(key)|.attribute]=
value?其中,参数?cookie 是指定?cookie 的名称。而如果指定了? key,则表示该?cookie 是一个集合,它
包含多个内容。对于?attribute,可以使用属性?HasKeys?来确定一个?Cookie?是否是一个 HasKeys?的
值为?True 或?False。集合,?可以通过下面的语句来判断一个?cookie 是否为一个集合,?<%=Request.Coo
kies("cookiename").HasKeys%>?如果显示值为?true 表示?Cookie 是集合,如果是?false
则不是集合。参数?Attribute? 指定? cookie? 自身的有关信息。Attribute? 参数可以是下列之一。?1.D
omain?若? Domain(域)被指定,则? cookie? 将被发送到对该域的请求中去。域属性表明? cookie?由哪个网
站产生或者读取,默认情况下,cookie 的域属性设置为产生它的网站,但也可以根据需要改变它。例如:?Response.Cooki
es("CookieName").Domain?=?"www.mydomain.com"?上面的代码将改变名为?CookieNam
e 的?Cookie 的域为?www.mydomain.com。?2.Path?Path? 表示路径,该属性可以实现更多的安全要求
,通过设置网站上精确的路径,就能限制?cookie 的使用范围。如果未设置该属性,则使用应用程序的路径。例如:?Response.
Cookies("CookieName").Path?=?"/aspteach"?上面语句将设置名为?CookieName 的?C
ookie 路径为网站根目录下的?aspteach 目录中。?3.Expires?Expires? 用于指定? cookie? 的
过期日期。为了在会话结束后将? Cookie? 存储在客户端磁盘上,或在许多时候,希望能更长时间地在访问者的计算机上保存? Coo
kie。这可以通过设置?Expires?来完成。若此项属性的设置未超过当前日期,则在任务结束后? cookie? 将到期。例如:?
Response.Cookies("CookieName").Expires=#2006-3-10#?上面的代码,将设置名为?Co
okieName 的?cookie 的使用到期时间为?2006 年?3?月?10 日。?Response.Cookies("CookieName").Expires=Date+365?上面的代码,将设定?cookie 的过期时间为当前时间后?30?天。下面来看几个创建?Cookies?的语句。?Response.Cookies("aspcookie")="asp"169?上面的代码将会在用户的计算机中创建一个?cookie,名为?aspcookie,值为?asp。?Response.Cookies("UserName")=Request.Form("UserName")?执行下面的代码将会在访问者的计算机中创建一个?cookie,名为?UserName,值为提交的表单中?UserName 变量的值。当对一个?Cookie 通过子关键字赋予多个值时,就形成了?Cookie 集合,例如:?Response.Cookies("student")("name")="张凯"?Response.Cookies("student")("zkzh")="20050101235"?Response.Cookies("student")("sfzh")="11010119840109123"?4.4.3? 读取?Cookie? Cookies 用于获取客户端 Cookie?可以通过 Request 对象的 Cookies 集合来获取 Cookie 信息。?的集合,使用格式如下:?Request.Cookies(Cookiename[(key).Attribute])?其中,参数?Cookiename?指明返回那一个?Cookie,Key?用于从?Cookie?集合中返回具有某一关键字的?Cookie 值。对于?Attribute,可以使用属性?HasKeys?来确定一个?Cookie 是否是一个集合,HasKeys?的值为?True 或?False。例如:?user=Request.Cookies("username")?上面语句用于读取名为?username 的?Cookie 的值,并赋给变量?user。如果客户端浏览器发送了两个同名的? cookie,那么? Request.Cookie? 将返回其中路径结构较深的一个。例如,如果有两个同名的?cookie,但其中一个的路径属性为? /www/? 而另一个为?/www/aspteach/,客户端浏览器会将两个? cookie? 都发送到? /www/? aspteach/? 目录中,因此,?Request.Cookie? 将只能返回第二个?cookie。在读取?Cookie 集合时,可以通过?For?each 语句来循环获取集合里的?Cookie。下面是一个浏览?Cookie 集合的例子。?<%@LANGUAGE="VBSCRIPT"?CODEPAGE="65001"%>?????浏览?Cookie???<%?''循环浏览?Cookies?集合?For?each?cookie?in?Request.Cookies170?''检查所取得的?Cookie 是否具有多个键值?if?Not?Request.cookies(cookie).HasKeys?''如果只有一个键值,则输出?Response.write?cookie?&?"="?&?Request.Cookies(cookie)?Response.write?("
")?Else?''如果有多个键值,则循环浏览该?Cookie 集合,并以蓝色文字输出?Cookie?for?each?key?in?Request.Cookies(cookie)?Response.write?("")?Response.write?cookie?&?".("&key&")"?&?"="?&?Request.Cookies(cookie)(key)?Response.write?("
")?Next?end?if?next?%>??then?171?
献花(0)
+1
(本文系大高老师首藏)