|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全web|window|程序|页面|实行
如今很多公司都面对一个困难:怎样在Web情况中实行存在的Windows使用程序。这里就先容完成这个功效的手艺,它争夺对代
码做最小的改动,完成在Windows情况中应做的统统。
现存的Windows使用程序
这里想要在Web中实行的Windows例子程序长短常复杂的,它是用VB编写的,个中有一个表单。运转时,在表单上显现雇员的信
息,这些信息来历于Access数据库的一个表。表单上设有First、Next、Previous和Last按钮,从而同意用户扫瞄纪录。同时,
还能够经由过程按钮Add、Delete和Update来改动数据。
这个程序经由过程一个COM类来与数据库通讯,它有上面的办法:
AddEmployee()在表中增加一个纪录,保留新雇员的信息
UpdateEmployee()更新一个纪录
DeleteEmployee()删除一个纪录
GetEmployees()猎取一个雇员的信息
程序一般运转时,扫瞄器显现以下:
开辟Web使用程序
在传统的web使用程序中,年夜多半的处置都是在服务器端完成的。这里,我们将实验在客户端做一些处置,以削减服务器上的工
作量。也就是,让客户端完成显现信息的处置事情,并将贸易划定规矩和数据库存取留给服务器端。这就象一个n层处置模子。
当用户必要会见另外一个分歧的数据时,我们也不想从服务器上再调进全部web页面,因而,必要找到一个web客户端在背景与
web服务器交换信息的办法。这个例子中,我们利用了微软公司的XMLHTTPCOM工具组件,它是随InternetExplorer5.0而来
的。固然,也能够编写一个功效相似的Javaapplet来克制这个范围。
服务器真个代码
让我们从研讨VB使用程序的COM类到Web的每个办法入手下手,这能够经由过程编写ASP页面来挪用COM类中的每一个办法完成
(AddEmployee.asp,UpdateEmployee.asp,DeleteEmployee.asp,GetEmployee.asp)。分明了这些,就可以够在Web中存取COM
类办法了。
ASP页面应当可以承受与COM类一样的参数,这些页面向原始的COM类发送挪用。这里次要的区分就是一切的输入是以XML格局
的。我们利用别的一个叫XMLConverter的COM类,转换办法的输入为XML格局。XMLConverter的代码包括鄙人载文件中,它有一个
函数,可以承受一个ADO纪录集做为参数,而且转换为一个XML文档。完成这个目标的函数例子能够从Internet上很简单地找到,比
如:
http://www.vbxml.com/xml/guides/developers/ado_persist_xml.asp
我们大概已经利用过ADO纪录集的Save函数,加上adPersistXML,来完成依照xml格局保留,可是在这里,为了复杂起见,我
们仍利用体例的函数。
上面的代码来自GetEmployees.asp,它实行GetEmployees办法,从而可让你明晰地看到这类手艺:
<SCRIPTLANGUAGE=vbscriptRUNAT=Server>
DeclaretheabovedescribedXMLConverter
DimobjXMLConverter
CreatetheXMLConverterobjectonthewebservermachine
SetobjXMLConverter=Server.CreateObject("XMLConverter.clsXMLConverter")
DeclaretheabovedescribedEmployeeMgrobject
DimobjEmployeeMgr
CreatetheEmployeeMgrobjectonthewebservermachine
SetobjEmployeeMgr=Server.CreateObject("EmployeeMgr.clsEmployeeMgr")
DeclareaStringvaraible
DimstrXML
如今挪用Employees工具的Employees()办法,它将前往一个ADO纪录集工具,我们将这个工具传送给XMLConverter工具的
xmlRecordset()办法,xmlRecordset()卖力将ADO纪录集转换为XML文档。最初,我们取回XML文档,并将它存进strXML字符
串变量中:
strXML=objXMLConverter.xmlRecordset(objEmployeeMgr.GetEmployees)
DestroytheEmployeeMgrobject
SetobjEmployeeMgr=Nothing
DestroytheXMLConverterobject
SetobjXMLConverter=Nothing
WritetheXMLDocumentastheresponse
Response.WritestrXML
</SCRIPT>
然后,用一样的体例来创立页面AddEmplyee.asp、DeleteEmployee.asp和UpdateEmployee.asp。
客户真个代码
如今筹办编写客户端代码,起首,让我们细心看看VB使用程序在挪用后怎样显现信息。在VB表单的On_Load办法(拜见上面的
代码)中,我们挪用了COM工具组件GetEmployees办法,这个办法前往一个附带雇员信息的ADO纪录集。ADO纪录集的MoveFirst
()、MoveNext()和MoveLast()办法创建了纪录扫瞄的办法。
PrivateSubForm_Load()
CreatetheEmployeeMgrObject
SetobjEmplyeeMgr=NewclsEmployeeMgr
ObtaintheEmployeeRecordsinaADODB.Recordset
Setrst=objEmplyeeMgr.GetEmployees
rst.MoveFirst
DisplayCurrentRecord
EndSub
在这类情形下,我们有一个ASP页面GetEmployees.asp,它给出了做为XML文档的信息。以是我们将在web客户端创建一个
XMLDOM工具,而且调进由GetEmployees.asp供应的信息。在这个例子中,我们利用MicrosoftDOMXML来剖析。关于DOMXML解
析的完全文档,请参考MSDN有关文章,好比XMLDOMObjects。
另外一个较好的办理办法是利用纯Java/JavaScript,它同时能够在非InternetExplorer的扫瞄器上使用。这里,我们仍利用
XMLHTTP工具,它可让web客户端创建一个到web服务器的HTTP哀求。关于对XMLHTTP的具体形貌,请参考MSDN上的文档。
//CreateanXMLDOMontheWebClientmachine
varxmlDoc=newActiveXObject("Microsoft.XMLDOM");
//nodepointingatRootnodeoftheXMLDocument
varnodeRoot;
//nodetopointatCurrentRecord
varnodeCurrentRecord;
//IntegerpointingatthecurrentRecordnumber
varnCurrentIndex=0;
//CreatetheMicrosoftXMLHTTPobjectonthewebclientmachine
//Thiswouldhavetobepresentandregisteredontheclientmachine
//InstallingInternetExplorer5.0satisfiesthisrequirement
varobjHTTPRequest=newActiveXObject("Microsoft.XMLHTTP");
//OpenahttpconnectiontotheURLinstrURL
objHTTPRequest.Open("GET",strURL,false,null,null);
//Sendtherequest
objHTTPRequest.send();
//ObtaintheresponsereceivedtothexmlResponsevariable
//ThisresponsewouldbetheXMLdocumentreturnedbythewebserver
varxmlResponse=objHTTPRequest.responseText
//SincetheresponseisanXMLdocumentwecanloadittoanxmlDocobject
xmlDoc.loadXML(xmlResponse);
//SetnodeRoottopointattherootofthexmldocument
nodeRoot=xmlDoc.documentElement;
从下面我们懂得了XML文档的布局,如今能够细心研讨XML文档工具了。我们将编写一个客户真个JavaScript函数
rstMoveFirst(),它能够挪动以后纪录指针到第1条,这与ADO纪录集的MoveFirst办法相似:
functionrstMoveFirst(){
//Errortrapforemptyrecordset
if(nodeRoot.childNodes.length;<1){
//Iftherootnodedoesnothaveanychildnodesthenthereare
//no"records"
returnfalse;
}
nCurrentIndex=0;
//SetthenodeCurrentRecordtopointatthe0thchildofthe
//XMLDocument.The0thchildwouldbethefirstrecord.
//nodeRootistheXMLdocument?documentElement
nodeCurrentRecord=nodeRoot.childNodes(nCurrentIndex);
//ReturnSuccess
returntrue;
}
一样,我们能够编写rstMoveNext()和rstMoveLast()函数,经由过程编写这些代码,我们将能细心地懂得XML文档元素。并且,
再编写一个相似于ADO纪录集upadte办法的函数。
如今我们在客户机上创立了一个冒充的ADO纪录集工具,因而就能够象在VB使用程序中一样来处置这些“纪录集”。
有了这些函数,剩下的就是编写用户界面,这就象在VB使用程序中一样。好比,在VB使用程序中,“挪动到第1笔记录”前面
的代码是:
PrivateSubbtnFirst_Click()
IfNot(rst.EOFAndrst.BOF)Then
Movetothefirstrecord
rst.MoveFirst
DisplayCurrentRecordisafunctionthatdisplaythecurrentrecordsinformation
DisplayCurrentRecord
EndIf
EndSub
在web使用程序中,响应的代码是:
functionbtnFirstClick(){
Movetothefirstrecordintherecordset
NotethatourrstMoveFirstreturnsTrueif
itwassuccessfulandfalseifEOFandBOF
if(rstMoveFirst()){
HereDisplayCurrentRecordisclientsideJavaScript
functionthatdisplaythecurrentrecordsinformationon
thethescreen
DisplayCurrentRecord();
}
}
当必要更新实践的数据库时,就发送更新信息给UpdateEmployee.asp,这个页面将经由过程COM工具的UpdateEmployee办法来更
新数据库。下面形貌的使用程序,输入到web上,将显现以下图:
结论
在web使用中,要创建得当的企图来转换ADO纪录集为XML文档。一旦界说明白了,象那样尺度的使用将很好完成。别的一个我
们想研讨的范畴是客户端纪录集的利用函数(就是rst*函数)。我们能够编写Javaapplet来处置这些纪录集利用函数,从而在客
户端创建了Java纪录集工具。这类办法将是很面向工具的一种处置办法。
点击此处下载本文相干材料:
http://www.asptoday.com/articles/images/20000602.zip
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的 |
|