冷月葬花魂 发表于 2015-1-16 23:22:03

ASP教程之在Web页面中实行Windows程序

缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用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

想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的

只想知道 发表于 2015-1-20 09:35:40

你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

简单生活 发表于 2015-1-29 06:31:05

我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。

乐观 发表于 2015-2-5 23:15:06

跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组

透明 发表于 2015-2-14 04:27:16

最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。

爱飞 发表于 2015-3-4 04:33:49

Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件

金色的骷髅 发表于 2015-3-11 16:40:20

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

变相怪杰 发表于 2015-3-19 02:19:18

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

蒙在股里 发表于 2015-3-27 03:09:27

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
页: [1]
查看完整版本: ASP教程之在Web页面中实行Windows程序