利用asp开发web应用
通常情况下,用户通过浏览器看到的网页大多是静态的,而随着web应用的发展,用户 希望能够看到根据要求而动态生成的主页,例如响应用户查询数据库的要求、生成报表等。
根据用户请求生成动态主页的传统方法有cgi、isapi等。cgi是根据浏览器端的http请 求激活响应进程,每一个请求对应一个进程。当同时有很多请求时,程序挤占系统资源,造 成效率低下;isapi针对这一缺点进行改进,利用dll(动态链接库)技术,以线程代替进程 ,提高了性能和速度,但要考虑线程的同步问题,而且开发步骤烦琐。这两种技术和另一普 遍使用的开发动态网页的技术java都还存在着另外一个问题,那就是开发困难,程序的开发 和html写作是两个完全不同的过程,需要专门的程序员开发。而较简单的开发技术如javasc ript和idc(internet database connector)等功能有限,不敷使用。
asp即activex server page,是微软公司的新一代开发动态网页的技术,具有开发简单 、功能强大等优点,可以非常直观简易地实现复杂的web应用。本文将介绍asp的基本概念、 特点、开发要素,并通过两个典型的例子介绍利用asp开发web应用的具体实现。
asp概念和工作流程
asp是一个web服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的 web服务应用程序。
asp属于activex技术中的server端技术。与常见的在client端实现动态主页的技术如ja va applet、activex control、vb script、javascript等不同,asp中的命令和script语句 都是由服务器来解释执行的,执行结果产生动态生成的web页面并送到浏览器;而client端 技术的script命令则是由浏览器来解释执行。由于asp是在服务器端解释执行,开发者可以 不必考虑浏览器是否支持asp;同时由于它在服务器端执行,开发者也不必担心别人下载程 序从而窃取编程逻辑。
asp通过后缀名为.asp的asp文件来实现,一个asp文件相当于一个可执行文件,因此必 须放在web服务器上有可执行权限的目录下。
当浏览器向web server请求调用asp文件时,就启动了asp。web server开始调用asp, 将被请求的.asp文件从头读到底,执行每一个命令,然后动态生成一个html页面并送到浏览 器。asp文件的制作和html类似,且和html开发集成,可以在同一个过程完成。通过asp内置 的对象、服务器组件(server component)可以完成非常复杂的任务,而且用户还可以自己 开发或利用别人开发的服务器组件完成专门的任务。
asp具有以下特征:
完全和html集成;
易于生成,无需手工编译和连接;
面向对象,可扩展activex server组件。
目前asp只适用于下列web server:
iis 3.0 on windows nt;
microsoft peer web server v3.0 on nt workstation;
microsoft personal web server on win95。
asp文件
1.asp文件制作
asp文件即后缀名为.asp的文件,是一个文本文件,可以包括下列元素的任意组合:
文本(text)
html标志(tags)
script命令
制作asp文件非常简单,可以用任何无格式的文本编辑工具(笔者一直使用notepad), 也可用专门的主页开发工具和asp开发工具如visual inetdev等。请看下面的例子:
现在时间:<%= now %>将其存成一后缀为.asp的文件,放在一个web server指定的有 执行权的目录下,链接上后,它就能把服务器的当前时间输出。要注意:asp文件不能通过 打开的方式来执行,而必须是链接,例如,假定asp是web server(主机名host)上有执行权 限的一个虚拟目录,要执行该目录下的hello.asp,调用方式应该是:
http://host/asp/hello.asp
2.asp语法
asp并不是一种语言,它只是提供一个环境来运行asp文件中的script。为了顺利使用as p,必须遵守asp的语法规则。asp的语法由下面几个元素组成:
定界符
定界符是用来界定一个标志单元的符号,如html里的“<”和“>”。
同样,asp script的命令和输出表达也有定界符,同text和html都不同,它的命令定界 符是“<%”和“%>”。例如下面是一条赋值语句:
<% name=“timeout” %>
asp使用“<%”=和“%>”来向浏览器输出表达式,例如:
<%= name %> 将在浏览器上输出“timeout”。
script标志
asp可以使用任何script语言,只要提供相应的脚本驱动(engine)即可,asp自身提供 了vbscript和jscript的驱动。它缺省的script语言是vbscript,当然开发者也可以改变这 一缺省设置,例如要改为jscript,只需在文件开头注明<%@language=jscript%>即可。<s cript>和</script>中的部分就是描述语言程序,和html类似。不同的是在html中这一部分 由浏览器解释执行,在asp里却是由web server解释执行。
可以在一个.asp文件里使用几个不同的script语言,只需把每段用<scriptlanguage=la nguagename>和</script>括起来即可。也可以包含在浏览器端执行的script,将描述语句注 释起来,该段程序就由浏览器来解释执行。
html标记:
在asp文件中可以包含html语言的各种表达。
asp内建对象
asp提供了五个内建对象来提供更高一级的web功能,它们是:
request:从使用者获取信息;
response:将信息送给使用者;
server:提供web server工具;
session:存储在一个session内使用者的信息;
application:在一个asp应用内让不同使用者共享信息。
用的最多的是前三个对象。request和response是用来实现web server与浏览器交互。r equest的一个重要方法是form(),其作用是提取浏览器的用户输入信息。例如主页中有一个 文本编辑框,已指定它的变量名为“name”,form的action为某asp文件。下面的语句就可 以取得用户填在里面的内容:
request.form(“name”)
显然,这避免了cgi等方法中所需要的复杂编程。
输出要用到response的一个重要方法write:
response.write “your message”
该语句向用户浏览器输出了一条消息。
server对象有两个重要方法:mappath和createobject。mappath用来将web server的虚 拟路径还原成实际路径;createobject可能是最重要的一个方法,用来产生服务器组件的对 象实例,详细介绍见下文。
服务器组件
通过服务器端的script和html,可以很容易地生成动态网页,但功能有限,例如不能连 接服务器数据库、使用网络功能或访问服务器文件系统等。为了解决这一问题,就要用到co m技术,即component object model。几乎所有的activex技术都是以此为基础,通过com, 可以轻易地使用其它com组件,这种对于web可共享的com组件,就是服务器组件。一个服务 器组件就相当一个对象,提供属性和方法来使用服务器资源。服务器组件可以由支持active x的任何第三方开发,asp本身也自带了五个服务器组件,可以直接使用,并能完成大部分服 务器端的工作。
要调用服务器组件,必须先利用server对象中的方法createobject产生服务器组件对象 实例,如下所示:
server.createobject(progid)
这里,progid指定了构件标识,构件可以是各种形式的可执行程序(dll、exe等),也 不必考虑它的位置,只要在windows nt(或95)中登记注册这些程序,com就会在系统资料 库(registry)里维护这些资料,同时以progid方式让程序员调用。登记用regsvr32程序,可 以用regedit程序来看progid。构件产生后,就可以使用它的方法和属性进行工作。
一般使用server构件的程序片段如下:
'产生构件
setobj = server.createobject(“progid”)
'使用它的方法
obj.method
asp提供了5个服务器组件,其中最重要的两个是数据库访问构件adodb和文件访问构件f ilesystemobject,本文的例子将说明它们的使用。
对于一些特殊的需求,开发者还可以自己开发服务器构件,利用vb或vc可以很方便地开 发出一些构件,然后登记这些构件,就可以用server.createobject来调用。另外还有许多 站点上有开发好的构件供下载,只要在自己的机器上将它们登记就可以使用。
asp应用实例
1. 利用文件访问组件制作主页访问计数器
现在许多主页上都有一个计数器来记录该主页被访问的次数,通常计数器通过cgi实现 ,开发过程比较复杂,一些非专业的程序员难以实现。而通过asp的文件访问组件file acce ss component (scripting.filesystemobject),可以很方便地产生一个计数器。下面是一 个例子,其原理是:根据page hits生成计数文件,读出计数文件中的数字,再根据它动态 地调出代表1、2、3等数字的图像。其基本过程和cgi差不多,但在送出图像时不同,cgi是 通过程序来动态生成一整幅图像,而我们的方法是将已存在于机器中的图像一张一张地调出 ,这样就可以制作非常精美的数字图像。其程序片段为:
<html>
<%
countfile = server.mappath(“/gjy”+“/count.txt”)
’计数文件
set fileobj = server.createobject(“scripting.filesystemobject”) ’产生文 件访问构件