Asp组件中级入门与精通系列

【字号: 日期:2022-11-02浏览:27作者:雯心

Asp组件中级入门与精通系列之一

初级教程写了七篇了,肯定还有一些初级的东西需要写,我会慢慢的进行补充

中级教程的内容:

这可能也是大家最关心的:如:数据库的操作与封装。Asp内置对象的使用。这些部分我会花费较长的篇幅来说明,这一部分内容需要你能够比较熟练的使用ADO操作数据库并且对asp的5大对象比较熟悉。

我们看一下网上比较流传的一些资料:众所周知,ASP内置了Response、Request、Server、Session、Application五个对象,其实这五个内置对象正是IIS控制台初始化的五个ActiveX DLL组件,既然IIS可以初始化这五个组件用于ASP中,我们当然也可以直接在我们的ActiveX DLL中引用这些组件来实现我们的编程,也就是说我们可以在VB应用程序中通过引用这些组件来实现访问ASP内置对象的功能。

只要你安装了PWS4或者IIS4以上的WEB服务器,你就拥有了一个名称叫做“Microsoft Active Server Pages Object”的对象库,我们可以在VB的ActiveX DLL应用中引用这个对象库,通过引用这个对象库,我们就获得了一个对象(类):ScriptingContext,这个对象也正是我们整个文章探讨的核心对象。对象库内的关系如下:

对象库类类成员

ASPTypeLibrary ScriptingContextApplication

Request

Response

Session

Server

通过上面的关系图,我们就可以很容易理解类ScriptingContent。

下面我们来看一个具体的例子吧:

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ1 引用“Microsoft Active Server Pages Object”对象库。 创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'对象的声明Dim myResponse As ResponseDim myRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext) '进行对象的实例化 Set myResponse = myScriptingContent.Response Set myRequest = myScriptingContent.Request Set myServer = myScriptingContent.Server Set myApplication = myScriptingContent.Application Set mySession = myScriptingContent.Session myResponse.Write 'ActiveX DLL组件已经被创建了!'End Sub

'当组件被销毁的时候触发这个事件Public Sub OnEndPage() myResponse.Write 'ActiveX DLL组件已经被销毁!' '销毁对象 Set myResponse = Nothing Set myRequest = Nothing Set myServer = Nothing Set myApplication = Nothing Set mySession = NothingEnd Sub

'定义我们自己的一个组件方法Public Sub HelloWorld() myResponse.Write '这是用asp内置对象写的'End Sub

测试打开visual interdev6.0,生成一个asp文件

程序代码<%@ Language=VBScript %><HTML><BODY><%set obj=server.CreateObject('fCom.fZ1') call obj.HelloWorld() %></BODY></HTML>

配置好虚拟目录,在ie中执行此asp文件,得到结果如下:ActiveX DLL组件已经被创建了!这是用asp内置对象写的 ActiveX DLL组件已经被销毁!

Asp组件中级入门与精通系列之二

我们先来看看Application对象以前使用Application对象常常用于计数器和数据库的连接串我们以计数器为例:先看global.asa文件,这个比较简单

程序代码<script; language =vbscript runat=server>sub Application_onstart Application('Counter')=0end sub</script>

然后

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ2 引用“Microsoft Active Server Pages Object”对象库。 创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'对象的声明Dim myResponse As ResponseDim myRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext) '进行对象的实例化 Set myResponse = myScriptingContent.Response Set myRequest = myScriptingContent.Request Set myServer = myScriptingContent.Server Set myApplication = myScriptingContent.Application Set mySession = myScriptingContent.SessionEnd Sub'当组件被销毁的时候触发这个事件Public Sub OnEndPage() '销毁对象 Set myResponse = Nothing Set myRequest = Nothing Set myServer = Nothing Set myApplication = Nothing Set mySession = NothingEnd Sub'可以看到,把以前asp中写的搬到了vb中,写法是一样的Public Sub ShowCounter() Dim intcounter As Long myApplication.Lock intcounter = myApplication('counter') intcounter = intcounter + 1 myApplication('counter') = intcounter myApplication.UnLock myResponse.Write CStr(intcounter)End Sub

