Request对象则是ASP的耳朵,它可以获得客户端传递来的消息。
Request对象用于获得信息,这个信息包括了客户端的认证、客户提交的数据以及某些服务器的配置信息,因此我们把它称为ASP的耳朵。很有趣的,我们知道,“耳朵”是不会“说话”的,因此对于Request对象来说,他的属性和方法都非常少,但是却有ClientCertificate、Cookies、Form、QueryString以及ServerVariables这样五个集合。
首先我们来介绍Request对象的BinaryRead方法,Request对象的BinaryRead方法用于以二进制方式读取客户端的请求,比如处理通过客户端上传文件时,通常使用这个方法来读取客户端所上传的文件数据,他的使用方法是。
Request.BinaryRead(count)
这里的count变量是指定读取多少个字节的二进制信息,整个方法将返回一个Variant数组。
这里对于BinaryRead方法,需要说明的是,他和Request.Form集合是不能同时使用的,在使用了Request.BinaryRead方法后,就不能在使用Request.Form集合来获取客户端填写的表单信息,反之,通过Request.Form集合获取了客户端填写的表单信息后就不能再通过Request.BinaryRead方法来读取二进制信息,我想,这大概是因为在使用了Form集合后,IIS就将二进制的请求信息进行了分析覆盖操作。
下面再来看Request.TotalBytes属性,通过这个属性可以获得客户端发出的请求的整个字节数量,这个属性同Request.BinaryRead方法一样很少用到,并且他们通常搭配使用,用以获得用户的二进制请求。
下面我们来讲解Request对象的最常用的部分,即他的五个集合,如下:
l ClientCertificate客户证书的所有字段或条目的数值集合
l Cookies用户系统发出的所有cookie的值的集合
l Form用户提交表单的集合
l QueryString用户请求的URL后面附加的数据
l ServerVariables 随同客户端请求发出的HTTP报头值,以及Web服务器的几种环境变量的值的集合
首先我们来看Form集合以及QueryString集合,这两个集合是类似的。
Form集合和QueryString集合是客户端向服务器段发送信息的最常用手段,Form集合一般是通过表单形式提交的,它可以用于用户注册、登录、发表等等多种场合,使用FORM集合获取的提交数据,要求设计者在显示表单的HTML代码中,指定form标签的method属性为POST,即通过POST方式请求我们的ASP页面,这时客户端所填写的信息将以名称=值这样的方式附加在HTTP请求头之后,在ASP端我们就可以通过Form集合来获取。
而QueryString集合我们又称为地址栏变量集合,如你所经常见到的,比如阅读某篇帖子,帖子的URL就可能是http://www.forum.com/post.ASP?postID=12354&forumID=5,这里你可以看到,这个地址在定位了post.ASP这个文件后,有一个问好,而后以名称=值这样的方式附加了一些信息,各个信息对之间以&符号分开,这样的信息提交就可以使用Request.QueryString集合来获取。同时,QueryString也可以通过在设计表单时,将form标签的METHOD属性设为GET方式来提交,这时在提交表单时,浏览器将自动把当页面中提交的文本域以QueryString的形式附加在页面的请求地址中。
讲了这么多,我们先来看一个实例,这个实例由两个页面组成,name.html是一个不含ASP代码的页面,他的作用是显示一个表单让用户填写他的名字,name.ASP是我们通过form集合获取用户所填写的名字的页面,两个页面的代码如下:
Name.html:
<form id="frmName" name="frmName" method="post" action="name.ASP">
您的姓名:<input type="text" name="myname" id="myname" />
<input type="submit" name="button" id="button" value="提交" />
</form>
Name.ASP:
<%
Dim sName
sName = Request.Form("myname")
Response.Write("您好," & sName)
%>
在name.html页面中,我们指定了form的method为post,即以post方式提交,action为name.ASP,即提交到name.ASP页面。文本域的name属性为myname,而后在name.ASP页面中就可以以Request.Form("myname")来获得用户所填写的其姓名了。
你也可以试着自己将这段代码改为使用QueryString来获取信息的代码,来比较他们提交信息时的不同。
下面我们再来看Cookies集合,在上一节的Response对象中,我们讲解了如何向客户端发送cookies来存储信息,这里我们就来讲解如何从客户端读取cookies信息。
当浏览器向服务器请求一个页面时,会自动的将当前站点存储在客户端的的cookies信息附加在HTTP头中,因此在服务器端可以获得这个数据,他的获得方式和发送方式类似,是通过如下代码获取值的:
Request.Cookies(cookie)[(key)|.attribute]
例如,Request.Cookies("ASPversion"),将可以获取名为ASPversion的cookies的值,Request.Cookies("ASPversion")("last"),将可以获取名为ASPversion,关键字为last的cookies的值,这里需要说明的是,在使用Response对象设定cookies时,如果不指定cookies的超时时间,那么他默认仅在当前的浏览器进程有效,当关闭浏览器进城后,cookies也就不存在了。
ServerVariables集合是一个比较有趣的集合,使用这个集合,你不仅可以获得客户端向服务器端发送请求的一些请求信息,还可以获得服务器端的一些信息。他的使用方法是:
Request.ServerVariables(VAR_NAME)
这里的VAR_NAME即为需要获得的ServerVariables的名称,例如,获得当前页面的请求方式是POST还是GET,则可以用下面的代码。
<%
Dim sRM 'stand for RequestMethod
sRM = Request.ServerVariables("REQUEST_METHOD") '获得ServerVariables集合中
'REQUEST_METHOD的值
Response.Write("当前请求方式:" & sRM)
%>
部分常用的VAR_NAME列表如表8.1所示。
表8.1
环境变量名称 |
环境变量作用 |
ALL_HTTP |
客户端发送的所有 HTTP 标题文件。 |
CONTENT_LENGTH |
客户端发出内容的长度。 |
CONTENT_TYPE |
内容的数据类型。如:“text/html”。同附加信息 的查询一起使用,如 HTTP 查询 GET、POST 和 PUT。 |
LOCAL_ADDR |
返回接受请求的服务器地址。如果在绑定多 个 IP 地址的多宿主机器上查找请求所使用的地址 时,这条变量非常重要。 |
LOGON_USER |
用户登录 Windows NT 的帐号。 |
QUERY_STRING |
查询 HTTP 请求中问号(?)后的信息。 |
REMOTE_ADDR |
发出请求的远程主机 (client) 的 IP 地址。 |
REMOTE_HOST |
发出请求的主机 (client) 名称。如果服务器无此 信息,它将设置为空的 MOTE_ADDR 变量。 |
REQUEST_METHOD |
该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST等 等。 |
SERVER_NAME |
出现在自引用 URL 中的服务器主机名、DNS 化名 或 IP 地址。 |
SERVER_PORT |
发送请求的端口号。 |
最后简单说一下ClientCertificate集合,这个集合非常不常用,在我学习使用ASP的5年中,我甚至根本没有使用过。这个集合用户获取客户端在访问网站时的证书信息。
在某些对于安全性要求较高的场合,需要用户使用身份证明的数字证书来访问网站,例如阿里巴巴公司的支付宝产品,作为支付工具,它可以首先给客户端颁发一个证书,而后在涉及帐务变动时,他首先获得客户端的证书,而后判断证书的内容,以鉴别用户的身份,ClientCertificate集合则可以用来进行这个操作。
在本节的小案例中,我们将制作一个能够记住访问者名字的页面,在这个小案例中,你将学到如何使用Request对象的Cookies、Form以及ServerVariables集合的值,还可以学到如何使用Response对象来发送cookies。
首先我们来对整个程序的流程进行一下设计。如图8.5所示。
图8.5
首先来看全部的程序,如下。
<%
Dim sUserName
sUserName = Trim(Request.Cookies("name")) '首先获取cookies
If sUserName = "" Then '如果为空,则要求用户输入
If UCase(Trim(Request.ServerVariables("REQUEST_METHOD")))="POST" Then '如果已经提交表单
sUserName = Trim(Request.Form("name"))
Response.Cookies("name") = sUserName
Response.Cookies("name").Expires = DateAdd("d",1,Now)
Response.Write("我已经记住您的姓名了!")
Else '否则没有提交,显示表单
Response.Write("<form method=""post"" action="""">")
Response.Write("请告诉我您的姓名:<input name=""name"" type=""text"" />")
Response.Write("<input type=""submit"" value=""提交"" />")
Response.Write("</form>")
End If
Else
Response.Write("您好," & sUserName)
End If
%>
程序首先获得了名为name的Cookies变量的值,并调用Trim()函数将其两端的空格去掉,而后判断是否为空,如果为空,则说明此时用户的姓名没有存储,此时则应当进入让用户输入姓名并存储的部分。否则就输出cookies中保存的用户的姓名。
这里我们再详细讲解下让用户输入姓名并存储的部分,在这个过程中首先获取ServerVariables变量REQUEST_METHOD的值,这个值标识了当前页面的请求方式,如果是POST方式,说明现在正在向此页面提交表单,这时就获取表单的值,并且将其使用Response.Cookie集合来向客户端输出Cookies,否则就使用Response.Write方法来输出显示供用户台南写姓名的HTML代码。
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