通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>asp专区>>正文 新版上线![旧版]
注:打开慢时请稍等

ASP 3.0高级编程(四)

http://www.iyit.net  日期:2006-5-25 12:35:16  来源:网络转载   点击:
参加讨论使用ServerVariables集合
    当讨论Request对象内容时,要研究的集合之一就是ServerVariables集合。这个集合包含了两种值的结合体,一种是随同页面请求从客户端发送到服务器的HTTP报头中的值,另外一种是由服务器在接收到请求时本身所提供的值。为显示
ServerVariables集合中值的使用方式,在Request Object页面(Show_request.asp)中,点击“ServerVariables
Examples”链接,打开另外一个页面,如下图所示:

    下图所示窗口显示的是ServerVariables集合中一些非常有用的值的一个子集。


“自引用”页面
    在ServerVariables集合中返回的值包含Web服务器的详细信息和当前页面的路径信息。在任何地方创建一个页面都可使用这些信息。例如创建一个“自引用”页面,此页面能够再次调用自身完成另一项任务,我们可以用以下代码:
    <FORM ACTION=”<% = Request.ServerVariables(“PATH_INFO”) %>” METHOD=”POST”>
    同样的效果可以用HTTP的“SCRIPT_NAME”值获得:
    <FORM ACTION=”<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD=”POST”>
    使用<A>元素打开一个不同页,可以使用:
    ...
    <%
    strFullPath = Request.ServerVariables(“PATH_INFO”)
    ‘Strip off the file name
    strPathOnly = Left(strFullPath, InStrRev(strFullPath, “/”))
    strNextPage = strPathOnly & “pages/next_page.asp”
    %>
    ...
    <A HREF=”<% = strNextPage %>”>Next Page</A>
    ...
    即使原始页面的名称或位置发生变化,这些实例都能正常工作,因为使用了当前页面的路径信息(当然,第二个例子在分离的目标页的名称发生变化时运行会失败)。
    换句话说,如果为搜索引擎的子会话自动建立URL,可以收集ServerVariable的一些值:
    strFullURL = http:// & Request.ServerVariables(“LOCAL_ADDR”) _
                & “:” & Request.ServerVariables(“SERVER_PORT”) _
                & Request.ServerVariables(“PATH_INFO”)
    这将创建一个完整的URL包括端口号(这种情况下,不是标准值80)。例如,结果可能是:
    http://194.74.60.254:1768/thispath/thispage.asp

检测浏览器的版本
    ServerVariables集合中,另外一个有用的值是用户浏览器的用户代理字符串。在“Detecting the Browser Type”页
面(browsertype.asp),使用ServerVariables集合中的“HTTP_USER_AGENT”值来获得用户代理字符串,一些脚本用来解析该信息并寻找生产厂家名称和浏览器版本。
    <%
    strUA = Request.ServerVariables(“HTTP_USER_AGENT”)
    Response.Write “The User Agent string is <B>” & strUA & “</B><P>”
    If InStr(strUA, “MSIE”) Then
        Response.Write “To upgrade your browser go to “_
                    & “<A HREF=” & Chr(34) & http://www.microsoft.com/ie/”_
                    & Chr(34) & “>http://www.microsoft.com/ie/<A></P>”
        intVersion = Cint(Mid(strUA, InStr(strUA, “MSIE”) + 5, 1))
        If intVersion >=4 Then
            Response.Write “You can use Microsoft Dynamic HTML”
        End If
    Else
        If InStr(strUA, “Mozilla”) Then
            If InStr(strUA, “compatible;”) = 0 Then
                Response.Write “Your browser is probably Navigator. You can “_
                        & “download the latest version of Navigator from “_
                        & “<A HREF=” & Chr(34) & http://home.netscape.com/”_
                        & “download/”& Chr(34) & “>http://home.netscape.com”_
                        & “/download/</A></P>”
                intVersion = Cint(Mid(strUA, InStr(strUA, “/”) +1, 1))
                If intVersion >= 4 Then
                    Response.Write “You can probably use Netscape Dynamic HTML”
                End If
            Else
                strVersion = Mid(strUA, InStr(strUA, “compatible;”) + 12)
                strProduct = Left(strVersion, InStr(strVersion, “ “))
                Response.Write “Your browser is Navigator-compatible. You can”_
                & “search for the manufacturer using a search engine, such as”_
                & “<A HREF=” & Chr(34) _
                & “http://www.altavista.digital.com/cgi-bin/query?q=”_
                & strProduct _
                & Chr(34) & “>http://www.altavista.com/</A></P>”
            End If
        End If
    End If
    %>
    对IE 5.0和Navigator 4.61的搜索结果分别不同,对于其他厂家的浏览器,可以得到一个链接在Alta Vista Web站点自动开始搜索厂家的名称。
    注意,Netscape在用户代理字符串中不提供厂家的名称,因而无法绝对保证一个浏览器一定是Navigator。

