分享

浏览 VB6 网页类

 hanguofeng 2007-04-23
 

浏览 VB6 网页类

by Matthew Gray - GUI Computing

在进行这项课题的研究之前,VB6 WebClasses(网页类)对于我来说是充满神秘的。因此寻找一个充满精力的高手来揭开它的面纱是非常艰巨的。但VB6的组件将使得这一困难变得容易解决。基于这一原因,请跟着我继续满怀信心地阅读下去,我们将会对网页类及其特点有一个较为深刻的了解。

在VB6产生以前,创建IIS应用的唯一方法是编写ASP程序,通过使用凭借VB,Delphi或其他语言建立的组件来创建COM DLLs(动态链接库)。(可以参见Jim Karabatsos的文章,VB6——一个最近问题的首要见解)。对于同样的开发任务,如果你不介意使用一些VBScript和一些Visual Basic的话(当然还可能包括一些Delphi),这将是一个非常好的选择。这是我个人的意见,但并不完全是个人性质的。

网页类改变了一切,使得你可以编写VB6代码,该代码包容在ActiveX DLL中(位于服务器端),这些DDL可以访问来自浏览器的HTTP请求。这就意味着你可以使用VB6代码在ASP中做任何事情,并工作于VB6 IDE中,这是一种巨大的奖赏。

在这种方式下工作意味着你不必了解ASP(许多人也不希望了解),因为IIS应用只需要创建一页包含网页类的ASP网页(并且只要你不热衷与此就不必编辑它)。在这之后,所有的任务都将由新鲜并充满活力的VB来完成(好象这并没有打开一个充满可能性的世界?)

IIS应用的本质特点是将许多工作转移到组件的内部去完成,从而彻底将用户接口与应用的内核部分彻底地分离开。

整个UI都可以由在HTML中带有记名标签的HTML/图形设计器来产生(动态数据会在将来替换这些标签)。网页类在事件中处理这些标签并产生动态的HTML,在写HTML模板的时候你可以替换这些标签。然而,网页类并不局限于产生纯粹的HTML。它们可以返回任何有效的MIME类型,包括诸如动态HTML,XML等。

IIS应用在这方面的发展特点十分类似于标准的VB应用,如果你注意观察了以下的一般生命周期:

VB应用:创建窗体,编写代码,调试和测试,打包和发布。

IIS应用:创建HTML文件,编写代码,调试和测试,打包和发布。

对于那些希望远离这种做法的人来说,如下的说法听起来更加合理:

创建HTML文件,重建基于HTML的ASP,编写VB代码(DDLs或者其他组件),调试和测试,编写ASP代码,“调试”和测试,打包和发布——太麻烦了!

那么网页类又是什么呢?

网页类是一种用Visual Basic创建的位于Internet 信息服务器(IIS)上的COM DLL(动态链接库)。网页类允许你创建服务器端的应用,并能够处理所有网页服务器上的任务,将HTML页作为用户接口,支持在任何浏览器下进行浏览。

一般来说,当编译的时候,网页类产生一个相应的ASP页来用于驻留服务器上的网页类。这个ASP页基本上通过了网页类并包括它的应用、请求、响应以及服务器和会话对象,以使得VB可以使用在代码级这些对象(需要注意的是自己进行这项工作将会十分容易,并由此拥有自己的网页类,但是VB6的网页类将会提供比ASP对象更多的东西(这些我们将在后面看到))。

网页类的生命周期

Initialise,BeginRequest,EndRequest,Start和Terminate都是网页类生命中最关键的事件。从事件的名字中可以推断出,这些事件显然可以与基于表单应用的Load和Unload事件相比较。一个IIS应用的BeginRequest 和EndReques事件可以执行一些Load和Unload事件所能够执行的功能,这些事件可以用来初始化你的应用程序运行所需要的数值,并在请求结束之后清除数据和其他的值。Begin 和EndRequest事件是网页类所独有的。一个网页类可以在其生命进程中接收多个请求。这些事件允许网页类作为一个独立的实体去处理每一个请求。Start事件一般在事件BeginRequest第一次应用被激活时发生,Terminate事件将告诉运行时间DLL(动态链接库)去清除网页类的初始值。