测试

打开visual interdev6.0,生成一个asp文件

程序代码<%@ Language=VBScript %><HTML><BODY><%dim objset obj=server.CreateObject('fCom.fZ2') obj.ShowCounter()%></BODY></HTML>

配置好虚拟目录,需要将global.asa文件放到根目录下,在ie中执行此asp文件,刷新页面,就可以看到一个不断变化的数字。Application的用法就讲到这里。

Asp组件中级入门与精通系列之三

Session相比较就简单多了

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ3 引用“Microsoft Active Server Pages Object”对象库。 创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'对象的声明Dim myResponse As ResponseDim myRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext)'进行对象的实例化Set myResponse = myScriptingContent.ResponseSet myRequest = myScriptingContent.RequestSet myServer = myScriptingContent.ServerSet myApplication = myScriptingContent.ApplicationSet mySession = myScriptingContent.SessionEnd Sub

'当组件被销毁的时候触发这个事件Public Sub OnEndPage()'销毁对象Set myResponse = NothingSet myRequest = NothingSet myServer = NothingSet myApplication = NothingSet mySession = NothingEnd Sub'可以看到,把以前asp中写的搬到了vb中,写法是一样的'得到所有的session的变量和值Public Sub ShowSession()'可以设置超时20分钟mySession.Timeout = 20Dim myitem'得到所有的sessionFor Each myitem In mySession.ContentsmyResponse.Write myitem & ': ' & mySession.Contents(myitem)myResponse.Write '<br>'NextEnd Sub

测试

打开visual interdev6.0,生成一个asp文件配置好虚拟目录,在ie中执行此asp文件,可以看到

name: 龙卷风age: 26特长: 组件

Session的用法就讲到这里。Session其他的用法类似。

Asp组件中级入门与精通系列之四

我们学习来Request看如何在组件中得到页面提交的内容

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ4 引用“Microsoft Active Server Pages Object”对象库。 创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'对象的声明Dim myResponse As ResponseDim myRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext)'进行对象的实例化 Set myResponse = myScriptingContent.Response Set myRequest = myScriptingContent.Request Set myServer = myScriptingContent.Server Set myApplication = myScriptingContent.Application Set mySession = myScriptingContent.SessionEnd Sub

'当组件被销毁的时候触发这个事件Public Sub OnEndPage() '销毁对象 Set myResponse = Nothing Set myRequest = Nothing Set myServer = Nothing Set myApplication = Nothing Set mySession = NothingEnd Sub

'可以看到,把以前asp中写的搬到了vb中,写法是一样的Public Sub ShowRequest() Dim myitem 'Post方式的 For Each myitem In myRequest.Form myResponse.Write myitem & ': ' & myRequest.Form(myitem) myResponse.Write '<br>' Next ‘Get方式的 For Each myitem In myRequest.QueryString myResponse.Write myitem & ': ' & myRequest.QueryString(myitem) myResponse.Write '<br>' Next '单个信息 myResponse.Write '其中一个信息是' & ': ' & myRequest('username') myResponse.Write '<br>'End Sub

测试

打开visual interdev6.0,生成一个fz41.asp文件

程序代码<%@ Language=VBScript %><HTML><BODY><form action='fz4_result.asp' method='post'><INPUT id=text1 name=username><INPUT id=text2 name=age><INPUT id=submit1 type=submit value=Submit name=提交></form></BODY></HTML>

还需要生成一个提交后的fz4_result.asp文件

程序代码<%@ Language=VBScript %><HTML><BODY><%dim objset obj=server.CreateObject('fCom.fZ4') call obj.ShowRequest %></BODY></HTML>

此外我们还要看一看Get方式提交的,所以需要一个fz42.asp文件

