ASP网页设计创立工具生组件实例
帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。创立|工具创立剧本运转期库工具的实例与创立任何其他工具和组件的实例化体例完整不异。可以使用ASPServer工具供应的CreateObject办法(确保工具创立在以后页面的情况内),大概利用一个<OBJECT>元素。我们将研讨这两种办法,事实接纳那种办法依附于页面的必要。
5.2.1利用Server.CreateObject办法
正如在研讨Server工具的时分看到的,组件或其他工具实例可依据它们的ProgID来创立:
<%
DimobjThis
SetobjThis=Server.CreateObject(“ADODB.Connection”)
%>
ProgID字符串“正式的”格局是“供给商.组件.版本”,供给商的名字和版本是可选的。一般ProgID只包括前两部分(如上例)。多数供给商在ProgID中设置版本编号,这将制止向后兼容的新版本利用一样的ProgID,这请求改动ASP页面才干利用新版本。
5.2.2利用<OBJECT>元素
可使用尺度的HTML<OBJECT>元素经由过程增添RUNAT参数并指定其值为“SERVER”来在服务器上创立一个组件实例。别的,一般是供应工具的ProgID字符串而不是数字的ClassID:
<OBJECTID=”objThis”RUNAT=”SERVER”PROGID=”This.Object”>
<PARAMNAME=”param1”VALUE=”value1”>
<PARAMNAME=”param2”VALUE=”value2”>
</OBJECT>
假如下面剧本的工具有响应的属性可在剧本中利用,在<OBJECT>元素内可经由过程<PARAM>元素举行设置,就像一般在HTML页面中所做的一样。在ASP中利用<OBJECT>元素时不请求CODEBASE属性,当其不成用时,服务器不会试图下载和安装工具或组件。
1.指定一个ClassID
别的,能够指定想要创立的工具或组件的ClassID。在不晓得方针机安装了甚么其他组件的情形下,这长短常有效的。比方在客户端上的扫瞄器的页面上实例化组件时。
在实际上,组件的ProgID(文本“供给商.组件”)不该该互相抵触,应当是独一的。但是,这不是自作掩饰的。有大概美国南方的一个供给商与希腊小岛上的一个供给商同名。可是,利用ClassID辨认会见时,由于ClassID是独一的,同名情形就不会产生。
假如决意利用工具或组件的ClassID,应将其放进CLASSID属性中,而不是PROGID属性。如:
<OBJECTID=”objThis”RUNAT=”SERVER”
CLASSID=”clsid:892D6DA7-E0F9-11D2-B2E9-00105A42AF30”>
<PARAMNAME=”param1”VALUE=”value1”>
<PARAMNAME=”param2”VALUE=”value2”>
</OBJECT>
但在本人的服务器上实例化工具时,应当晓得工具和组件的安装体例。如许在ASP代码中创立工具实例时,能够平安地利用ProgID。这就是ClassID很少在ASP页面内利用的缘故原由。但是,由于ProgID用于查找ClassID,假如乐意也能够用组件或工具的ClassID取代ProgID。
2.设置工具实例的感化域
缺省情形下,一切ASP页面中创立的工具与组件实例(不管用Server.CreateObject办法或<OBJECT>元素)都有页面内的感化域(pagescope)。这意味着,工具与组件只要该页在ASP上运转时才存在,当页面完成而且把了局发送到客户端今后就主动地作废了。
但是,假如在global.asa文件(它存在于站点或假造使用程序的根目次)中安排<OBJECT>声明,能够将工具或组件的感化域指定为使用程序或会话感化域。
(1)在使用程序层感化域创立工具
经由过程设置SCOPE属性为“APPLICATION”,创立使用程序层感化域工具:
<OBJECTID=”objThis”RUNAT=”SERVER”PROGID=”This.Object”
SCOPE=”APPLICATION”>
</OBJECT>
使用程序入手下手时创立了工具实例,即一旦用户从假造使用程序的目次哀求一个页面,就创立工具实例。关于缺省Web站点,这能够是站点上的任一目次。直到使用程序停止(最初的用户会话停止)前,工具实例一向存在,而且能够被假造使用程序或站点目次内任一页面内的恣意用户援用和利用。
(2)在会话层感化域创立工具
假如想创立由单个用户利用的工具实例,其感化域为他会见的一切页面,可创立会话层感化域工具。这经由过程将SCOPE属性设置为“SESSION”来完成:
<OBJECTID=”objThis”RUNAT=”SERVER”PROGID=”This.Object”
SCOPE=SESSION”>
</OBJECT>
工具一旦被援用就被创立,援用是由用户从假造使用程序或站点载进的页面内的程序代码完成的(在global.asa文件中有<OBJECT>声明)。当用户会话性命周期停止并被作废时,它援用的工具实例也就作废了。
(3)关于感化域和形态
使工具实例的感化域为全局的大概为用户会话全局情况看起来是一个好主张,但在实践利用时有些成绩必要思索,个中之一是在用户的很多哀求之间可以无效地回护工具的形态。换句话说,能够设定工具的一些属性,它们对利用的一切页面是共用的。由于不用每次都创立新的实例并设置其属性,以是这看起来是个较好的举措。
现实上,微软倡议一样平常情形下不要如许做,这一头脑是传统程序计划头脑的剩余。在Web上,要面临的最年夜成绩是服务器和Web使用程序及所供应的静态网页怎样对付数以百万计的网站会见者。将组件实例驻留在内存中守候一个特定用户的页面哀求,对大概有几百个用户同时扫瞄的网站来讲,如许做不克不及无效地利用资本。
Windows2000供应新的COM+运转期特征,它可以处置组件的创立、缓存和利用,接纳一种吞吐量最年夜化但所占服务器资本最小化的体例。工具实例存储在那里和存储多久的成绩,最好由操纵体系本人完成,而不是由程序员决意。
也就是说,在页面内必要的中央创立工具实例,当页面停止时让其消散。COM+收拾这些碎片,主动处置背景的一些庞大事情。假如要懂得有关这方面的内容,第14章对照具体地研讨了组件的创立。
固然,在某种情形下,我们大概请求一个工具具有使用程序层和会话层的感化域,特别是在页面哀求间保留形态时。在前面会商Dictionary工具时,将有一个这方面的实例。
5.2.3Server.CreateObject与<OBJECT>的区分
Server.CreateObject办法当即创立一个工具实例。在年夜多半情形下这也是我们所但愿的。而<OBJECT>元素只要初次援用一个工具时才创立指定的工具实例。因而假如在代码中中断利用该工具,则不创立该工具实例。
假如代码只在某种情形下利用这个工具(大概依附于哀求参数的值),这大概是有效的。由于假如不必要这个工具,则能够节俭服务器的资本。
但是,假如一定必要创立某一工具,可以使用Server.CreateObject办法完成。用<OBJECT>元素创立工具有助于避免在代码中作废对工具的挪用时,健忘作废程序中的Server.CreateObject行,固然这是一个大意的程序计划。
最初必要记着的是,假如工具是利用Server.CreateObject办法创立的,就能够从会话或使用程序中往失落工具,但利用<OBJECT>元素创立的,则不可。
5.2.4组件线程模子
在页面内利用工具或组件时,应当思索的另外一个成绩是该工具触及到的呼应多个哀求的举动体例。现实上在ASP里,这是所必要了解的最庞大的标题之一。一个组件的线程模子,分离其感化域,影响该组件和使用程序的功能和效力,也影响将它实例化的ASP页面。
线程就是由处置器实行的体系工具,用于完成由组件代码界说的义务。每个线程都能够被以为是单个二进制指令集。在像Windows如许的多线程情况中,多个线程可同时运转。
实践上有五个线程模子(包含在Windows2000里引进的Neutral-threading模子):
·Single-threaded(单线程):某一时候只能有一个历程利用某组件。
·Apartment-threaded(单位线程):多少历程都可使用某组件,但只要一个在指定的线程上。
·Neutral-threaded(中立线程):多少历程都能利用某组件,而且可使用指定的一组线程中的任何一个。
·Multiple-threaded或Free-threaded(多线程或自在线程):多少历程都能利用某组件,而且这些历程能够运转在分歧的线程上。
·Both-threaded(双线程):工具既能够是单位线程的又能够作为自在线程的。
在这里不注释线程模子的手艺细节,本书前面有响应的内容。
单位线程的组件(比方利用VisualBasic创立的或作为XML剧本的组件)可在页面层感化域内很好地运转,在会话层感化域内也是能够承受的。现实上,在页面层,因为较低的数据处置开支,也能很好地运转双线程的组件。
Winodws2000中的中立线程的模子乃至供应了更好的功能,只管到今朝为止只要很少的如许的组件和与之相顺应的开辟工具。
假如必要会话层组件,利用可用的双线程的组件。而且假如必要使用程序层感化域,可一向利用双线程的组件。
但是,微软倡议制止利用会话层感化域的组件,乃至不利用使用程序层感化域的组件,除非这些组件是相对必要的。使组件的举动工夫凌驾感化域为页面级的组件所请求的工夫,关于由COM+供应代办署理特征的工具是没无益处的。5.2.5援用工具范例库
在新近的ASP版本中,在剧本中利用工具或组件时,组件内界说的大众常数(假如有的话)在ASP里将不再无效。这意味着我们必要本人声明它们(或等价物)并指定响应的值。
比方,当在初期版本的ASP中利用ActiveX数据库工具(ADO)组件时(将在第8章举行具体的研讨),不能不用纪录集的Open办法到场预界说常数声明。比方:
ConstadOpenKeyset=&H0001
ConstadLockPessimistic=&H0003
ConstadCmdTable=&H0002
…
rs.Open“Contact”,”DSN=GlobalExampleData;UID=examples;Password=;”,_
adOpenKeyset,adLockPessimistic,adCmdTable
…
另外一种办法是利用#include指令在页面拔出一个名为adovbs.inc的文件。该文件由IIS/ASP供应,包括ADO所需的一切预界说常数。更新代码时,必需确认利用的是最新版本,并反省它关于一切的页面哀求都可用。
关于IIS5.0,有一个更好的办法,经由过程在HTML正文元素内利用METADATA指令,能够给组件或工具的范例库增添援用(IIS4.0不撑持这一功效)。
<!--METADATATYPE=”TypeLib”
FILE=”path_and_name_of_file”
UUID=”type_library_uuid”
VERSSION=”major_version_number.minor_version_number”
LCID=”locale_id”
-->
个中:
·path_and_name_of_file是某一范例库文件(.tlb)或ActiveXDLL的相对物理路径,必需供应这一参数大概是type_library_uuid参数。
·type_library_uuid是该范例库的唯独一标识符,必需供应这一参数大概是path_and_name_of_file参数。
·major_version_number.minor_version_number(可选)界说了所需组件的版本。假如没有该版本则利用比来的版本。
·locale_id(可选)是地区标记符。假如在该地区没有发明范例库,盘算机将利用缺省的(安装时界说的)地区。
因而,利用这一手艺,经由过程利用上面的代码,能使内置的ADO预界说常数在ASP页面可用:
<!--METADATATYPE=”TypeLib”
FILE=”C:ProgramFilesCommonFilesSystemadomsado15.dll”
-->
文件名msado15.dll还可用于更高版本(2.50今后)的ADO组件。
假如ASP不克不及装载范例库,就前往一个毛病并中断该页的实行。大概的毛病提醒如表5-1所示:
表5-1毛病提醒代码及申明
错误说明
ASP0222有效的范例库申明
ASP0223未找到范例库
ASP0224范例库不克不及加载
ASP0225范例库不克不及打包(即ASP不克不及从指定的范例库中创立范例库包装工具)
5.2.6在客户端上创立工具实例
在ASP中会商在服务器上实例化工具和组件的手艺时,值得夸大的是在扫瞄器中运转客户端页面而完成一样事情的体例。假如你利用ASP创立包括客户端剧本程序的页面,大概利用<OBJECT>元素创立客户端组件实例,将会发明这长短常有效的。在年夜多半情形下,剧本运转期工具可在客户端上实例化和利用,效果与服务器上的ASP不异。
1.VBScriptCreateObject办法
在客户端利用CreateObject时,在扫瞄器的情况内创立组件或工具实例,它们与扫瞄器运转在不异的内存空间里(即历程内),除非完成的工具是带有.exe扩大文件名的可实行文件。
一般指定工具的ClassID,而不是利用ProgID字符串,如许就不成能与其他安装在客户真个工具产生抵触。
<SCRIPTLANGUAGE=”VBScript”>
DimobjThis
SetobjThis=CreateObject(“clsid:892D6DA7-E0F9-00105A42AF30”)
…
</SCRIPT>
固然也能够利用ProgID,而且利用通用的工具或组件(出格是尺度安装供应的工具或组件),那末失掉毛病的组件的风险是很小的:
<SCRIPTLANGUAGE=”VBScript”>
DimobjThis
SetobjThis=CreateObject(“Scripting.Dictionary”)
…
</SCRIPT>
2.JscriptActiveXObject办法
为了在客户端上实例化Jscript的工具和组件,必需利用ActiveXObject办法和new操纵符:
<SCRIPTLANGUAGE=”JScript”>
varobjMyData=newActiveXObject(‘clsid:892D6DA7-E0F9-00105A42AF30’);
</SCRIPT>
或:
<SCRIPTLANGUAGE=”JScript”>
varobjMyData=newActiveXObject(‘this.object’);
</SCRIPT>
3.<OBJECT>元素手艺
也可以使用<OBJECT>元素创立客户端工具或组件的实例。应省略RUNAT属性大概将其设定为“CLIENT”。但是,这个属性在客户端上是被疏忽的,因而设置这个属性的独一目标就是,在ASP页面利用<OBJECT>元素实例化服务器真个组件实例时避免搅浑。
<OBJECTID=”objThis”RUNAT=”CLIENT”
CLASSID=”clsid:892D6DA7-E0F9-00105A42AF30”
CODEBASE=”http://yourserver.com/components/mycomponent.cab”>
<PARAMNAME=”param1”VALUE=”value1”>
<PARAMNAME=”param2”VALUE=”value2”>
</OBJECT>
注重,这里呈现的CODEBASE属性,暗示同意下载并安装来自URL的组件(假如该组件没有安装)。IE3.0以上的版本有此功效。
关于利用<OBJECT>元素的办法、可以使用的属性、在客户端利用的值,可检察网站http://msdn.Microsoft.com/workshop/author/dhtml/reference/objects/OBJECT.asp,大概Windows2000PlatformSDK文档中的<OBJECT>tags,大概看看《IE5DynamicHTMLProgrammer’Reference》一书,ISBN1-861001-74-6,Wrox出书社。
在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: 我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
页:
[1]