注意:如果网页类的StateManagement属性被设置为wcNoState,网页类将在其每次送一个响应给浏览器时激活Terminate事件。如果网页类的StateManagement属性被设置为wcRetainInstance,网页类仅仅在其调用ReleaseInstance方法以后激活Terminate事件。从我的经验来说,你将在大部分情况下运行于后一种模式。

网页类包括一些什么呢?

网页类包括一个或多个WebItems,它们可以是如下两种东西的一种:

模板(HTML模板文件)——与你的网页类相关的一个HTML文件,该网页类通常包含特殊的标签,数据可以在网页类中通过VB代码进行定制。

Custom WebItems。你建立的Custom WebItems并不与一个HTML页面相关,而是被用来产生对于浏览器的一般性响应。你也可以在这里建立一个定制事件,以便当页面下载或用户选择了HTML元素时调用它(例如,你可以通过你的事件去完成诸如在页面上增添一个标准的页眉、从数据库中读取数据这一类的工作)。

网页类事件
一个网页类可以拥有三种不同类型的事件:

标准网页类事件。这些事件被包装在针对每个WebItem的网页类中。当被用户的请求激活时(例如点击超链接),Respond事件将设定用户的缺省操作——如果没有事件句柄与这个操作相关,那么响应事件将被激活。ProcessTag事件处理模板文件中特定的标签并且将其内容用你指定的数据替代。UserEvent事件处理在运行时间创建的网页类事件。

模板事件。这些事件被HTTP请求激活(例如,超链接,图象,确认按钮)。网页类设计器分析了所有的HTML模板并找到产生HTTP请求的标签并显示它们,从而你可以针对这些编写模板事件代码。

客户WebItem事件。开发者编写这些事件用于与之相关的WebItems,非常类似于你在VB中编写的事件。

有用的属性和方法

下面是你在应用中所需要的最普通的属性和方法:

UrlFor是网页类在浏览器需要调用一个特定的模板或WebItem时用来指定URL的方法。你可以传给它一个模板或WebItem的名字或者一个可选的事件名来代表将被激活的一个用户事件。

UrlData主要用来存储状态信息。该数据被附加在UrlFor URL的后面,并在可以检索。WriteTemplate方法能够处理模板并能够处理HTML文件中的标签(如果存在的话)。

你可以使用网页类的NextItem属性来移动处理不同的Webitem。这可能会激活Respond事件,因为你调用了Webitem,在那里你(非常可能)希望调用WriteTemplate来处理模板中的标签。

状态管理

当我们使用网页类的时候如何进行状态管理呢?

这里有几种途径你可以用来存储针对网页应用的状态:

使用服务器端网页类对象或其他对象来保存客户请求之间的状态信息。

使用数据库来保存请求之间的状态信息。

对于每一个请求,你可以利用cookies ,URLData属性或者隐含的HTML字段将状态信息在服务器和浏览器之间进行移动。

你也可以将这几种方法结合起来进行使用。很重要的一点是,你需要注意我上面描述过的网页类的StateManagement属性。

一个简单的网页类实例

是不是觉得这是不可思议的?这里有一个小的例子,可以带你走向正确的方向——解释起来可能有些投机的成分,但实际上十分容易编程。

这个小的应用是用来输出在HTML表格中所有的服务器变量,因此它是十分基础的。为了建立它,你需要如下的工具:

      Visual Basic 6.0

      IIS 3.0(或以上版本)或Personal Web Server 3.0(或以上版本)

      HTML 编辑器

      标准的浏览器

