|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;access|封装|数据|数据库封装为dll会带来良多的优点,次要包含只是产权的回护,和效力和平安功能的提拔。这个例子中被封装的dll文件能够埋没access数据库的实践路径。
VB天生的DLL封装ASP代码来毗连数据库(Access)。
本文用一个最复杂的毗连access数据库的例子来讲明怎样将asp代码封装为dll文件。
我们用vb,最多见的体例来封装asp代码。
我们必要封装的工具以下:
Proconn.asp
dimProConn
setProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open"driver={MicrosoftAccessDriver(*.mdb)};uid=;pwd=123;DBQ="&Server.MapPath("DB.asp")
我们将上面的部分封装
"driver={MicrosoftAccessDriver(*.mdb)};uid=;pwd=123;DBQ="&Server.MapPath("DB.asp")
剖析一下这段要封装的内容,
它的前半部分就是一个字符串:
"driver={MicrosoftAccessDriver(*.mdb)};uid=;pwd=123;DBQ="
用&毗连上后半部分的另外一个字符串。
后半部分的另外一个字符串是Server.MapPath工具函数的前往值。
上面入手下手这个封装的操纵历程。
起首
新建一个VB下的ActiveXDLL工程,工程的称号Project1变动成ConDBDLL
办法class1的称号变动成cs
工程名和办法名会在挪用这个DLL的时分利用到,人人能够依照本人定名划定规矩界说,但请注重好好利用。
这个DLL的代码部分誊写以下:
DimrpAsResponse
DimrqAsRequest
DimapAsApplication
DimsrAsServer
DimsnAsSession
PublicSubOnStartPage(MyScriptingContextAsScriptingContext)
Setrp=MyScriptingContext.Response
Setrq=MyScriptingContext.Request
Setsr=MyScriptingContext.Server
Setap=MyScriptingContext.Application
Setsn=MyScriptingContext.Session
EndSub
PublicSubOnEndPage()
Setrp=Nothing
Setrq=Nothing
Setsr=Nothing
Setap=Nothing
Setsn=Nothing
EndSub
以上语句是必需的,将底本的工具作了简化处置,并在两个基础函数中作了处置
PublicFunctionConnectDB()AsVariant
ConnectDB="driver={MicrosoftAccessDriver(*.mdb)};uid=;pwd=123;DBQ="
EndFunction
下面这个函数是处置前半部分字符串的,间接前往这个字符串的内容
别的界说上面这个函数来处置后半部份内容
PublicFunctionDBPath()AsVariant
DBPath=sr.MapPath("DB.asp")
EndFunction
注重下面利用的是sr,不要利用成Server了
到了关头的一步,给这个工程增加"MicrosoftActiveServerPagesObjectContextObjectLibrary"的Reference
增加办法,选择菜单中的"Project"->"Reference",在翻开的对话框里选择。
对了,还要选择上"microsoftactiveXdataobjects2.6library"
举行完以上操纵,我们就能够编译天生DLL了,(别忘了后面的改工程名和办法名)
筹办好数据库文件DB.asp(由DB.mdb变动后缀而成,暗码123)
上面就是挪用封装的毗连数据库的asp文件代码:
因为是本人创立的DLL,把它拷贝到响应的目次后,必需注册才干利用。
注册的办法,在“运转”中实行:
Regsvr32.exedllname.dll
作废这个DLL的注册的办法是:Regsvr32.exe/udllname.dll
注册终了,我们的事情基础上就做完了,如今我们可使用如许的封装办法毗连具有针对性的数据库了。
不外有一点必要出格注重的是:
因为
DimConDB
setConDB=Server.CreateObject("ConDBDLL.Conn")
ConDB就是创立的DLL工具
这是在ASP中创立的工具,包含ProConn,那末我们在任何利用到(援用)ProConn.asp的其他ASP文件中记得开释这两个工具!
ProConn.close
setProConn=nothing
setConDB=Nothing
不然体系会因为工具没有开释,而变得愈来愈不胜重负。
关于这个封装ASP代码毗连Access数据库的办法,我想完整合用其他数据库的毗连办法。
再比方,上面的封装的例子:
起首要声名变量:
PrivateWenScriptingContextAsScriptingContext
PrivateWenApplicationAsApplication
PrivateWenRequestAsRequest
PrivateWenResponseAsResponse
PrivateWenServerAsServer
PrivateWenSessionAsSession
为了在WenConnection类中利用ASP的内建工具,必需在此类中写一个OnStartPage子函数。那是由于不管甚么时分用户会见一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的工具请我们利用。这个ScriptingContext包含了全体的ASP办法和属性,这使得我们有才能会见一切ASP的工具。
PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetWenScriptingContext=PassedScriptingContext
SetWenApplication=WenScriptingContext.Application
SetWenRequest=WenScriptingContext.Request
SetWenResponse=WenScriptingContext.Response
SetWenServer=WenScriptingContext.Server
SetWenSession=WenScriptingContext.Session
EndSub
我们既然用OnStartPage函数来创立工具,那末我们这里就用OnEndPage子函数来开释工具:
PublicSubOnEndPage()
SetWenScriptingContext=Nothing
SetWenApplication=Nothing
SetWenRequest=Nothing
SetWenResponse=Nothing
SetWenServer=Nothing
SetWenSession=Nothing
EndSub
接上去界说两个函数RsResult()和DataSource():
PublicFunctionRs(strsqlAsString)AsRecordset
DimoConnAsConnection
DimoRsAsRecordset
DimstrconnstringAsString
strconnstring="driver={sqlserver};server=ServerName;uid=sa;pwd=;"&_
"database=DataBaseName"
oConn.Openstrconnstring
oRs.ActiveConnection=oConn
strsql="Select*FromtableName"
oRs.Openstrsql,oConn,1,3
SetRs=oRs
EndFunction
PublicFunctionDataSourceConnection()AsVariant
DataSourceConnection="driver={sqlserver};server=ServerName;uid=sa;pwd=;database=DataBaseName"
EndFunction
3、存工程名为WenADODB.vbp和保留类名为WenConnection.cls,然后点击“文件”―>“天生WenADODB.DLL”编译成静态毗连库文件。VB在编译好静态毗连库文件的同时也将该组件注册到注册内外了,如果想在别的一台呆板上注册该组件的话,请用以下指令注册或反注册:
Regsvr32x:路径WenADODB.dllx:路径为WenADODB.dll文件寄存的盘符和路径
Regsvr32/ux:路径WenADODB.dll参数U为反注册
4、在ASP文件中挪用WenADODB.dll组件的例子。
<%
SetConn=Server.CreateObject("WenADODB.WenConnection")‘挪用组件创立工具实例
objConn=Conn.DataSourceConnection()
application("strconn")=objConn
setRs=Server.CreateObject("ADODB.Recordset")
sql="select*fromTableNameorderbyIDDESC"
Rs.opensql,application("strconn"),1,3
%>
<Tablealign="center"border="1">
<%
ifRs.BofandRs.Eofthen
Response.Write"临时还没有任何数据。"
else
DowhilenotRs.Eof
%>
<trwidth=100%>
<tdwidth=50%><%=Rs("Field1")%></td><tdwidth=50%><%=Rs("Field2")%></td>
</tr>
<%
Rs.MoveNext
Loop
endif
Rs.Close;SetRs=Nothing
%>
</Table>
5、小结
我们这里只是编写了一个毗连数据库的复杂的静态毗连库文件,使用VB的壮大组件编写功效还能够写出功效加倍壮大跟完全的组件,来完成加倍有用的义务
关头字怎样把ASP编写成DLL
这篇文章次要是把ASP代码酿成组件,开辟者不但是加速了ASP的速率,并且也能回护本人的代码.
上面,我们会来编写一个十分复杂的组件,重点是晓得如何开辟DLL组件,而不是其庞大的代码!这些都要靠你们本人今后的勉力了.
服务器端组件
起首,服务器真个组件要有别于客户真个组件.客户真个组件是经由过程收集传输,依托HTML来起感化.并且只能在IE上有效.可是服务器真个组件是运转在服务器端,它在服务器上实行各类操纵.因而,一切的扫瞄器都能享用,它依托的是服务器而不是扫瞄器.
当IIS被哀求实行一个ASP程序,它起首会在ASP文件中找到〈%%>标签之间的代码,而且实行它(也能够是〈scriptrunat=server>〈/script>之间的代码).假如这个ASP程序在先前被挪用过,那末它就会用内存中的编译过的程序来向用户前往HTML代码,假如没有,那末它就从头编译.这里ASP就比CGI多一点速率上风,由于CGI是每个哀求都利用一个线程.如许就年夜年夜损耗了服务器的资本.
想不想你写的程序本人就可以在IIS运转!?!如今你就好了!利用VB5(固然如今是VB6了),你就可以创建DynamicLinkedLibraries(DLL文件),它能在IIS上间接运转(假如有asp文件来哀求的话).
体系和软件的请求
你必要一个32位的操纵体系来运转ASP.固然你也得安装IIS或PWS.我们上面的程序是在windows95+PWS+VB5的情况下开辟的.
我们入手下手吧
启动你的VB,选择ActiveX图标.这个图标能够在新建工程找到!VB会供应一个默许的工程名(project1)和类名(class1).我们会将这两个名字都改失落.在更名之前,请起首确认我们具有MicrosoftActiveServerPagesObjectLibrary,它在我们的程序十分有效.从菜单当选择"工程",然后在个中选择"援用",就会呈现"援用"窗口
从当选择MicrosoftActiveServerPagesObjectLibrary.
给工程和类定名
如今我们来依据本人的喜好来为project1和class1来定名吧!给它们定名也是很主要的,我们今后会用这个工程名和类名来创立这个组件的实例!前面具体先容.
怎样更名,我就不想多说了!
我们的工程名改成Exmaple,类名为Helloword
如何利用工程和类
如今我们有了我们本人的工程(Example1)和类名(HelloWorld).今后我们就会在ASP代码中利用它们的名字来援用这个组件.在ASP中我们就如许援用,以下:
SetObjReference=Server.CreateObject("ProjectName.ClassName")
关于我们工程的援用就是:
SetObjReference=Server.CreateObject("Example1.HelloWorld")
如今我们就可以用ObjReference来挪用我们在组件中所创立的函数,子程序.上面我们会来写一个SayHello的子程序,我们实行它的代码以下:
〈%
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>
为了在Helloword类中利用ASP的办法,你必需在此类中写一个OnStartPage
子函数.以下:
PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetMyScriptingContext=PassedScriptingContext
EndSub
如今,不管甚么时分用户会见一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的工具请我们利用.这个ScriptingContext包含了全体的ASP办法和属性.完成上,这使得我们有才能会见一切ASP的工具.看上面的代码:
PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetMyScriptingContext=PassedScriptingContext
SetMyApplication=MyScriptingContext.Application
SetMyRequest=MyScriptingContext.Request
SetMyResponse=MyScriptingContext.Response
SetMyServer=MyScriptingContext.Server
SetMySession=MyScriptingContext.Session
EndSub
今后我们就可以用在VB顶用MyApplication来取代ASP中的Application,同理能够取代Request,Server.....,不外我们来是要在OnStartPage之前来声名这些变量:
PrivateMyScriptingContextAsScriptingContext
PrivateMyApplicationAsApplication
PrivateMyRequestAsRequest
PrivateMyResponseAsResponse
PrivateMyServerAsServer
PrivateMySessionAsSession
利用ASP的工具
我们的变量如今就可以像尺度的ASP工具来利用了!好比,我们常常在ASP顶用Request.form()来搜集提交表单的数据.如今我们在我们的VB中完成这个功效,代码以下:
用ASP中完成:
〈%
MyTempVariable=Request.Form("userName")
Response.Write("youentered"&MyTempVariable&"asyourusername")
%>
在VB中完成:
MyTempVariable=MyRequest.Form("userName")
MyResponse.Write("youentered"&MyTempVariable&"asyourusername")
经由过程利用MyResponse来取代Response,我们可以利用一切Response的办法,固然,MyResponse这个名字能够任意来取,你乃至能够就取Response.
另外一件我们得注重的是,我们得在我们的创建的类中,写上OnEndPage子函数,这个OnStartPage是相反的!OnStartPage是创立工具,OnEndPage是消毁工具.
PublicSubOnEndPage()
SetMyScriptingContext=Nothing
SetMyApplication=Nothing
SetMyRequest=Nothing
SetMyResponse=Nothing
SetMyServer=Nothing
SetMySession=Nothing
EndSub
SayHello办法
我们来创建一个子函数,用于显现"HolleWorld".这个SayHello办法只是HelloWorld这个类中一个子函数,我们今后会在ASP顶用以下的显现这个办法
〈%
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>
SayHello的程序,很复杂的!
PublicSubSayHello()
MyResponse.Write("HelloWorld")
EndSub
如今一个小型的组件编写完成,剩下的事情就是编译这个组件,在"工程"菜单中保留它,取甚么名字都能够,我们用Exmaple1.vbp吧!然后就用在菜单当选择"makeexmaple1.dll",将其编译成DLL文件.一个组件就真正完成了!
注重,编译了此组件那末你就得先把你的PWS关失落,然后再编译此组件.不然VB就会告知你些组件在利用中.
在ASP中利用我们的本人的组件.
当你改正了在编译中的毛病,乐成地编译了example1这个工程,如今你就得拿出你最喜好的HTML编纂器来写下上面的语句,保留为ASP文件.
〈HTML>
〈HEAD>
〈TITLE>Example1〈/TITLE>
〈/HEAD>
〈BODY>
〈%
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>
〈/BODY>
〈/HTML>
运转后便可看到了局:
HelloWorld
注册组件
假如你想和你的伴侣,邻人分享你的组件,那末你就得在你的体系上注册你的组件.我们一样平常利用Regsvr32.exe来注册组件.注册后你的组件会呈现在Win95/Win98的windows/system目次中.上面是一个注册的例子:
Regsvr32.exeC:/wwwroot/Example1/Example1.dll
在你的体系中,VB会主动给你注册,以是你很罕用到Regsvr32.exe
这里只是写了一个十分小的组件,你能够写好本人的更年夜的组件,并且还能够用VB中的良多控件.
附录:创建注册DLL和反注册DLL文件的快速体例
有的程序员常常要注册大概反注册本人写的dll文件,加一个快速体例会削减本人的事情量:
WindowsRegistryEditorVersion5.00
[HKEY_CLASSES_ROOTdllfileshell]
[HKEY_CLASSES_ROOTdllfileshellegister]
[HKEY_CLASSES_ROOTdllfileshellegistercommand]
@="regsvr32%1"
[HKEY_CLASSES_ROOTdllfileshellUnregister]
"Command"="regsvr32%1/u"
[HKEY_CLASSES_ROOTdllfileshellUnregistercommand]
@="regsvr32%1/u"
当我们必要注册大概反注册dll时,只需在该dll文件上按下鼠标右键便可!
附录注册和刊出dll文件的办法:
一个疾速注册DLL及OCX的办法
偶然候我们在VB中要援用某一个DLL或OCX时,会呈现文件未注册的讯息,这时候,我们可使用野生注册的办法,也就是间接在命令列中利用regsvr32.exe来做,做法以下:
文件注册:C:WindowsSystemRegsvr32.exeC:WindowsSystemTest.ocx
作废注册:C:WindowsSystemRegsvr32.exe/uC:WindowsSystemTest.ocx
这些举措我们也能够间接写到程序中,利用Shell来实行,可是我如今要说的,都不是下面提到的办法!
1、在资本办理器中找到C:WindowsSystemRegsvr32.exe并【复制】(按鼠标右键选复制)
2、将目次移到C:WindowsSendTo后,实行【贴上快速体例】(按鼠标右键选贴上快速体例)
3、将快速体例称号改成【REGISTER】
4、OK
如今,假如您想替某一个文件做注册举措,比方:C:WindowsSystemTest.ocx,您只需翻开资本办理器,找到C:WindowsSystemTest.ocx,按鼠标右键选【传送到】【REGISTER】便可完成注册举措了!
注:有一个中央要注重的是,Regsvr32.exe只能注册32位的文件!假如要用它来注册16位的文件,会有毛病讯息发生。
附录某些dll文件的功效:
1、轻松修复IE扫瞄器
良多常常上彀的伴侣都有过如许的遭受:IE不克不及翻开新的窗口,用鼠标点击超链接也没有任何反响。这时候重装IE一样平常能办理成绩。实在不用这么贫苦,利用Regsvr32命令就能够轻松弄定。
在“入手下手→运转”中键进“regsvr32actxprxy.dll”命令,点击“断定”按钮,这时候会弹出一个信息对话框“DllRegisterServerinactxprxy.dllsucceeded”,点击“断定”;然后再在“入手下手→运转”中键进“regsvr32shdocvw.dll”命令,单击“断定”便可。从头启动后IE已被轻松修复了。
2、办理Windows没法在线晋级的成绩
Windows的毛病良多,每隔一段工夫就必要利用“WindowsUpdate”晋级程序举行在线晋级,不外“WindowsUpdate”常常呈现没法利用的情形,这时候,我们可使用Regsvr32来办理这个成绩。
在“入手下手→运转”中键进“regsvr32wupdinfo.dll”,点击“断定”按钮,如许在体系中就从头注册了“WindowsUpdate”组件,从头启动后成绩已办理。
3、提防收集剧本病毒有新招
收集剧本病毒嵌在网页中,上彀时在不知不觉中呆板就会传染上这类病毒。笔者以为纯真利用杀毒软件其实不能无效地提防这些剧本病毒,必需从病毒传布的机理动手。收集剧本病毒的复制、传布都离不开FSO工具(FileSystemObject,文件体系工具),因而禁用FSO工具就可以无效地把持剧本病毒的传布。操纵办法很复杂:
在“入手下手→运转”中键进“regsvr32/uscrrun.dll”就能够禁用FSO工具;假如必要利用FSO工具,键进“regsvr32scrrun.dll”命令便可。
4、卸载WinXP自带的“鸡肋”功效
WinXP以功效壮大而著称,但有些功效却经常使人有“鸡肋”之感,好比WinXP自带的ZIP功效和图片预览功效,不但占用了体系资本,功效也远不如第三方软件壮大。实在用Regsvr32命令能够很简单地卸载这些功效。
在“入手下手→运转”中键进“regsvr32/uzipfldr.dll”,单击“断定”按钮,弹出卸载乐成信息框后就完成了ZIP功效的卸载;要恢复ZIP功效,键进“regsvr32zipfldr.dll”便可。一样,卸载图片预览功效也很复杂,在“入手下手→运转”中键进“regsvr32/uthumbvw.dll”便可;假如要恢复该功效,只须键进“regsvr32thumbvw.dll”。
5、让WMP播放器撑持RM格局
良多伴侣喜好用WindowsMediaPlayer(以下简称WMP)播放器,可是它不撑持RM格局,岂非非得安装别的播放软件吗?笔者有举措。
以WinXP为例,起首下载一个RM格局插件,解紧缩后失掉两个文件夹:Release(用于Windows9x)和ReleaseUnicode(用于Windows2000/XP);将ReleaseUnicode文件夹下的RealMediaSplitter.ax文件拷贝到“体系盘符WINDOWSSystem32”目次下;在“入手下手→运转”中键进“regsvr32RealMediaSplitter.ax”,点击“断定”便可。接着下载解码器,如RealAlternative,安装后就可以用WMP播放RM格局的影音文件了。
附录:注册和反注册dll文件的批处置
dll.bat
------------------------------
@Regsvr32.exeAdminDLL.dll
un.bat
-------------------------------------
@Regsvr32.exe/uAdminDLL.dll专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。 |
|