检测浏览器的语言
    ServerVariables集合中另外一个有用的值是“HTTP_ACCEPT_LANGUAGE”,它包含了一个当浏览器安装时指定的,或硬编码进用户的地区版本的语言代码。语言代码的例子有en-us(英国、美国)、de-at(德国、澳大利亚)和es-pe(西班牙、秘鲁)。
    语言代码可以是一般的且省略方言标识:例如,在我们的站点Wrox者,大批浏览者都是将en(英语)作为语言代码。
    因此,可以检测语言代码并自动装载一个合适的特定地区或指定语言版本的页面。
    StrLocale = Lcase(Left(Request.ServerVariables(“HTTP_ACCEPT_LANGUAGE”),2))
    Select Case strLocale
        Case “en”: Response.Redirect “http://uk_site.co.uk/”
        Case “de”: Response.Redirect “http://de_site.co.de/”
        Case “fr”: Response.Redirect “http://fr_site.co.fr/”
        ‘... etc
        Case Else: Response.Redirect “http://us_sitel.com/”
    End Select
    或者根据特定的方言,重定向页面:
    strLocale = Lcase(Request.ServerVariables(“HTTP_ACCEPT_LANGUAGE”))
    Select Case strLocale
        Case “en-gb”: Response.Redirect “http://uk_site.co.uk/”
        Case “en-us”: Response.Redirect “http://us_site.com/”
        Case “es-pe”: Response.Redirect “http://es_site2.co.pe/”
        ‘...
        Case Else: Response.Redirect “http://us_site1.com/”
    End Select

其他有用的ServerVariables集合的值
    可以访问和使用ServerVariables集合中的任何一成员,控制ASP页面响应一个请求的方式。可以检查一个浏览者访问站点时使用的是否是缺省端口80或还是另一个。在这个例子里,寻找通过端口443的访问——这个端口提供的是安全套接字层(Secure Socket Layer,SSI)访问(和其他的协议),且将它们重定向到一个相应的页面。
    If Request.ServerVariables(“SERVER_PORT”) = “443”) Then
        Response.Redirect “/securesite/default.asp”   ‘Secure user
    Else
        Response.Redirect “/normalsite/default.asp”   ‘Non-secure user
    End If
    假如要求浏览者注册且由服务器验证(而不是允许他们在Web服务器的IUSER帐号下匿名访问,这个问题将在后面章节中详细讨论),可以查询用户名称,来判定正在与我们打交道的用户是谁,是否装载页面给该用户。例如,下面的这个代码将只向名为Administrator的用户显示管理链接。
    ...
    <A HREF=”dispcnfg.asp”>Change Display Configuration</A><BR>
    <A HREF=”dispcolr.asp”>Change Display Colors</A><BR>
    <A HREF=”keyboard.asp”>Change Keyboard Configuration</A><BR>
    <%
    If Request.ServerVariables(“AUTH_USER”) _
      = Ucase(Request.ServerVariables(“SERVER_NAME”)) & “\Administrator” Then
    %>
      <A HREF=”allusers.asp”>Administer All Users</A><BR>
      <A HREF=”usrlogon.asp”>Administer Logon Information</A>
    <%
    End If
    %>
    ...
    注意ASP不填写ServerVariables集合直到你访问其中的一个成员。首次访问该集合的一个成员将使IIS得到它的全部,应只在需要时才使用ServerVariables集合。

