您现在的位置: 365建站网 > 365文章 > 8.2 获取信息用的Request对象

8.2 获取信息用的Request对象

文章来源:365jz.com     点击数:865    更新时间:2009-09-12 17:12   参与评论

Request对象则是ASP的耳朵,它可以获得客户端传递来的消息。

8.3.3 Request对象简介

Request对象用于获得信息,这个信息包括了客户端的认证、客户提交的数据以及某些服务器的配置信息,因此我们把它称为ASP的耳朵。很有趣的,我们知道,“耳朵”是不会“说话”的,因此对于Request对象来说,他的属性和方法都非常少,但是却有ClientCertificate、Cookies、Form、QueryString以及ServerVariables这样五个集合。

8.2.2 Request对象的方法、属性和集合

首先我们来介绍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集合则可以用来进行这个操作。

8.3.3 小案例—用Cookies记住访问者的名字

在本节的小案例中,我们将制作一个能够记住访问者名字的页面,在这个小案例中,你将学到如何使用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代码。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (865人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号