资源描述
ASP内置对象详解之Response对象:客户端浏览器发送数据,用户可以使用该对象将服务器的数据以HTML的格式发送到用户端的浏览器,它与Request组成了一对接收、发送数据的对象,这也是实现动态的基础。下面介绍它常用的属性和方法.1、Buffer属性该属性用于指定页面输出时是否要用到缓冲区,默认值为False。当它为True时,直到整个Active Server Page执行结束后才会将结果输出到浏览器上。如:Buffer示例% for i=1 to 500 response.write(i & ) next% 这页执行时,整个主页的所有内容会同时显示在浏览器上,这个主页会存在缓存区中直到脚本执行结束。2、Expires属性该属性用于设置浏览器缓存页面的时间长度(单位为分),必须在服务器端刷新。通过如下设置: 通过在ASP文件中加入这一行代码,要求每次请求是刷新页面,因为Response一收到页面就会过期。3、Write方法该方法把数据发送到客户端浏览器,如: 4、Redirect方法该方法使浏览器可以重新定位到另一个URL上,这样,当客户发出Web请求时,客户端的浏览器类型已经确定,客户被重新定位到相应的页面。如:Redirect示例 POST 为 中 method 定义的值传递方式 Fun News Sample 以上是提交的表单,下面是处理表单的文件formjump.asp:Redirect示例 这个例子当用户选择了以后,按Jump按钮提交表单,服务器接到申请后调用formjump.asp判断后定位到相应的URL。不过这里有一点要注意,HTTP标题已经写入到客户浏览器,任何HTTP标题的修改必须在写入页内容之前,遇到这种问题时,可以如下做:在文件的开始后写: Response.Buffer=True在结尾定: Response.Flush这里Flush是Response的一个方法,它必须是Buffer属性设置为True时才能使用,否则会产生一个运行模式错误。另外一个Clear方法也是用于清除被缓存的页面,同样要Buffer属性设置为True时才能使用。5、End方法该方法用于告知Active Server当遇到该方法时停止处理ASP文件。如果Response对象的Buffer属性设置为True,这时End方法即把缓存中的内容发送到客户并清除冲区。所以要取消所有向客户的输出,可以先清除缓冲区,然后利用End方法。如:%Response.buffer=trueOn error resume nextErr.clearif Err.number0 then Response.Clear Response.Endend if% ASP内置对象详解之Request对象: Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息。在没有表单提交时查询字符串的值是否可以使Request.QueryString集合?Request对象用于读取浏览器的数据,它除了可以读取表单字段的内容,还可以用来读取附带在网址后面的参数,无论请求字符串怎样添加到链接地址中对Request来说都没有什么不同。使用get方法提交一个表单,还是跟随一个附加查询串的链接查询字符串中所有的值,都可以使用Request.QueryString集合。Request.ClientCertificate(keySubField)所有客户证书的信息的集合。对于Key,该集合具有如下的关键字:Subject证书的主题。包含所有关于证书收据的信息。能和所有的子域后缀一起使用。Issuer证书的发行人。包含所有关于证书验证的信息。除了CN外,能和所有的子域后缀一起使用。VadidFrom证书发行的日期。使用VBScript格式。ValidUntil该证书不在有效的时间。SerialNumber包含该证书的序列号。Certificate包含整个证书内容的二进制流,使用ASN.1格式。对于SubField,Subject和Issuer关键字可以具有如下的子域后缀:(比如:SubjectOU或IssuerL)C起源国家。O公司或组织名称。OU组织单元。CN用户的常规名称。L局部。S州(或省)。T个人或公司的标题。GN给定名称。I初始。当文件cervbs.inc(VBScript使用)或cerjavas.inc(Jscript使用)通过使用#INCLUDE导向包含在你的Active Server Page里时,下面两个标志可以使用:ceCertPresent指明客户证书是否存在,其值为TRUE或FALSE。ceUnrecongnizedIssure指明在该链表中的最后的证书的发行者是否未知,其值为TRUE或FALSE。Request.Cookies(Cookie(key).Attribute)Cookie的集合。允许获得浏览器的Cookie。Cookie指明返回那一个Cookie。Key用于从Cookie字典中返回具有某一关键字的Cookie值。对于Attribute,你能使用属性HasKeys来确定某一Cookie是否具有子关键字。HasKeys的值为TRUE或FALSE。Request.Form(Parameter)(Index).Count填写在HTML的表单中所有的数据的集合。Parameter是在HTML表单中某一元素的名称。当某一参数具有不止一个值(比如,当在中使用MULTIPLE属性时)时,使用Index。当某一参数具有多值时,Count指明多值个数。Request.QueryString(Varible)(Index).Count查询字符串的所有值的集合。Varible是在查询字符串某一变量的名称。当某一变量具有多于一个值时,使用Index。当某一参数具有多值时,Count指明值的个数。Request.ServerVaribles(Server Environment Variable)环境变量的集合。允许读取HTTP头。你可以通过使用HTTP_前缀来读取任何头信息。比如,HTTP_USER_AGENT接受客户代理HTTP头(浏览器类型)。除此外,你可以使用下表所示的变量获得任何环境信息。ALL_HTTP客户端发送的所有HTTP标头,他的结果都有前缀HTTP_。ALL_RAW客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_ APPL_MD_PATH应用程序的元数据库路径。APPL_PHYSICAL_PATH与应用程序元数据库路径相应的物理路径。AUTH_PASSWORD当使用基本验证模式时,客户在密码对话框中输入的密码。AUTH_TYPE这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。AUTH_USER代验证的用户名。CERT_COOKIE唯一的客户证书ID号。CERT_FLAG客户证书标志,如有客户端证书,则bit0为0。如果客户端证书验证无效,bit1被设置为1。CERT_ISSUER用户证书中的发行者字段。CERT_KEYSIZE安全套接字层连接关键字的位数,如128。CERT_SECRETKEYSIZE服务器验证私人关键字的位数。如1024。CERT_SERIALNUMBER客户证书的序列号字段。CERT_SERVER_ISSUER服务器证书的发行者字段CERT_SERVER_SUBJECT服务器证书的主题字段。CERT_SUBJECT客户端证书的主题字段。CONTENT_LENGTH客户端发出内容的长度。CONTENT_TYPE客户发送的form内容或HTTP PUT的数据类型。GATEWAY_INTERFACE服务器使用的网关界面。HTTPS如果请求穿过安全通道(SSL),则返回ON。如果请求来自非安全通道,则返回OFF。HTTPS_KEYSIZE安全套接字层连接关键字的位数,如128。HTTPS_SECRETKEYSIZE服务器验证私人关键字的位数。如1024。HTTPS_SERVER_ISSUER服务器证书的发行者字段。HTTPS_SERVER_SUBJECT服务器证书的主题字段。INSTANCE_IDIIS实例的ID号。INSTANCE_META_PATH响应请求的IIS实例的元数据库路径。LOCAL_ADDR返回接受请求的服务器地址。LOGON_USER用户登录Windows NT的帐号PATH_INFO客户端提供的路径信息。PATH_TRANSLATED通过由虚拟至物理的映射后得到的路径。QUERY_STRING查询字符串内容。REMOTE_ADDR发出请求的远程主机的IP地址。REMOTE_HOST发出请求的远程主机名称。REQUEST_METHOD提出请求的方法。比如GET、HEAD、POST等等。SCRIPT_NAME执行脚本的名称。SERVER_NAME服务器的主机名、DNS地址或IP地址。SERVER_PORT接受请求的服务器端口号。SERVER_PORT_SECURE如果接受请求的服务器端口为安全端口时,则为1,否则为0。SERVER_PROTOCOL服务器使用的协议的名称和版本。SERVER_SOFTWARE应答请求并运行网关的服务器软件的名称和版本。URL提供URL的基本部分。方法Request.BinaryRead(Count)接收一个HTML表单的未经过处理的内容。当调用此方法时,Count指明要接收多少字节。在调用此方法后,Count指明实际上接收到多少个字节。属性Request.TotalBytes查询体的长度,以字节为单位。ASP内置对象详解之Server对象: Server对象是ASP中一个很重要的对象,许多高级功能都是靠它来完成的。它提供了对Active Server Pages对和方法的使用,主要介绍几个常用的方法。1、MapPath方法该方法返回指定文件的相对路径或物理路径。若Path以一个(/)或()开始,则MapPath方法返回路径时将Path视为完整的虚拟路径。若Path不是以斜杠开始,则MapPath方法返回同.asp文件中已有的路径相对的路径。如:test.asp文件位于C:inetpubwwwrootmyhome下,C:inetpubwwwroot为服务器的宿主目录,而test.asp包含如下脚本: 输出:C:inetpubwwwrootmyhometest.asp要得到这个结果还可以用如下方法: 2、CreateObject方法 这个方法是Server对象中最重要的方法,在后面可以看到,许多功能都不得不用到它。它用于创建已注册到服务器上的ActiveX组件能够使扩展ActiveX的能力。用于创建服务器端的方法如下:Server.CreateObject(ComponentName)用来创建的组件可以是所有ActiveX能使用的内置组件,实际上是存在于服务器的所有ActiveX组件。ASP内置对象详解之Application对象: Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据。Application的属性:方法如下: Application对象没有内置的属性,但是我们可以自行创建其属性。 其实大部分Application变量都存放在Contents集合中,当你创建一个新的Application变量时,其实就是在Contents集合中添加了一项。下面两个脚本是等效的: 或 % Application.contents(greeting)=hello!由于Application变量存在集合里,所以如果想要全部显示,其方法我们已经多次使用,例如For Each循环。 %For Each item IN Application.Contents Response.write(&item&Application.Contents(item)next% Application的方法: Application的方法只有两个方法:一个是Lock,另一个是Unlock。其中Lock方法用于保证同一时刻只能一个用户对Application操作。Unlock则用于取消Lock方法的限制。如: Application的事件: 1、Application_OnStart() 当事件应用程序启动时触发。 2、Application_OnEnd()此事件应用程序结束时触发。 这两个事件过程都是必须定义在Global.asp文件中,一般把连接数据的函数定义在这两个事件,然后放在Global.asp中。首先.asa是文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application、Session。 它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件必须存放在应用程序的根目录内。每个应用程序只能有一个Global.asa文件。 关于Global.asa文件最常见的错误概念是它能为一般的使用的函数和子程序用作书库。Global.asa文件仅能用于创建对象的引用和俘获启动,以及结束Application对象和Session对象。 Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用:1,当Application_OnStart或Application_OnEnd事件被触发。2,当Session_OnStart或Session_OnEnd事件被触发。3,当引用一个在Global.asa文件里被实例化的对象(Object)。 Global.asa的标准文件格式如下:Sub Application_OnStartApplication_OnStart 当任何客户首次访问该应用程序的首页时运行End Sub Sub Session_OnStart Session_OnStart 当客户首次运行 ASP 应用程序中的任何一个页面时运行End Sub Sub Session_OnEnd Session_OnEnd 当一个客户的会话超时或退出应用程序时运行End Sub Sub Application_OnEnd Application_OnEnd 当该站点的 WEB 服务器关闭时运行End Sub 一、Session_onStart先看一个控制用户进入页面的代码:1,Global.asa(放在被调试的虚拟目录的根目录下面) RUNAT就是说脚本在服务器端运行,这段代码等同于Sub Session_OnStart 只要是用户第一次登录本站,则会跳转到首页response.redirect(End Sub然后调试当前虚拟目录下的任何文件,你会发现所有页面都跳转向通过此“强制进入某页”的例子,可以想象当首页需要被关注的时候是非常有必要的。下面就以一个“在线人数”的例子来继续观察Session_OnStart和Session_OnEnd事件二、Session_onEnd2,Global.asa(放在被调试的虚拟目录的根目录下面)Sub Application_onStart 初始值为0Application(OnLine) = 0 End Sub Sub Session_onStart 一个用户访问进行记数加1Application.Lock Application(OnLine) = Application(OnLine) + 1 Application.Unlock End Sub Sub Session_OnEnd 一个用户进程的结束,记数减1 (如果没有该事件程序,则执行的就是页面访问程序了。)Application.Lock Application(OnLine) = Application(OnLine) - 1 Application.Unlock End Sub 3,online.asp当前共有在线退出你发现在该页中只有一个Application(OnLine),而且还是被显示引用的。那么其值来自何方?这正是Global.asa文件的关键所在。你可以在本机依次打开个窗口,进行进行关闭窗口或退出两种方法的调试。三、继续细化一下上面的程序你会发现:当进行“退出”连接后关闭窗口和直接关闭窗口效果是不一样的。因为Session存在时间的缘故,当直接进行关闭窗口,并不能触发Session_OnEnd事件,所以该如何实现这个几乎不可能的想法呢?大家都知道,当网页进行关闭的时候可以连带一个onunload事件,那么该onunload只要能执行Session的注销功能不就我们需要的吗?废话少说,将online.asp进行修改3,online.asp当前共有在线退出注意,online.asp进行onunload的时候会打开exit.asp,那只要在exit.asp中再设置session.Abandon()不就OK了。4,exit.aspself.close()当然,加了段Script脚本,目的是进行Session的注销以后立即进行关闭本身。那现在基本一个在线统计的Web应用就可以了。四、深入研究Global.asa从上面的调试中,举一反三的你,一定会提出一个问题:如何控制注册用户在线人数?那下面几个文件一个一个看:5,Global.asa(放在被调试的虚拟目录的根目录下面)Sub Application_OnStartapplication(online)=0End SubSub Session_OnStartEnd SubSub Session_OnEndif session.contents(pass) then 判断是否为登录用户的Session_OnEndapplication.lockapplication(online)=application(online)-1application.unlockend ifEnd SubSub Application_OnEndEnd Sub注意本Global.asa中的Session_OnStart块不做任何事件。因为一旦有用户访问服务器而不管用户是否登录,都会产生OnStart事件,而现在需要的只是登录用户的在线,所以不能在OnStart事件里使Application(online)加1。又因为不管是否是登录用户的会话结束都会产生OnEnd事件(假如有访客访问了服务器但并不登录,他的会话结束后也会产生OnEnd事件),所以在Session_OnEnd事件里用了句if语句来判断是否为已登录用户的OnEnd事件,如果是才将在线人数减1。并且值得注意的是:session.contents(pass)的使用,因为在OnEnd事件里禁止使用Session对象,但是可以用Session对象的集合来调用session变量。也就是说不能直接写session(pass),而是需要写session.contents(pass)。6,login.asp%if request.querystring(logout)=true thensession.Abandon()end ifsubmitname=request.form(submit)if submitname=submit thenname=request.form(name)pwd=request.form(pwd)if name=cnbruce and pwd=cnrose thensession(name)=namesession(pass)=trueelseresponse.write Error Name Or Pwd.Backresponse.endend ifapplication.lockapplication(online)=application(online)+1application.unlock%当前注册会员人。退出只是简单地检测用名是cnbruce,密码是cnrose的时候,生成一个session(pass)=true,就是放在Global.asa中判断的。五,继续发挥想象想想,再想想。仅仅统计有多少人在线是不够的,还要判断用户的在线状态。可以想象办法基本,当用户登录的时候,在login.asp里将online设为1(如果有数据库则上传),但用户离线时将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为0(同样将为0的值上传)Application_OnStart是在整个ASP.Net应用首先被触发的事件,也就是在一个虚拟目录中第一个ASP.Net程序执行时触发,Application_OnEnd就正好相反,在整个应用停止时被触发(通常发生在服务器被重启/关机时)。Application_OnRequestStart和Application_OnRequestEnd则是在每一个ASP.Net程序被请求时就发生,也就是说客户访问一次一个ASP.Net程序,这两个事件就会被触发。例如:Sub Application_OnStart Application(tt18_ConnectionString) = driver=SQL Server;server=jeff;uid=sa;pwd=;database=test End Sub 一个数组能够被定义成Application对象,不过这个数组只能作为一个对象保存,而不能用Application(0)取出其值。可以定义一个临时数组实现这种功能。如: 同样要修改这个Application对象也可以定义一个临时数组,把Application对象赋给数组,然后修改这个数组的元素,最后把数组赋回Application对象。如:ASP内置对象详解之Session对象: Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会单独获得一个Session。在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据;如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变量则可以实现站点多个用户之间在所有页面中共享信息。1、SessionID属性该属性返回当前会话的唯一标志,为每一个Session分配不同的编号。我曾在开发过程中就遇到对用户的控制问题。它要实现的功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块。也就是说一个会员名同时只能一个人浏览此模块。我通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session(Status)=Logged,同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。2、TimeOut属性该属性用来定义用户Session对象的时限。如果用户在规定的时间内没有刷新网页,则Session对象就会终止。一般默认为20分钟。3、Abandon方法该方法是Session对象的唯一方法,可以清除Session对象,用来消除用户的Session对象并释放其所占的资源。如: 4、Session_OnStart和Session_OnEnd事件和Application一样,当对象的例程每一次启动时触发Session_OnStart事件,然后运行Session_Onstart事件的处理过程。也就是说,当服务器接收到应用程序中的URL的HTTP请求时,触发此事件,并建立一个Session对象。同理,这个事件也必须定在Global.asa文件中。当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新,这会触发Session_OnEnd事件,然后执行里面的脚本。Session变量与特定的用户相联系,针对某一个用户赋值的Session变量是和其他用户的Session变量完全独立的,不会存在相互影响。Session应用一例:与Application一样,一个被定义为Session类型的数组只能将整个数组作为一个对象,用户不能直接改变Session数组中某个元素的值。为了创建一个Session数组,需先定义一个普通的数组,并对它的每一个元素赋初值,最后把它定义为一个Session数组。如:%dim array()array=array(jeff,zhu,male)Session(info)=arrayResponse.write Session(info)(0) &-Response.write Session(info)(1) &-Response.write Session(info)(2) &%array(0)=junarray(1)=liarray(2)=femaleSession(info)=arrayResponse.write Session(info)(0) & -Response.write Session(info)(1) & -Response.write Session(info)(2) & % 以上这段程序输出结果是: jeff-zhu-male _ jun-li-female ASP内置对象详解之ObjectContext对象: 该对象用于控制Active Server Pages的事务处理。事务处理由Microsoft Transaction Server (MTS)管理。 事件 ObjectContext.OnTransactionAbort 由放弃的事务处理事件激发,在脚本完成处理后发生。 ObjectContext.OnTransactionCommit 由成功的事务处理事件激发,在脚本完成处理后发生。 方法 ObjectContext.SetAbort 显式的放弃一次事务处理。 ObjectContext.SetComplete 覆盖前面任何调用ObjectContext.SetAbort方法的调用。
展开阅读全文