1.使用合适的HTML编辑器创建一个HTML的模板。为了动态地插入数据例如表格或者任一HTML,你可以通过VB代码简单地将标签放置于你HTML文件中需要插入数据的地方并在标签前面加上WC@(注意:你可以在网页类中改变这个标签头):

<WC@ServerVars>Server vars table goes here</WC@ServerVars>

以下是用于这个例子的HTML文件:

<html>

<head>

<title>WebClasses Server Variables Example</title>

</head>

<body bgcolor="#c1a27d">

<center><H3>Server Variables</H3></center>

<p align="center"><WC@SERVERVARS>Insert

Server vars table Here</WC@SERVERVARS></p>

</body>

</html>

下面在你的网页类中你可以针对你实际的表格来编写代码代替这个标签。

2.启动新的IIS应用并将你的项目命名为WCExample。

3.将你的网页类命名为“clsExample”并将你的NameInUrl属性置为“default(缺省)”(这将是你的应用的起始页,即产生的ASP页用来驻留你的网页类)。注意:关于网页类设计器的更多的信息请参见VB6的帮助文件。

4.保存你的项目。

5.将你的HTML模板加入到你的网页类设计器中。可以通过右键单击设计器中的类名或网页图标来进行实现。将模板改名为ServerVars。

6.删除WebClass_Start()中的代码并将其替换为

Set WebClass.NextItem = WebClass.ServerVars

这将告诉网页类通过ServerVars模板启动应用。

在ServerVars_Respond()事件中插入如下的代码:

ServerVars.WriteTemplate

这将告诉网页类输出模板并用合适的输出来代替标签。

7.为了动态地产生服务器变量表,现在你需要将代码放置于服务器的serverVars_ProcessTag事件中。这个事件将得到上述参数,并通过填写TagContents参数来产生“TagContents”。

TagName代表HTML模板中标签的全名。

TagContents是HTML中你准备用来代替TagName的内容。

SendTags是一个布尔操作符用来允许,它使你能够决定是否将XML标志作为HTML页的一部分送到客户端。该参数缺省设置为False,但你应当设置这个属性为True以便于调试应用程序。

8.将如下的代码拷贝到ServerVars_ProcessTag 事件中:

CDim name As Variant

Select Case TagName

        Case "WC@ServerVars"

         TagContents = "<TABLE BORDER=1>"

         TagContents = TagContents & "<TR><TD><b>Server Variables:</b></TD>"

         TagContents = TagContents & "<TD><b>Value</b></TD></TR>"

         For Each name In Request.ServerVariables

           TagContents = TagContents & "<TR><TD>" & name & "</TD>"

           TagContents = TagContents & "<TD>" & Request.ServerVariables(name)         

           TagContents = TagContents & "</TD></TR>"

         Next

         TagContents = TagContents & "</TABLE>"

        Case Else

         ‘no other tags

         TagContents = "No tags found"

End Select

这个例子将显示ASP请求对象在小站点的使用。

9.编译你的动态链接库。你需要注意产生的ASP页(用你的NameInUrl 属性来命名),并且你的项目DDL现在存在于你的项目目录下。当应用程序第一次运行时,网页类的运行时刻组件(MSWCRUN.DLL)将被创建,并且在你的网页类的生命周期中启动这个事件。

10.在服务器上使用你的别名将浏览器指向你的ASP页,并且你将看到如下这类东西:

 

现在仅仅是个简单的例子,但希望它能给你一些在创建IIS应用方面的启迪。

总结

和其他许多新技术一样,网页类这种方法需要一些时间来进行改善。这也许是一种带有偏见的观点,但我现在更倾向于结合使用ASP和VB。之所以做出这种选择,是因为一方面在这种结合的环境中我自我感觉良好,另一方面,我不敢确信制作服务器端的DDL使用其他选择永远是最佳的(尽管使用HTML模板确实在某些情况下也不是很好)。

但是对于那些不希望借助原始工具进行编程的人们来说,网页类确实是一种十分适合的非常好的开发手段。

作者: Matthew Gray

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多