其他Request和Response技巧
    现在,来看一下几个使用Request和Response对象的有用技巧,包括:
    · 连接、缓冲和页面重定向的管理。
    · HTTP报头、缓存与“到期”页面的操作。
    · 利用客户证书。
    · 创建定制的日志文件消息。

1.    连接、缓冲和页面重定向的管理
ASP的一个很有用的特点就是使用户能够从一个ASP网页转向到另一个网页(ASP或HTML),或另一个源文件(例如一个ZIP文件或文本文件)。这对用户来说是透明的,实际上是浏览器做这个工作。当使用Response.Redirect方法来载入一个新的网页时,实际上是发送回一个特殊的HTTP报头到客户。此报头为:
HTTP/1.1 302 Object Moved
Location /newpath/newpage.asp
浏览器读到此报头信息,并按Location值的指示载入页面。这在功能上与在Web页中使用客户端HTML<META>标记相同,例如:
<META HTTP-EQUIV=”REFRESH” CONTENT=”0;URL=/newpath/newpage.asp”>
这带来的一个问题是,服务器与用户之间的代理服务器可能会提供它自己的包含与新页面的链接的消息,而不是直接载入新页面。而且浏览器根据厂商和版本可能做同样的工作。这就去除了假定的透明,而且对用户来说一直收到的是错误信
息,则对你的站点的访问变得比较麻烦。在发送诸如文本或HTML等任何页面内容后,我们就不能再使用Redirect方法。然而,一个看起来能够限制“代理服务器影响”的方法是,先确定没有输出(包括HTTP报头)被发送到客户。在ASP 2.0中,必须打开缓冲,然后使用Clear方法来清空缓冲区:
Response.Buffer = True
‘Some condition to select the appropriate page:
If Request.ServerVariables(“SERVER_PORT”) = 1856 Then
     StrNewPage = “/newpath/this_page.asp”
Else
     StrNewPage = “/newpath/the_other_page.asp”
End If
Response.Clear
Response.Redirect strNewPage
在ASP 3.0中,缓冲缺省为打开,所以第一行可被忽略,但它是无害的,而且能确保我们的网页即使在ASP 2.0环境中也仍然能工作。
与其使用这种类型的HTTP报头重定向,不如使用ASP 3.0的一个新特性,它允许我们通过Server对象的Transfer方法转换为执行另一个网页,我们将在第4章进一步研究这个问题。
1)  ASP页面缓冲区
正如已看到过的,IIS 5.0中ASP 3.0页面缓冲是缺省打开的,在早期的版本中是缺省关闭的。微软告诉我们缓冲在IIS 5.0中提供了更有效的网页传送,这就是缓冲缺省状态被改变的原因。在大部分情况下,这对我们没有影响。但是,假如有一个非常大的网页,或一个用ASP或别的服务器端代码和组件花费一定时间创建的网页,当其各部分完成时,我们能够分批刷新它们到客户:
...
... Code to create first part of the page
...
Response.Flush
...
... Code to create next part of page
...
Response.Flush
...
有时可能希望在页面结束之前的某些点上停止代码的执行,可以通过调用End方法去刷新所有的当前内容到客户并中止任何进一步的处理过程。
...
... Code to create first part of the page
If strUserName = “” Then Response.Clear
...
... Code to create a new version of this part of the page
...
这里有两上演示缓冲和重定向的实例网页,可以从“Response Object”主页面(sow_response.asp)下载它们。第一个Response.Redirect例子网页命名为redirect.asp,它在缓冲的页面中定入一些内容,清除缓冲区,并重定向到另一个网页:
    For intLoop = 1 To 1000000
        Response.Write “.”
Next
Response.Clear
Response.Redirect “show_redirect.asp”
Response.End
目标页show_response.asp,做同样的工作,但重定向则是回到“Response Object”主页。因为这些网页都在缓冲区内,而且所有的输出在重定向之前必须清除,故在浏览器中没有可见的输出。然而,可以通过观察浏览器的状态看到发生的每一次重定向。如下图所示:

在“Response Object”主页中,点击“Response.Flush”链接将打开第二个示例网页usebuffer.asp,它简单地遍历一个
字符串的每一个字符,以一定的延迟将它们刷新到客户,这虽是Web服务器和ASP极低效率的使用方式,但它演示了缓冲的工作方式。

下面是所要求的最小化的ASP代码,注意我们分别把每个字符刷新到浏览器,因为不这样的话它将被存放在缓冲区中,直至网页完成:
strText = “This text has been flushed to the browser using “ & _
        “<B>Response.Flush</B><P>”
For intChar =1 To Len(strText)
    For intWrite = 1 To 100000
    Next
    Response.Write Mid(strText,intChar,1)
    Response.Flush
Next

2)  Response.IsClientConnected属性
IsClientConnected属性在ASP 2.0中已经存在了,但却有些不可靠。在其返回一个准确的结果之前必须发送一些输出到客户。这一问题在ASP 3.0中已被解决。现在这一属性可被自由使用。IsClientConnected是观察用户是否仍连到服务器和正在载入ASP创建的网页的有用方式。如果用户断开连接或停止下载,我们就不用再浪费服务器的资源创建网页,因为缓冲区内容将被IIS丢弃。所以,对那些需要大量时间计算或资源使用较多的网页来说,值得在每一阶段都检查浏览器是否已离线:
...
... Code to create first part of the page
...
If Response.IsClientConnected Then
    Response.Flush
Else
    Response.End
End If
...
... Code to create next part of page...



编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:模似windows XP 左侧的菜单效果(3)
下一篇:ASP 3.0高级编程(二)
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
ASP 3.0高级编程(二) ASP 3.0高级编程(六) Asp Object 之:AddHeader
Asp Object 之:AppendToLog 如何写出优秀的ASP应用 Asp Object 之:BinaryWrite
在ASP程序中访问Access数据库 Asp Object 之:CacheControl ASP+Access的安全隐患及对策
Asp Object 之:Clear ASP中数据库调用中常见错误的现象和解决 Asp Object 之:ContentType
Asp Object 之:End Asp Object 之:ServerVariables Asp Object 之:ExpiresAbsolute
Asp Object 之:Flush Asp Object 之:Form ASP初学者常犯的几个错误
ASP:网上通讯簿1.00 asp,php 和 jsp 比较 之我见 刷一次变一次图的ASP代码
在ASP网站设计中表单验证  一段在asp中加密与解密对应的函数 ASP技术访问WEB数据库 
最新更新 热点排行 推荐新闻
ASP 3.0高级编程(二)
ASP 3.0高级编程(四)
模似windows XP 左侧的菜单效果(3)
ASP 3.0高级编程(六)
Asp Object 之:AddHeader
ASP 3.0高级编程(二)
ASP 3.0高级编程(四)
模似windows XP 左侧的菜单效果(3)
ASP 3.0高级编程(六)
Asp Object 之:AddHeader
Asp Object 之:AppendToLog
如何写出优秀的ASP应用
Asp Object 之:BinaryWrite
在ASP程序中访问Access数据库
Asp Object 之:CacheControl
ASP自动解压RAR文件
在ASP中使用SQL语句之3:LIKE、NOT LIK
ASP中使用SQL语句教程
用ASP制作强大的搜索引擎
WEB打印大全
优秀公益广告作品欣赏(8)
java数据类型转换
Windows XP专业版IIS连接数的更改
新开放QQ免费挂级网站
优秀公益广告作品欣赏(7)
免费在QQ上看在线电影电视听音乐
WEB服务器配置全攻略(三)
QQ珊瑚虫外挂4.0版本发布!
免费把QQ炫铃设为本机QQ的系统提示音
Office2007简体中文版浮出水面 美图抢
ASP中使用SQL语句教程
测试一下喽!
如何在Win20003中更好的玩游戏
QQ收费头像免费使用的方法 
微软将在华推分期付款,充值卡PC 可低价
 AMD处理器AM2测试 风扇竟运行7分钟
exeplorer.exe错误的问题的总结、解决
ASP.NET 2.0 中的异步页功能应用
硬盘坏道修复及数据恢复宝典
免费登录搜索引擎入口大全
搜索引擎注册九大秘法
小心摄像头成为黑客偷窥你的眼睛
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息