程序代码<%@ Language=VBScript %><HTML><BODY><form action='fz4_result.asp?username=''& username &''& age=''& age &''' method='get' id=form1 name=form1><INPUT id=text1 name=username><INPUT id=text2 name=age><INPUT id=submit1 type=submit value=Submit name=提交></form></BODY></HTML>

配置好虚拟目录,在ie中执行fc41.asp文件,输入内容后,点击按钮,可以看到

username: 龙卷风age: 26提交: Submit其中一个信息是: 龙卷风

我们再来执行在ie中执行fc42.asp文件,输入内容后,点击按钮,可以看到

username: 龙卷风age: 26提交: Submit其中一个信息是: 龙卷风

同时地址栏变成了http://yang/xml/fz4_result.asp?username=%C1%FA%BE%ED%B7%E7&age=26&%CC%E1%BD%BB=Submit

未完待续

Asp组件中级入门与精通系列之五

我们学习来看一下Response对象。其实我们前面的教程中一直都在使用这个对象的Write方法。

这里我们用Response对象设置cookie。

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ5 引用“Microsoft Active Server Pages Object”对象库。 创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'对象的声明Dim myResponse As ResponseDim myRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session

'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext)'进行对象的实例化Set myResponse = myScriptingContent.ResponseSet myRequest = myScriptingContent.RequestSet myServer = myScriptingContent.ServerSet myApplication = myScriptingContent.ApplicationSet mySession = myScriptingContent.SessionEnd Sub

'当组件被销毁的时候触发这个事件Public Sub OnEndPage()'销毁对象Set myResponse = NothingSet myRequest = NothingSet myServer = NothingSet myApplication = NothingSet mySession = NothingEnd Sub

'从页面中设置Cookie,组件中得到Public Sub GetCookie()Dim myitem'全部信息For Each myitem In myRequest.CookiesmyResponse.Write myitem & ': ' & myRequest.Cookies.Item(myitem)myResponse.Write '<br>'Next'单个信息myResponse.Write '其中用户姓名是' & ': ' & myRequest.Cookies('username')myResponse.Write '<br>'myResponse.Write '其中用户年龄是' & ': ' & myRequest.Cookies('age')myResponse.Write '<br>'End Sub

'组件中设置cookie,页面中得到Public Sub SetCookie()myResponse.Cookies('com_username') = '龙卷风'myResponse.Cookies('com_age') = 26myResponse.Expires = #9/13/2004#End Sub

编译成Dll文件,系统自动会注册。否则就手工注册 Regsvr32 f:testfcom.dll

测试

打开visual interdev6.0,生成一个fz5.asp文件

配置好虚拟目录,在ie中执行fc5.asp文件,可以看到

龙卷风26age: 26username: 龙卷风com_age: 26com_username: 龙卷风其中用户姓名是: 龙卷风其中用户年龄是: 26

未完待续

Asp组件中级入门与精通系列之六

作为Asp的内置对象,我们最后来学习Server对象

Server对象用的比较多的就是Html编码,Url编码和网页的重定向,传送。

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ6 引用“Microsoft Active Server Pages Object”对象库。 创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'对象的声明Dim myResponse As ResponseDim myRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session

'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext)'进行对象的实例化Set myResponse = myScriptingContent.ResponseSet myRequest = myScriptingContent.RequestSet myServer = myScriptingContent.ServerSet myApplication = myScriptingContent.ApplicationSet mySession = myScriptingContent.SessionEnd Sub

'当组件被销毁的时候触发这个事件Public Sub OnEndPage()'销毁对象Set myResponse = NothingSet myRequest = NothingSet myServer = NothingSet myApplication = NothingSet mySession = NothingEnd Sub

Public Sub ShowHtml(ByVal strHtml As String)myResponse.Write myServer.HTMLEncode(strHtml)End Sub

Public Sub ShowUrl(ByVal strUrl As String)myResponse.Write myServer.URLEncode(strUrl)End Sub

