在Web页面中执行Windows程序
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
现在许多公司都面临一个难题:如何在web环境中执行存在的windows应用程序。这里就介绍实现这个功能的技术,它争取对代码做最小的改变,完成在windows环境中应做的一切。
这里想要在web中执行的windows例子程序是非常简单的,它是用vb编写的,其中有一个表单。运行时,在表单上显示雇员的信息,这些信息来源于access数据库的一个表。表单上设有first、next、previous 和 last按钮,从而允许用户浏览记录。同时,还可以通过按钮add、delete 和 update来改变数据。这个程序通过一个com类来与数据库通信,它有下面的方法: addemployee() 在表中添加一个记录,保存新雇员的信息
程序正常运行时,浏览器显示如下:
在传统的web应用程序中,大多数的处理都是在服务器端完成的。这里,我们将尝试在客户端做一些处理,以减少服务器上的工作量。也就是,让客户端完成显示信息的处理工作,并将商业规则和数据库存取留给服务器端。这就象一个n层处理模型。 当用户需要访问另一个不同的数据时,我们也不想从服务器上再调入整个web页面,因此,需要找到一个web客户端在后台与web服务器交流信息的方法。这个例子中,我们使用了微软公司的xmlhttp com对象组件,它是随internet explorer 5.0而来的。当然,也可以编写一个功能类似的java applet来克服这个局限。
服务器端的代码 让我们从研究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://vbxml.com/xml/guides/developers/ado_persist_xml.asp 我们也许曾经使用过ado记录集的save函数,加上adpersistxml,来实现按照xml格式保存,但是在这里,为了简单起见,我们仍使用编制的函数。 下面的代码来自getemployees.asp,它执行getemployees方法,从而可以让你清晰地看到这种技术:
客户端的代码 现在准备编写客户端代码,首先,让我们仔细看看vb应用程序在调用后如何显示信息。在vb表单的on_load方法(参见下面的代码)中,我们调用了com对象组件getemployees方法,这个方法返回一个附带雇员信息的ado记录集。ado记录集的movefirst()、movenext()以及 movelast() 方法建立了记录浏览的方法。 private sub form_load() 'obtain the employee records in a adodb.recordset
另一个较好的解决方法是使用纯java/javascript,它同时可以在非internet explorer的浏览器上应用。这里,我们仍使用xmlhttp对象,它可以让web客户端建立一个到web服务器的http请求。关于对xml http的详细描述,请参考msdn上的文档。 //create an xmldom on the web client machine // node pointing at root node of the xml document // node to point at current record // integer pointing at the current record number
//open a http connection to the url in strurl //send the request //obtain the response received to the xmlresponse variable //since the response is an xml document we can load it to an xmldoc object //set noderoot to point at the root of the xml document
function rstmovefirst() { //if the root node does not have any child nodes then there are //set the nodecurrentrecord to point at the 0th child of the //return success
现在我们在客户机上创建了一个假冒的ado记录集对象,因此就可以象在vb应用程序中一样来处理这些“记录集”。 有了这些函数,剩下的就是编写用户界面,这就象在vb应用程序中一样。比如,在vb应用程序中,“移动到第1条记录”后面的代码是: private sub btnfirst_click() 'move to the first record 'displaycurrentrecord is a function that display the current 'records information end if
function btnfirstclick() { 当需要更新实际的数据库时,就发送更新信息给updateemployee.asp,这个页面将通过com对象的updateemployee方法来更新数据库。上面描述的应用程序,输出到web上,将显示如下图:
在web应用中,要建立适当的计划来转换ado记录集为xml文档。一旦定义明确了,象那样标准的应用将很好实现。另外一个我们想研究的领域是客户端记录集的操纵函数(就是rst*函数)。我们可以编写java applet来处理这些记录集操纵函数,从而在客户端建立了java记录集对象。这种方法将是很面向对象的一种处理方法。 点击此处下载本文相关资料: 该文章在 2010/7/7 23:36:08 编辑过 |
关键字查询
相关文章
正在查询... |