欢迎光临
我们一直在努力

Asp(Active Server Page)的语言特性 (转)

建站超值云服务器,限时71元/月

web源于静态文本,现在很多站点几乎还是采用这种方式。静态文本的缺点就是维

  护难(文件数目多)、查询难、修改难。虽然可以采用frontpage对站点进行管理,但这

  只是其中的一个办法。现在,很多的站点都会在后台采用数据库,动态生成超文本。这样,

  要改变式样,只需修改几个文件;要变更内容,只需对数据库进行操作即可,而且易于保持

  一致性;而对于全文检索等查询应用,这种方式的优越性更为突出。(经常说的“动态”

  也包括图片的动态显示,如动态gif、java applet等,本文所指为资料的动态性)

   通用网关界面cgi(common gateway interface)和网络服务器应用程序界面

  isapi(internet server application programming interface)与其他相关技术的

  出现,使我们能够方便地与web server进行沟通,从而象一些计数器、留言版等cgi程

  式相继出现并蔚然成风。但这些cgi程序都有一个很大的缺点,就是cgi(可用vb、java、

  perl、c或dephi等编写)与html只能分开编写、分开运行,要将两者融合在一起并不

  容易,从而导致维护与编写都相当困难。因此,一些厂商后来都推出了自己的script语言,来增强网页开发的功能。其中netscape推出了javascript(for client端和for server端两种);微软则推出了vbscript和asp(asp的语法与vb的语法类似)两种,也用于服务器端和客户端程序的编写。对于专业开发人员而言,客户端程序的最重要的一点是通用性,而服务器端的则强调功能和效率。对于client端程序的开发,javascript无疑是最佳的,因为当今两大主流浏览器ie和netscape都宣称支持该标准;而vbscript则只有ie才能支持。但令我们苦恼的是对某些javascript的标记,ie或ie的某些版本并不一定会支持,这必导致我们不得不把一部分程序移到服务器端去执行,因为服务器端的程序会先解释生成html(或含activex)文本,再送到客户端,故不存在兼容问题。

   livewire(javascript for server端的编译器)和asp一样,都是一些手稿语言(手稿是指类似client端的javascript一样的、可嵌套在html文本里面、只需用标记标明是由服务器执行的程序段),也就是类似c/c++一样的面向对象的语言。livewire的文件后缀名还是html,asp的文件后缀名则是asp,因为asp的文件在客户读取它的时候,服务器才进行解释,而livewire的文件则必须预先进行编译(每次修改后,都要重新编译)。asp有相应的辅助开发工具(interdev),可代为生成一些控件。当然,这些并不重要,关键是你采用的是netscape web server还是微软的iis。但就一般而言,因为iis是捆绑在nt上的,故采用iis的用户会偏多一些。

   自从netscape公司推出了livewire和微软推出了active server page以后,程序员编写网上程序就方便和容易了很多。但这种script类的语言有一个共同的缺点,那就是由于是解释执行的,故速度不会太快。最近,微软建议采用三层模型,中间层可以不用asp,而直接采用vb6.0生成的activex控件,因为是编译执行的,故速度较快,不过这是后话。

  

  1.asp的基本对象

  

   asp(active server page)是一种类似于vb的面向对象的程序语言。在这里并不想详述对象等一些基本概念,而是直接介绍其语言特性,以便开发人员能够熟练地对asp程序进行修改和编制(因为很多人都只是直接利用开发工具如interdev来生成asp程序)。

   首先,asp程序的存档名称肯定是“asp”;其次,在asp程序里面,服务器端的script要放在<%和%>字符串中间,例如<% user=request("user") %>。如果你想在一个asp文件中调用另一个asp文件,则可在asp中加上下面的声明:

  < ! — #include virtual|file="***.asp" — >,这有些象c语言中的#include。其中,virtual表示虚拟文件路径,file表示真实文件路径。

   asp有五个主要的内建对象:request、response、server、session、application,下面将分别举例对其进行说明。

  

  1.1 request

  asp依然遵从流行的、利用客户端的form进行数据交换的方法。asp内建的request对象拥有五个获取客户端资料的方法(querystring/form/cookies/servervariables/clientcertificate)。

  语法:request.方法名称("参数")|request("参数")

  如果采用后者,系统会自动选择相应的方法。

   1.1.1 form

   在这里再重新强调form的一些属性:

   <form action=被调用的程序的url

   enctype=资料传送的mime形态

   method=传送资料的方式get/post

   onrest=按下rest键调用的程序

   onsubmit=按下sumit键调用程序

   target=输出内容的frame窗口></form>

   使用form传送信息一般有三种方式:由html网页内的form传信息给其他asp;由asp内的form传信息给另外一个asp;asp内的信息传送给自身。

   语法:request.form(参数)[(索引)]

   其中参数表示form中元素的名称,索引表示相同名称元素的顺序号。

   例:

   <%

   for i=1 to request.form("user").count

   response.write request.form("user")(i)

   next

   %>

  可循环读取名称为user的元素,其中count是form的系统属性,用于计算同名元素的个数,如果该元素不存在,则其值为零。如果没有指明要读取第几个同名元素,则系统会把全部同名元素的值都读取出来,并用“,”作间隔。

  例:request.form("user")=abc,bcd,cde

  

   1.1.2 querystring

   语法:request.querystring(参数)[(索引)]

  除了用form传输资料外,还可通过在超链接后接“?”的方式传输信息,如:<a href="***.asp?user=abc">,这时可通过request.querystring("user")读取传输的信息;如果出现多个重名的参数,如:<a href="***.asp?user=abc&user=bcd&user=cde">,则第一次resquest.querystring("user")=abc,第二次resquest.querystring("user")=bcd,第三次resquest.querystring("user")=cde。

  

   1.1.3 servervariables

   语法:servervariables(参数名称)

   我们知道web/browse的传输协议是http,http的报头会有一些客户端的信息,如

  客户ip地址、浏览器的语言系统等。这时可通过request.servervariables("***")获

  取相关信息,如request.servervariables("accept_language")可获取客户端浏览器

  的语系。其他系统参数见下表:

   server_name server的机器名称或ip地址。

   server_port server正在运行的端口号。

   request_method 发出request的方法(get/post/head)。

   script_name 程序被调用的路径,如:cgi-bin/a.pl。

   remote_host 发出request请求的远端机器(client)的名称。

   remote_addr 发出request请求的远端机器(client)的ip地址。

   remote_ident 发出request的使用者名称(如是拨号上网,则为用户id),

   当ncsa identitycheck为enabled,而且client机器支持

   rfc 931时,该变量有效。

   content_type 数据的mime类型,如:“text/html”。

   http_accept client可以接受的mime类型列表。

   http_user_agent client发出request的浏览器类型。

   http_referer 在读取cgi程序之前,client所指的文本url。

  

   1.1.4 cookies

  在客户端,cookies记录了客户端浏览器很多的信息,我们可通过request.cookies("名称")命令获取它的值,也可通过response.cookies("名称")="值"在客户端记录一些信息,以便控制访问者。设置多重cookies的方法为response.cookies("名称")("名称")="值"。

  

   1.1.5 cache

   我们可以在浏览器上设置从cache中抽取已经访问过的页面的信息,同样,在asp程序中也可进行类似的设置。其中response.clear为清空客户端的内存。response.buffer=true设置可从cache中读取资料(缺省时为false)。

  

   1.1.6 clientcertificate

   clientcertificate用于获取客户端浏览器的身份确认信息(符合x.509标准),但

  客户端浏览器必须支持ssl3.0或pct1协议。这里需做两步工作,第一步:web server必须启动用户端认证选项;第二步:对客户端浏览器进行相应设置,这样,该方法才会生效,否则,传回empty值。

  

  1.2 response

   当要从服务器传送资料到客户端时,可通过下面的方法:

   1)response.write直接输出信息,如response.write "<html>"。

   2)response.redirect引导客户端到另一个url位置,如response.redirect "http://zyr.yeah.net",但这里有一个问题需要注意,就是该语句一定要放在<html>标记前执行,也就是说在服务器未向客户端送出html文本报头前就要被执行,否则会出现传输错误信息。

  3)response.contenttype控制输出的文件类型,服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为“text/html”类型。例如<% response.contenttype="image/jpeg" %>。

  4)response.cookies 用于设置cookies的值,语法为:response.cookies(变量名称)[(key)|属性]=写入的信息。(key的用法前面已作说明,这里不在叙述)cookies系统默认有五个属性,包括expires(时间)、domain(域名)、path(路径)、secure(安全性)、haskeys(判断cookies下是否还有其它cookies文本)。如:<% response.cookies("type").expires="sep 9,1998" %>。

   5)response.buffer用于确定是否把信息传输到缓冲区。因为有时候我们希望把部分中间信息送到缓冲区,然后继续工作。当所有处理工作都完成后,才把信息输出到客户端。但当在处理过程中flush或end方法被调用,则缓冲区内容将被输出。

   response的其它属性:

  expires:设定网页保留在客户端浏览器的时间长度。

  expiresabsolute:设定网页保留在客户端浏览器的日期与时间。

   response的其它方法:

  addheader:设定html文件的http报头。

  appendtolog:在web server记录档案末尾,添加字串。

  clear:清除在缓冲区中的html输出资料。

  end:停止处理asp档案,并回传当时状态。

  flush:立刻送出缓冲区的html资料。

  

   1.3 server

  server对象会为你提供一些固定的server端的方法和属性,包括scripttimeout、mappath和urlencode等。其中scripttimeout是server的属性,可规定一个asp程序执行的最长时间,如:server.scripttimeout=200(计数单位为秒,缺省时为90秒)。

  mappath是server的一个方法,用于把web server的虚拟路径转换为实际路径。如server.mappath("/")=c:\inetpub\wwwroot,对于路径参数“/”和“\”,asp都会视为一样。在这里有一点要注意的是,系统只是对应web server的真实根目录输出结果,而不会去检查文件系统中是否真的存在这样一个目录。

   urlencode是server的另外一个方法,该方法会根据url编码原则,把源字符串编

  码为目标字符串,其中空白的字符用“+”代替。

  

   1.4 session

   session是asp中一个非常重要的对象,在用一些传统的语言编程时,都会涉及到变量是定义为全局变量还是局部变量这个问题。但在internet上的开发却很少提及这个问题(java除外),因为每一个html页面都是非相关的,传输完毕后,全部链接都会断开。在asp中则不一样,我们可以定义一些全局变量,这里的全局是指在当前浏览器没有被关闭前都可以被使用。这些变量可以在global.asa中进行定义。如果你的web应用程序是用interdev自动创建的,则会在根目录找到该文件;如果不是则可自行创建。

   语法:session.属性|方法

   一般建立新的session对象都是采用set关键字,如<%set session("变量名称")=要赋的值。如果赋给session变量的是一个数组,则读取时需存放到数组中,因为系统是将其视为一个对象(object)。

  

   1.5 application

   global.asa是用于定义session、application和object对象的一个文件,客户端是不能看到该文件的。但该文件一定要放在程序的根目录上,而且文本中不能有html标记并且文件名不能改动。下面是一个global.asa文本的范例。

  <script language=vbscript runat=server>

  sub session_onstart

   ==visual interdev generated – dataconnection startspan==

   –project data connection

  session("nnb_connectionstring") = "dsn=***;uid=zyr;app=microsoft (r) developer

   studio;wsid=zyr;database=***"

  session("nnb_connectiontimeout") = 15

  session("nnb_commandtimeout") = 30

  session("nnb_runtimeusername") = "zyr"

  session("nnb_runtimepassword") = "******"

  ==visual interdev generated – dataconnection endspan==

  end sub

  </script>

   application与session的区别在于,网上的用户都可以使用application的对象,因而是需要加锁的;而session只是针对一个客户而已。如定义一个application变量为application("name")="1234"。

   asp的功能仅此而已?当然不是,asp更高级的应用还包括它内建有一些activex控件和可调用其它的控件等功能,暂不在本文讨论。如果希望获取更多的信息,可以访问下面的站点:

   http://www.microsoft.com/asp

   http://zyr.yeah.net

   http://www.kj.com.tw

  

  2.asp的编程实例

  为了使大家对上面提到的功能有一个感性的认识,下面我们将以一个非常简单的用asp编写的chatroom(交谈室)作为例子。为了尽量简化,我们这里只采用四个文件,一个是主文件main.asp和enter.asp(让用户输入用户名),一个是资料输入文件input.asp,一个是显示文件show.asp。原理是定义一个application变量show,然后每次有人说话,我们都把它加到前面;另外显示文件show.asp每三秒钟刷新一次,用于显示show变量.全部工作仅此而已,用其它语言或方法可能需要更复杂的工作,在这里则变得非常简单和明了。(这里没有使用global.asa文件。)

  

  2.1 main.asp文件

  <%

  if session("sname")="" then

   response.redirect "enter.asp"

  end if

  ;如果用户没有输入名字,则将重新回到名字输入界面

  %>

  

  <html>

  <frameset rows="80%,20%">

   <frame name="show" src="show.asp">

   <frame name="input" src="input.asp">

   <noframes>

   <body>

   <p>this page uses frames, but your browser doesnt support them.</p>

   </body>

   </noframes>

  </frameset>

  </html>

  

  2.2 enter.asp文件

  <%

  nickname=request.form("nickname")

  ;读取用户输入的名字

  if nickname="" then

   msg=msg+"<font color=ff0000>请输入您的名称</font><br>"

  else

   response.cookies("whoami")=nickname

  ;把用户名字写到cookies中

   application.lock

   application("show")="<table border=0 bgcolor=ccffcc width=500>" _

  &"<td><font color=5555ff><b>来至" & request.servervariables("remote_addr") _

  & "的" & request.cookies("whoami") & "大驾光临…</b></font></td></table>" _

  & application("show")

  ; _是分隔符,与vb一样

   application.unlock

   session("sname")=nickname

   response.redirect "main.asp"

  end if

  %>

  <html>

  <body>

  <form method="post" action="enter.asp">

   你的姓名:

   <input type="text" name="nickname" size="20" maxlength="10">

   <input type="submit" value="进入聊天室" name="b1">

  </form>

  </body>

  </html>

  

  2.3 show.asp文件

  <html>

  <head>

  <meta http-equiv="refresh" content="3">

  ;设置每三秒钟刷新一次

  <meta name="microsoft border" content="none">

  <title>聊天的内容</title>

  </head>

  <body bgcolor="#ffffff">

  <%=application("show")%>

  </body>

  </html>

  

   2.4 input.asp文件

  <%

  mytalk=trim(request.form("txtbox"))

  ;读取用户写的信息,trim用于去掉后面的空格

  application.lock

  application("show")="<font color=ff0000 ><b>" & request.cookies("whoami") & _

   "</b></font>:" & mytalk & "<br>" & application("show")

  ;把新的信息添加到application变量show的前面,其中request.cookies("whoami")是从

  ;cookies中读出该用户的名字。

  application.unlock

  %>

  <html>

  <head>

  <meta name="microsoft border" content="none">

  <base target="input">

  <title>输入界面</title>

  </head>

  

  <body bgcolor="#ffffff">

  <form method="post" action="input.asp" target="input">

   <p><font color="red"><%=request.cookies("whoami")%></font>

   输入:<input type="text" name="txtbox" size="30">

  <input type="submit" value="发送" name="go">

  </form>

  </body>

  </html>

 

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Asp(Active Server Page)的语言特性 (转)
分享到: 更多 (0)