Public Sub ExecuteUrl()myServer.Transfer 'fz5.asp'End Sub

编译成Dll文件,系统自动会注册。

否则就手工注册 Regsvr32 f:testfcom.dll

测试

打开visual interdev6.0,生成一个fz6.asp文件

配置好虚拟目录,在ie中执行fc6.asp文件可以看到

呵呵 测试一下

name=Mrs+%C1%FA%BE%ED%B7%E7&age=26

可以使用IE的查看源文件来看HTML编码

ASP的内置对象就暂时介绍到这里,后面我们还会陆续的学习。

大家也可以举一反三,学习没有介绍到的属性和方法。

Asp组件中级入门与精通系列之七

开始数据库操作。

常见的组件封装

1.把数据库的连接信息封装起来。

1> 直接返回数据库连接串,如,组件中

程序代码Public Function datasource() As Variant datasource = 'driver={sql server};server=yang;uid=sa;pwd=; database=northwind' End Function

asp调用

程序代码set obj=server.CreateObject('webdb.getinfo') oconn=obj.datasource()

这样的缺点是很明显的,在asp文件中,直接response.write oconn即可显示出数据库连接串,并没有起到预期的作用。

2> 返回adodb.connection对象

程序代码Public Function GetConn() As ADODB.ConnectionSet conn = New ADODB.Connectionconn.ConnectionString = 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=;Initial Catalog=Northwind;Data Source=yang'conn.OpenSet GetConn = connEnd Function

Asp调用

程序代码Dim DataQuerySet DataQuery=Server.CreateObject('WebDbtest.GetInfomation')set rs=server.createobject('adodb.recordset') sql='select * from employees' Rs.open sql,DataQuery.getconn,1,3 response.Write Rs('LastName')Response.write DataQuery.getconn.ConnectionStringset Rs=nothing

这样看起来不错,只是Response.write DataQuery.getconn.ConnectionString还是会显示出数据库连接串,大家可以测试。

2.将组件封装到记录集可以看一下前段时间写的http://blog.csdn.net/online/archive/2003/12/11/7764.aspx这段代码不好的一点就是数据库的连接放到了页面中判断,连接成功后,才开始访问数据,个人认为,最好的做法是:

封装到记录集,组件方法中连接数据库,操作完后,及时关闭

尽量在组件中生成HTML代码,做到全部封装。如下面的这种方式

而不是部分的封装。

Asp组件中级入门与精通系列之八

这段时间一直比较忙,呵呵,今天我们来看一下一个完整的数据封装的、带分页的例子

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ8 引用“Microsoft Active Server Pages Object”,”Microsoft Activex Data Object 2.7 Library”对象库。

创建两个组件事件:OnStartPage以及OnEndPage 在事件OnStartPage中创建类ScriptingContent的一个引用。 实例化类ScriptingContent。

代码如下:

程序代码Option Explicit'**************************************************'作者:龙卷风'功能:简单的可以定制的,完全封装的组件'时间:2005-01-01'**************************************************

'对象的声明Dim MyResponse As ResponseDim MyRequest As RequestDim myApplication As ApplicationDim myServer As ServerDim mySession As Session

'私有变量Private mPageSize As LongPrivate mstrSql As String'当组件被创建的时候会触发这个事件Public Sub OnStartPage(myScriptingContent As ScriptingContext) '进行对象的实例化 Set MyResponse = myScriptingContent.Response Set MyRequest = myScriptingContent.Request Set myServer = myScriptingContent.Server Set myApplication = myScriptingContent.Application Set mySession = myScriptingContent.SessionEnd Sub

'当组件被销毁的时候触发这个事件Public Sub OnEndPage() '销毁对象 Set MyResponse = Nothing Set MyRequest = Nothing Set myServer = Nothing Set myApplication = Nothing Set mySession = NothingEnd Sub

