文学艺术|民间故事|神话故事|历代名妓|历代名女|现代故事|诗联趣话|爱情故事|校园故事|传奇故事|帝王将相|荤故事|文化前沿|笑话|图库
论文大全|常用资料|经济金融|会计审计|工商管理|艺术学|社会文化|学科论文|计算机|文学论文|哲学论文|政治论文|法律学|医学|财务税收 
幼教频道|怀孕前|怀孕早期|怀孕中期|怀孕晚期|胎教知识|幼儿期|学前期|儿科健康|个性培养|身高体重|生活起居|育儿策略|玩具游戏|睡眠
两性健康|两性生活|性爱心理|性爱技巧|情感实录|两性生理|两性问答|性疾病|性教育|孕育常识|婚烟物语|健康生活|妊娠病|产后病|不孕症

您现在的位置: 冀鲁信息网 >> 综合信息 >> 论文大全 >> 计算机 >> 计算机网络 >> 综合信息正文

ASP 3.0高级编程(三)

 
  • 上一篇综合信息:

  • 下一篇综合信息:
  • 访问和更新Cookies集合
    Cookies的值比ASP其他集合(例如Form和ServerVariables)的值要复杂得多。Cookie是一小块由浏览器存贮在客户端系统上的文本,且随同每次请求发往它们应用于的域中的服务器。
    ASP使得应用cookie较为容易,可以从Request对象的Cookies集合中获得所有随同请求发出的cookie值,并可创建或修改cookie,通过Response对象的Cookies集合发回给用户。
    Cookie包含可用两种方式构造的信息,单值cookie提供其值给代码是通过一个一般的类ASP集合。然而,集合的每个成员可能本身也是一个集合,包含这种信息的cookie通过称为多值(multiple-Value)cookie。
    创建一个单值的cookie较为简单,如下所示:
    Response.Cookies(“item-name”) = “item-value”
    创建一个多值的cookie,可以使用如下命令:
    Response.Cookies(“item-name”)(“sub-item-name”) = “sub-item-value”
    设置cookie应用的域及路径及其有效期,我们使用:
    Response.Cookies(“item-name”).domain = “domain-url”
    Response.Cookies(“item-name”).path = “virtual-path”
    Response.Cookies(“item-name”).expires = #date#
    通常,客户只在对创建cookie的目录中的页面提出请求时,才将cookie随请示发住服务器。通过指定path属性,可以指定站点中何处这个cookie是合法的,并且这个cookie将随请求发送。如果cookie随对整个站点的页面请求发送,设置path为“/”。
    假如Expires属性没有设置,关闭当前的浏览器实例时,cookie将被自动消除。
    注意,我们在向浏览器发送任何输出时,已经创建了cookie。因为,这些cookie是页面HTTP报头的一部分。

    在ASP 3.0中,缓冲的缺省状态是打开的,且没有输出被发送,除非使用Response.Flush指定做这个工作或者页面已到末端。这意味着创建cookie的代码可以在页面上的任何位置,直到任何输出“刷新”(flush)到客户端前,它都可以被执行。

    要读现有的cookie,使用Request.Cookies集合。可以单独访问其中的项目,方法类似于创建它们时使用的方法。
    StrSingleValue = Request.Cookies(“item-name”)
    StrSubItemValue = Request.Cookies(“item-name”)(“sub-item-name”)
    注意Request.Cookies集合(和所有其他Request集合一样)是只读的。Response.Cookies集合是只写的,事实上可以访问这个集合中一系列cookie的名称,而不是它们的值。

    遍历Cookies集合
    为了使用Cookies集合更加方便,可使用名称为Haskeys的附加属性。假如访问的cookie本身也是个集合,即它是一个多值的cookie,这将返回True。使用Haskeys属性,可以遍历完整的Request.Cookies集合,从而获得所有cookie的列表及它们的值。
    For Each objItem In Request.Cookies
    If Request.Cookies(objItem).HasKey Then
    ‘Use another For Each to iterate all subkeys
    For Each objItemKey in Request.Cookies(objItem)
    Response.Write objItem & “(“ & objItemKey & “) = “_
    & Request.Cookies(objItem)(objItemKey) & “

    Next
    Else
    ‘Print out the cookie string as normal
    Response.Write objItem & “ = ”& Request.Cookies(objItem) & “

    End If
    Next
    这非常类似于前面的从Request.Form集合中提取多个值的复杂代码。但是这里可以使用Haskeys属性来判别每个条目是否为一个集合。而在Form例子里,必须查询Request.Form(item_name).Count属性,这是因为Form集合(和所有的除cookie外的其他集合)成员不可能是真正的集合。ASP只是做了“幕后”的工作,得到了每个多条目集合的值。

    Form和QueryString的差异
    了解了访问各种ASP集合的技术以后,需要解决另一个问题是:Form和QueryString集合之间的差异是什么?假如准备使用ASP,毫无疑问应该清楚这种差异,但需要参考HTTP工作方式来重新认识,理解它们。
    通过HTTP从Web服务器请求页面或其他资源,有两个通用的方法。可使用GET方法直接获得资源,也可使用POST把值传给相应资源。GET方法是缺省的,可以看一下本章前面的一个HTTP请求的实例:
    7/8/99 10:27:16 Sent GET /Store/Download.asp HTTP/1.1
    假如把一个或多个成对的名称/值附在请求页面的URL后,就变成请求的查询字符串,且在QueryString集合中提供给ASP页面。单击Web页面、Email消息或其它文档的超链接,或在浏览器的地址栏中输入地址并按回车,或单击浏览器中的Links或Favorites按钮,所有这些都要使用GET方法。
    因此,对这些动作中传递值给ASP的唯一方法是通过QueryString集合,把值附在URL后。
    出现在Request.QueryString集合中并被访问的值,与前面看到的Form集合实例中的工作方式相同。URL和查询字符串的结合:
    http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
    可以采用如下方式访问在QueryString集合中提供的值:
    strFirstName = Request.QueryString(“FirstName”) ‘Return “Priscilla”
    strLastName = Request.QueryString(“LastName”) ‘Return “Descartes”
    strRaw = Request.QueryString
    ‘Return “FirstName=Priscilla&LastName=Descartes”

    窗体的GET和POST方法
    在一个页面内使用
    段时,可以设置打开的FORM标记的METHOD属性值为“GET”或“POST”,缺省值为“GET”。假如使用“GET”或省略其属性,浏览器将该值绑定在页面所有控件上,成为一个查询字符串,且附在被请求页面的URL上。
    当这个请求到达Web服务器时,其值由ASP的Request.QueryString集合提供。然而,假如设置METHOD属性为“POST”,浏览器将值包装进发送服务器的HTTP报头中,通过Request.Form集合提供给ASP。
    通过来说,可以在所有的HTML窗体中使用POST方法。然而,浏览器或服务器的URL字符串长度存在一定的限制。因此,附有长的字符串可能会引起溢出和某些字符串的字符被截掉。同时,查询字符串出现在浏览器的地址栏和所有的保存的链接和收藏夹中。不仅如此,还显露了通过Web服务器时在HTTP请求中不想显示的值,它也可能出现你的服务器和其他路由服务器的日志文件中。在HTTP请求报头中的值很少是可见的,并且不出现在日志文件中。
    使用POST方法需要注意的小问题是,当用户重新下载时,窗体的值将不再保留,其值为空且必须重新输入。然而,当附在URL上时,其值被存储为一个链接,将被保留,因此将出现在所有的URL与字符串结合的请求中,这或许是个优点也可能是个缺点,这根据应用而定(一些浏览器在客户端上能够在一定范围内自动保留一个页面上的值)。
    另一点是URL与查询字符串的结合体不能包含任何空格或其他非法字符,否则的话,Navigator和一些其他的浏览器将出现问题。非法字符是那些用来分隔URL和查询字符串的部分,例如“/”、“:”、“?”和“&”(IE能够自动将空格转换为正确的格式——加号“+”,但其他的非法字符不能处理)。ASP服务器对象提供URLEncode方法处理这种变换,以后章节讨论相关内容。

    查看Request和Response对象内容
    到目前,主要讨论了一些理论问题,没有列举特别的实例。因为已经讨论过的内容多数情况下互相之间是密切相关的。然而本书为这一章提供了一系列的实例页面,说明Request和Response对象的大多数属性。应用所讲过的实例,能够理解这些页面,并可进行相应的修改,用它们作为试验实例。
    本章及其他所有章节的代码样例均提供给用户,可以从Wrox出版社站点下载。
    http://webdev.wrox.co.uk/books/2610
    http://www.wrox.com/Store/Details.asp?Code=2610
    必须首先在Web服务器的WWWRoot内的子目录下安装实例,然后使用浏览器访问Chapter02子目录,使用:
    http://your_server_name_or_IP/subdirectory_name/Chapter02/Default.asp
    这里your_server_name_or_IP/subdirectory_name是安装下载文件的本地路径。
    1、查看Request对象成员
    这提供一个包含选页的菜单用来试验Request和Response对象,首先选择Using the Request Object,如下图所示:

    下图显示一个HTML窗体的实例,包含一些预先设置好的值,可以按自己的想法编辑这些值,然后点击“Submit”按钮。

    这将打开一个页面,如下图所示,显示集合和TotalBytes属性的全部内容。第一屏显示的是Form、QueryString和Cookies集合。

    注意,假如在窗体页中编辑了HTML控件的值,对于Cookies集合以及其他的集合,在读者的计算机上的页面上可能显示不同的值。
    可以从“Form Collection”段中看到窗体上的HTML控件的值如何在ASP的Request.Form集合中表示。也可以用原始的页(名称为request_form.asp)来试验和检测,以了解创建窗体的HTML和如何与相应值相联系。
    这个页面后面是ClientCertificate集合。这里是空的,因为服务器不要求客户端提供证书。下面是的ServerVariables集合,下图的屏幕图显示的是集合中包含的有用的值。

    在本书的后面附录中可以找到所有ServerVariables集合成员的一个列表,及其值的说明。然而,可从前面讨论的在请求页面时从客户端发出的HTTP报头中见到这些成员。当请求收到后,Web服务器也增加它本身的一些值到集合中,正如上面可以看到的运行在IIS 5.0创建的页面那样。
    1) 页面是如何工作的
    为了创建这个页面,使用了本章前面在对Form集合和如何访问其值的讨论中所看到的完全相同的代码。例如,遍历所有的集合(除Request.Cookies外),使用:
    For Each objItem In Request.collection_name
    Response.Write objItem & “ = “ & Request.collection_name(objItem) & “

    Next
    遍历Cookies集合,可以使用:
    For Each objItem In Request.Cookies
    If Request.Cookies(objItem).HasKeys Then
    ‘Use another For ... Each to iterate all keys of dictionary
    For Each objItemKey in Request.Cookies(objItem)
    Resonse.Write objItem objItem & “(“ & objItemKey & “) = “_
    & Request.Cookies(objItem)(objItemKey) & “

    Next
    Else
    ‘Print out the cookie string as normal
    Response.Write objItem & “ = “ & Request.Cookies(objItem) & “

    End If
    Next
    为获得TotalBytes属性,可简单地使用:
    Request.TotalBytes = <% = Request.TotalBytes %

    [1] [2] [3] [4] [5] [6] 下一页  

     
  • 上一篇综合信息:

  • 下一篇综合信息:
  • 新闻中心|农业新闻|蓄产行情|饲料行情|水产行情|
    粮油行情|蔬菜行情|农资行情|市场分析|致富经验|
    农业科技|植物保护|施肥技术|农作栽培|政策法规|
    农业词典|农用物资|加工保鲜|病虫防治|植物验疫|
    科技推广|实用技术|新优品种|动物养殖|科技动态|
    中药栽培|加工技术|专家观点|电脑技术|网络技术|

    | | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 版权申明 | 网站地图 |
    2005-2008 © www.n318.com 冀鲁信息网 冀ICP备05022225号
    声明:本站为免费个人网站,无力支付稿酬,如果您不想让您的文章出现在本站请联系我们。我们会在第一时间删除。