转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
用VB编写ASP组件(二)         ★★★★

用VB编写ASP组件(二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:706 更新时间:2009/4/23 10:25:58
b>设置工程的引用
  完成了工程属性的选择,下一步就是设置组件运行的ASP环境。通过引用对话框实现这一步。选择菜单“Project / References”,出现一个对话框,选择组件需要的库,在这里选择“Microsoft Active Server Pages Object Library”。



  通过上述引用,在程序中就可以访问ScriptingContext对象,从而能够使用在ASP页面中的5个对象:Request, Response, Session, Application 和 Server。

  如果在列表中找不到“Microsoft Active Server Pages Object Library”,点击“Browse”按钮定位寻找。ASP库引用实际上就是一个后缀为.tlb的文件,默认的路径应该位于:\Program Files\Microsoft Visual Studio\ Common IDE\IDE98\ASP.TLB。

在组件中命名对象

  在开始编程前,工程的唯一类模块class1,实在应该含有一个更有意义的名字。在工程浏览(Project Explorer)窗口中选择类项目:



  (如果在编程环境中看不到这个窗口,按“Ctrl+R”组合键调出它)在上面的窗口中就可以修改类的名字属性,接着出现属性对话框。



  修改名字为VisitorID。如果看不到这个对话框,按F4显示它。

编制代码

  到此为止,已经为组件设置了足够的属性,建立好了在ASP页面中调用组件实例的基础。但是,还需要一个接口方法。下面的图表显示了将要建立的接口(用长方形描述对象的方法,用园描述属性)。



在Visual Basic中,打开类VisitorID的代码编辑器(在工程浏览器中双击它的图标)。

首先建立类的一些变量声明:
Private mstrError As String
Private mobjSC As ScriptingContext
Private Const VISITOR_COOKIE = "VID"
Private Const S_OK = 0  return value from CoCreateGuid
API Declarations
Private Type GUID
 Data1 As Long
 Data2 As Integer
 Data3 As Integer
 Data4(7) As Byte
End Type
Private Declare Function Co   ateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long

上面的代码有三个注意事项:
  • OptionExplicit表示必须在模块中首先声明变量
  • 定义了一个数据结构和一个扩展API函数,并且是私用的(Private)。GetGUID方法将使用它们。
  • 定义了一个ScriptingContext类型的对象变量,ASP处理器根据这个应用传递给组件。

ASP接口

  因为编制的组件是在ASP页面中使用的,所以需要一对方法,从而可以被ASP处理器调用,这对方法是:OnStartPage 和 OnEndPage。首先看看OnStart:
Public Function OnStartPage(ByVal sc As ScriptingContext)
Dim strID As String
Dim dtmExpires As Date
 IMPORTANT
 NEVER Leave a public method without an error handler.
 An error would bring down the IIS server Instance
 or application.
 On Error Goto er_Fail

 Store the context of the HTTP request
 Set mobjSC = sc


 This component doesnt actually need to store the
 context past the end of this routine,
 but we store it for future development and use.
 Check whether the VID cookie is present in the Request object
 strID = Trim(sc.Request.Cookies.Item(VISITOR_COOKIE))


  if no cookie found
 If strID = vbNullString Then
 sc.Response.Cookies.Item(VISITOR_COOKIE) = GetGUID
 End If


 Now set the lifetime of the cookie
 dtmExpires = DateAdd("m", 3, Now)
 sc.Response.Cookies.Item(VISITOR_COOKIE).Expires = Day(dtmExpires) & _
 " " & MonthName(Month(dtmExpires)) & " " & Year(dtmExpires)

 Exit Function

 THE ERROR HANDLER
er_Fail:
 just add some text to the error info property
 mstrError = mstrError & Err.Description & ":" & Err.Description & vbCrLf
 I do not expect any critical errors
 so continue execution on next line
 Resume Next
End Function

以上方法代码中包含3个部分:

1、ASP处理器检查Scripting Context,并存储引用到事先声明的变量中。
2、检查Request对象的Cookies集合的VID项目,如果没有,就从GetGUID方法中获得一个值。
3、Cookie的使用到期期限设置为此后3个月。
Public Function OnEndPage()
Release Scripting context
Set mobjSC = Nothing
End Function

  OnEndPage方法是放置清理代码的地方。比如说,释放关于ScriptingContext的引用。实际上,并不是必须要保存这个引用,但是为了以后的扩充,还是保存为好。

函数GetGUID

  这个函数的代码可以从MSDN知识库中得到,这里做了一些修改:
Public Function GetGUID() As String
 Dim lResult As Long
 Dim lguid As GUID
 Dim MyguidString As String
 Dim MyGuidString1 As String
 Dim MyGuidString2 As String
 Dim MyGuidString3 As String
 Dim DataLen As Integer
 Dim StringLen As Integer
 Dim i As Integer


 On Error GoTo error_olemsg
 lResult = CoCreateGuid(lguid)
 If lResult = S_OK Then
 MyGuidString1 = Hex$(lguid.Data1)
 StringLen = Len(MyGuidString1)
 DataLen = Len(lguid.Data1)
 MyGuidString1 = LeadingZeros(2 * DataLen, StringLen) _
 & MyGuidString1 First 4 bytes (8 hex digits)
 MyGuidString2 = Hex$(lguid.Data2)
 StringLen = Len(MyGuidString2)
 DataLen = Len(lguid.Data2)
 MyGuidString2 = LeadingZeros(2 * DataLen, StringLen) _
 & Trim$(MyGuidString2) Next 2 bytes (4 hex digits)
 MyGuidString3 = Hex$(lguid.Data3)
 StringLen = Len(MyGuidString3)
 DataLen = Len(lguid.Data3)
 MyGuidString3 = LeadingZeros(2 * DataLen, StringLen) _
 & Trim$(MyGuidString3) Next 2 bytes (4 hex digits)
 GetGUID = _
 MyGuidString1 & MyGuidString2 & MyGuidString3
 For i = 0 To 7
 MyguidString = MyguidString & _
 Format$(Hex$(lguid.Data4(i%)), "00")
 Next i
 MyGuidString contains last 8 bytes of Guid (16 hex digits)
 GetGUID = GetGUID & MyguidString
 Else
 GetGUID = "00000000"  return zeros if function unsuccessful
 End If
 Exit Function
error_olemsg:
 mstrError = "Error " & Str(Err) & ": " & Error$(Err)
 GetGUID = "00000000"
 Exit Function
End Function

  这个方法本质上是调用API函数,并且将它提供的数据格式化为一个16进制字符串。这里添加了出错处理代码。

  MSDN中的代码在出错时显示一个信息框,但这对于ASP组件却是不行的,所以这里的代码设置了一个内部字符串变量,作为ErrorInfo属性值。通常而言,我们希望这个字符串是空的,这表示组件没有错误。这个方法也调用了LeadingZeros函数来格式化数据。
Private Function LeadingZeros(ExpectedLen As Integer, ActualLen As Integer) As String
 LeadingZeros = String$(ExpectedLen - ActualLen, "0")
End Function

最后,加入ErrorInfo属性:
Public Property Get ErrorInfo() As String
 ErrorInfo = mstrError
End Property

编译组件和分发组件

  为了使用新组件,必须将之生成DLL文件。选择菜单“File/make ASPToday.dll ...”,接着选择生成组件的路径。

  组件创建完成后,就要建立一个组件分发软件包。除了Visual Studio自带的,有许多第3方工具可以做这件事情,它们都提供了强大的向导来帮助建立一个安装程序,从而在Web服务器上安装组件。

总结

  现在你了解了如何建立一个简单的组件,你可以在对象中加入许多通用的代码。使用这种方法可以很好地实现ASP页面与ADO代码的分离。使用组件编程可以使程序变得简单易懂,因为,它将你的精力集中在应用程序的重要方面上,而将一些重复琐碎的处理细节放到了“黑箱”中,这个“黑箱”就是你建立的组件。

点击本处下载本文相关资料。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台