'显示TablePublic Function ShowTable() Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Integer Dim j As Integer Dim intPage As Integer Dim intPageCount As Integer Dim strScriptName As String Dim intPos As Integer Dim intFieldCount As Integer '得到路径 strScriptName = MyRequest.ServerVariables('Script_Name') intPos = InStrRev(strScriptName, '/') If intPos <> 0 Then strScriptName = Mid(strScriptName, intPos + 1) End If If IsEmpty(MyRequest('page')) Then intPage = 1 Else intPage = CInt(MyRequest('page')) End If On Error GoTo err conn.Open 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=localhost' rs.Open mstrSql, conn, adOpenStatic, adLockReadOnly '得到记录数 intFieldCount = rs.Fields.Count '输出表格 MyResponse.Write '<table border=1 cellspacing=0 cellpadding=2>'; If Not rs.EOF Then rs.PageSize = mPageSize rs.AbsolutePage = intPage;;; '得到页数 intPageCount = rs.PageCount;;; '处理分页 If intPage < 1 Then intPage = 1 If intPage > intPageCount Then intPage = intPageCount '输出表头 MyResponse.Write '<tr>' For i = 0 To intFieldCount - 1 MyResponse.Write '<th>' & rs(i).Name & '</th>' Next MyResponse.Write '</tr>';;;;; '输出内容 For i = 1 To mPageSize If rs.EOF Then Exit For End If MyResponse.Write '<tr>' For j = 0 To intFieldCount - 1 MyResponse.Write '<td>' & rs.Fields(j).Value & '</td>' Next MyResponse.Write '</tr>' rs.MoveNext Next '输出分页 MyResponse.Write '<tr>' If intPage <> 1 Then MyResponse.Write '<a href='https://www.rkxy.com.cn/bcjs/ & strScriptName & '?page=1>[第一页]</a>' MyResponse.Write '<a href='https://www.rkxy.com.cn/bcjs/ & strScriptName & '?page=' & intPage - 1 & ' >[上一页]</a>' End If If intPage <> intPageCount Then MyResponse.Write '<a href='https://www.rkxy.com.cn/bcjs/ & strScriptName & '?page=' & intPage + 1 & '>[下一页]</a>' MyResponse.Write '<a href='https://www.rkxy.com.cn/bcjs/ & strScriptName & '?page=' & intPageCount & '>[最后一页]</a>' End If MyResponse.Write '页次:<FONT COLOR='Red'>' & intPage & '/ ' & intPageCount & '</FONT>' MyResponse.Write '</tr>' End If MyResponse.Write '</table>'; '释放资源 If Not rs Is Nothing Then If rs.State = 1 Then rs.Close End If Set rs = Nothing End If If Not conn Is Nothing Then If conn.State = 1 Then conn.Close End If Set conn = Nothing End If Exit Function

err: MyResponse.Write err.Number & err.Description If Not rs Is Nothing Then If rs.State = 1 Then rs.Close End If Set rs = Nothing End If If Not conn Is Nothing Then If conn.State = 1 Then conn.Close End If Set conn = Nothing End IfEnd Function'定义属性Public Property Get ShowPageSize() As VariantShowPageSize = mPageSizeEnd Property

Public Property Let ShowPageSize(ByVal vNewValue As Variant)mPageSize = vNewValueEnd Property

Public Property Get strSQL() As VariantstrSQL = mstrSqlEnd Property

Public Property Let strSQL(ByVal vNewValue As Variant)mstrSql = vNewValueEnd Property

编译成Dll文件,系统自动会注册。否则就手工注册 Regsvr32 f:testfcom.dll

测试

打开visual interdev6.0,生成一个fz8.asp文件

程序代码<%@ Language=VBScript %><HTML><BODY><%dim objset obj=server.CreateObject('fcom.fz8') '每页显示的记录数obj.ShowPageSize=10'显示的sql语句obj.strSQL='select customerid,companyname,contactname,contacttitle,address from customers'obj.ShowTable() %></BODY></HTML>

相关文章: