⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asp深度揭密(下).htm

📁 较为详细的介绍了asp自定义的各种函数,方便asp的各种开发.
💻 HTM
📖 第 1 页 / 共 3 页
字号:
          <TD align=middle class=p4 
            colSpan=2><B>Asp深度揭密(下)</B></FONT><BR>2002-9-9&nbsp;&nbsp;动网先锋 
</TD></TR>
        <TR>
          <TD class=p4 colSpan=2>
            <BLOCKQUOTE><BR>四、Asp组件的开发与使用:
              <P></P>
              <P>1. 组件的特点?</P>
              <P>l 优点:<BR>n 调用方便,节省代码<BR>n 安全性高<BR>n 支持事务处理,多组件联合<BR>n 
              运行速度快<BR>n 升级、修改组件不需修改页面,因此扩展性好<BR>l 缺点:<BR>n 开发及调试困难</P>
              <P>2. 如何使用VB开发?</P>
              <P>⑴.打开VB&gt;&gt;New Project&gt;&gt;ActiveX DLL</P>
              <P>⑵.修改项目名称为course</P>
              <P></P>
              <P>⑶.修改类模块的名字为conn_db</P>
              <P><BR>⑷.Project&gt;&gt; References,引用COM+ Service Type 
              Library和Microsoft Active Server Pages Object Library。</P>
              <P>⑸.修改类代码如下:</P>
              <P>'建立数据库连接并输出数据库字段<BR>Dim Response As Response<BR>Dim Request As 
              Request<BR>Dim Server As Server<BR>Dim Application As 
              Application<BR>Dim Session As Session<BR><BR>Private Sub 
              Class_Initialize()<BR>Dim objContext As ObjectContext<BR>Set 
              objContext = GetObjectContext()<BR>Set Response = 
              objContext("Response")<BR>Set Request = 
              objContext("Request")<BR>Set Server = objContext("Server")<BR>Set 
              Application = objContext("Application")<BR>Set Session = 
              objContext("Session")<BR>End Sub</P>
              <P>Sub conn_db()<BR>Set conn = 
              CreateObject("adodb.connection")<BR>conn.open "course_dsn", 
              "course_user", "course_password"<BR>Set rs = 
              CreateObject("adodb.recordset")<BR>rs.open "select * from 
              user_info", conn, 1, 1</P>
              <P>If rs.recordcount &gt; 0 Then<BR>For i = 1 To 
              rs.recordcount<BR>Response.write "&lt;br&gt;" &amp; 
              rs("user_name") &amp; "&lt;br&gt;"<BR>If rs.EOF Then Exit 
              For<BR>rs.movenext<BR>Next<BR>End If<BR>rs.Close<BR>Set rs = 
              Nothing<BR>conn.Close<BR>Set conn = Nothing<BR>End Sub</P>
              <P>⑹.添加一新类cutstr</P>
              <P>⑺.修改类代码如下:</P>
              <P>'截取字符串<BR>Function cutstr(str, length)<BR>If Len(str) &gt; 
              length Then<BR>cutstr = Left(str, length) &amp; 
              "..."<BR>Else<BR>cutstr = str<BR>End If<BR>End Function</P>
              <P>⑻.File&gt;&gt;Save</P>
              <P>⑼.File&gt;&gt;make course.dll</P>
              <P>3. 注册组件:MTS和regsvr32.exe</P>
              <P>有两种方式注册组件:MTS和使用regsvr32.exe。MTS是值得推荐的,因为它具有下列优点:<BR>n 
              动态卸载平衡,提高组件和基于组件的应用程序的升级性。<BR>n 
包含公布和提交事件和队列组件的能力,使得更容易与多个组件联合。</P>
              <P>要想使组件具有MTS的特性,必须对组件做少许改动。在NT和98下开发时,必须在项目中引用Microsoft 
              Transaction Server Type Library,在Windows 2000下开发,必须引用COM+ Service 
              Type Library。</P>
              <P>⑴.regsvr32注册:</P>
              <P>regsvr32.exe是system32下面的一个可执行文件,它将组件信息读入注册表,以便Asp调用。<BR>使用命令行进入组件dll文件所在的目录,执行“regsvr32 
              dll_file_name”即可。</P>
              <P><BR>运行regedit,在HKEY_CLASSES_ROOT下就会找到course.conn_db项和course.cutstr项,表明组件注册成功。</P>
              <P><BR>⑵.使用MTS注册:</P>
              <P>①.开始&gt;&gt;程序&gt;&gt;管理工具&gt;&gt;组件服务</P>
              <P>②.展开目录至如下状态:</P>
              <P></P>
              <P>③.按照向导,下一步,直到如下对话框,点击“创建一个空的应用程序”:</P>
              <P></P>
              <P>④.在接下来的对话框中,为应用程序起名为“course”,其他默认,直至完成</P>
              <P>⑤.展开course应用程序,右键,新建一个组件</P>
              <P></P>
              <P>⑥.按照提示,继续,出现如下对话框时,选择“导入已被注册的组件”</P>
              <P></P>
              <P>⑦.选择我们开发的组件,下一步,直至完成</P>
              <P></P>
              <P>⑧.这时候,可以发现course应用程序下已经多了两个组件:</P>
              <P></P>
              <P>4. 在Asp中调用组件</P>
              <P>asp_use_com.asp<BR>&lt;%<BR>'asp调用com组件<BR>set 
              cutstr_obj=server.createobject("course.cutstr")<BR>response.write 
              cutstr_obj.cutstr("abcdefghijk",3)&amp;"&lt;br&gt;"<BR>set 
              cutstr_obj=nothing</P>
              <P>set 
              conn_obj=server.createobject("course.conn_db")<BR>conn_obj.conn_db()<BR>set 
              conn_obj=nothing<BR>%&gt;</P>
              <P>效果:<BR>abc...</P>
              <P>ahyi</P>
              <P>tuth</P>
              <P>说明调用成功。</P>
              <P>5. 卸载组件</P>
              <P>⑴.使用regsvr32注册的组件,使用-u开关卸载:</P>
              <P></P>
              <P>注意:先进入组件dll所在的目录,然后使用“regsvr32 –u 
              dll_file_name”卸载;卸载后重启IIS即可。</P>
              <P>⑵.使用MTS注册的组件,先在“组件服务”中删除对应的应用程序,然后再执行步骤 ⑴ 以彻底卸载组件。</P>
              <P></P>
              <P>6. Dll组件存放位置和权限设定</P>
              <P>⑴.我们只需要把编译生成的Dll文件拷贝出来即可,其他的文件不用做处理<BR>⑵.要把Dll放到Web站点之外,如system32目录里,防止被下载<BR>⑶.Dll的文件权设置为System读取,Internet用户遍历文件夹/运行文件<BR>⑷.Dll在IIS中去掉所有的权限,如读取,脚本自愿访问等<BR>经过上述处理,可以确保Dll文件的安全。</P>
              <P>7. 其他</P>
              <P>如何在组件中使用Asp的对象以方便的将Asp代码移植为COM组件?</P>
              <P><BR>五、IIS最优化配置</P>
              <P>1.Web站点选项卡:IP、端口、虚拟主机、连接、日志<BR>2.ISAPI筛选器:加入PHP和JSP支持<BR>3.主目录配置选项卡:I 
              IS权限设定(结合文件权)、执行许可、应用程序保护、映射、缓冲、父路径、出错信息<BR>4.其他选项卡:自定义错误、Http头、目录安全性、文档<BR>5.文件压缩带来的好处和坏处</P>
              <P><BR>六、其他</P>
              <P>1. 发送邮件(JMail;Ms smtp)</P>
              <P>使用Microsoft Smtp发送电子邮件<BR>⑴.安装Microsoft SMTP 
              Service<BR>⑵.设置Microsoft SMTP 
              Service<BR>⑶.代码部分:<BR>mail_smtp.asp<BR>&lt;%<BR>sub 
              sendmail(fromwho,towho,subject,body)<BR>dim mymail<BR>set mymail = 
              server.createobject("cdonts.newmail")<BR>mymail.from = 
              fromwho<BR>mymail.to = towho<BR>mymail.subject = 
              subject<BR>mymail.body = body<BR>mymail.send<BR>set mymail = 
              nothing<BR>end sub<BR>%&gt;</P>
              <P>该子程序接受4个与下列各条对应的参数。<BR>l 邮件发送者的email地址<BR>l 邮件接收者的email地址<BR>l 
              邮件主题<BR>l 邮件内容</P>
              <P>使用方法:<BR>&lt;%<BR>fromWho=…<BR>toWho=…<BR>Subject=…<BR>Body=…</P>
              <P>IF toWho &lt;&gt; "" THEN<BR>sendMail fromWho, toWho, Subject, 
              Body<BR>END IF<BR>%&gt;</P>
              <P>使用Jmail发送Email<BR>略,有兴趣可以和我探讨,Jmail这个软件我也有。</P>
              <P>2. 解压Zip文件(Wscript.Shell和Winzip command line;Java组件)</P>
              <P>⑴.安装Winzip 8.1以上<BR>⑵.安装Winzip command 
              line<BR>⑶.将工作目录的文件权设置为Internet用户可以读取、写入和修改<BR>⑷.代码部分:<BR>unzip_a_zipfile.asp<BR>&lt;%<BR>'用shell对象启动程序<BR>'zip_path是具体zip文件的路径,如c:\test.zip<BR>'path是存放解压后文件的路径<BR>'ond是命令行参数<BR>set 
              wshshell = server.createobject("wscript.shell")<BR>issuccess = 
              wshshell.run ("wzunzip -ond "&amp;zip_path&amp;" 
              "&amp;path,1,true)</P>
              <P>'删除zip文件<BR>set 
              myfileobject=server.createobject("scripting.filesystemobject")<BR>myfileobject.deletefile 
              zip_path</P>
              <P>'判断是否成功以继续操作<BR>if issuccess = 0 then 
              <BR>'成功<BR>...<BR>else<BR>'失败<BR>...<BR>end if<BR>%&gt;</P>
              <P>3. 操作XML文件</P>
              <P>本次交流时间有限,有时间再做详细探讨</P>
              <P>4.文件上传</P>
              <P>⑴.安装文件上传组件Asp 
              fileup(支持多文件上传,文件类型及大小判断,文件上传后改名等)<BR>⑵.重起IIS以使上传组件生效<BR>⑶.设置上传目录的文件权为Internet用户可以读取、写入和修改<BR>⑷.代码部分<BR>upload_file.htm<BR>&lt;style 
              type="text/css"&gt;<BR>&lt;!--<BR>.input {background-color: 
              #FFFFFF; border-bottom: black 1px solid;border-left: black 1px 
              solid; border-right: black 1px solid;border-top: black 1px solid; 
              color: #000000;font-family: Georgia; font-size: 9pt;color: 
              midnightblue;}<BR>a:link {color: #1B629C; text-decoration: 
              none}<BR>a:hover {color: #FF6600; text-decoration: 
              underline}<BR>a:visited {text-decoration: 
              none}<BR>--&gt;<BR>&lt;/style&gt;</P>
              <P>&lt;center&gt;<BR>&lt;form enctype="multipart/form-data" 
              method="post" action="upload_file.asp" 
              name="Upload"&gt;<BR>&lt;input type="hidden" name="CopyrightInfo" 
              value="http://www.chinaasp.com"&gt;<BR>请选择文件:&lt;input type="file" 
              name="file1" 
              class="input"&gt;&lt;br&gt;&lt;br&gt;<BR>请选择文件:&lt;input 
              type="file" name="file2" 
              class="input"&gt;&lt;br&gt;&lt;br&gt;<BR>&lt;/form&gt;<BR>&lt;br&gt;&lt;br&gt;<BR>&lt;a 
              href="javascript:document.Upload.submit();"&gt; 提 交 
              &lt;/a&gt;<BR>&lt;/center&gt;</P>
              <P><BR>upload_file.asp<BR>&lt;%<BR>on error resume next</P>
              <P>'定义获得文件后缀的函数<BR>function 
              getfileextname(filename)<BR>pos=instrrev(filename,".")<BR>if 
              pos&gt;0 then 
              <BR>getfileextname=mid(filename,pos+1)<BR>else<BR>getfileextname=""<BR>end 
              if<BR>end function</P>
              <P>'定义获取文件正名的函数<BR>function 
              getfilename(filename)<BR>lens=len(filename)-len(getfileextname(filename))-1<BR>getfilename=left(filename,lens)<BR>end 
              function</P>
              <P>'创建文件上传组件的对象<BR>set 
              fileup=server.createobject("chinaasp.upload")</P>
              <P>'循环读取用户上传的文件,并保存在服务器上<BR>for each f in fileup.files</P>
              <P>'当用户没有选择文件或文件大小超过10m时返回到选择上传文件的页面<BR>if f.filename="" or 
              f.filesize&gt;10485500 then response.redirect 
"upload_file.htm"</P>
              <P>'获取保存的路径<BR>path=server.mappath("upload_file.asp")<BR>path=left(path,len(path)-15)</P>
              <P>'保存文件<BR>f.saveas 
              path&amp;getfilename(f.filename)&amp;"."&amp;getfileextname(f.filename)</P>
              <P>next</P>
              <P>response.redirect "upload_file.htm"<BR>%&gt;</P>
              <P>5.驱动器/目录/文件操作</P>
              <P>本次交流时间有限,有时间再做详细探讨</P>
              <P>6. 
              Asp编写与调试经验:cookies和session如何选择、cookies数量陷阱、页面过期和缓冲设定、移植性如何保证、如何应付内部服务器500错误……</P>
              <P>1.Cookies和Session的选择:<BR>⑴.共同特点<BR>⑵.不同之处:<BR>①.工作方式<BR>②.过期条件<BR>③.对服务器的性能影响</P>
              <P>2.Cookies数量陷阱:<BR>IIS可以保存一般的cookies不超过20个,再定义新的Cookies以前的Cookies的值就丢失了,这样对大型应用显然局限性非常大,如何解决这个问题呢?<BR>答案是使用二维Cookies。</P>
              <P>例子:</P>
              <P>测试一维Cookies数量极限:<BR>test_cookies_1.asp<BR>&lt;%<BR>for i=1 to 
              50<BR>response.cookies("cookies_"&amp;i)=i<BR>next<BR>%&gt;</P>
              <P><BR>test_cookies_2.asp<BR>&lt;%<BR>for i=1 to 
              50<BR>response.write 
              request.cookies("cookies_"&amp;i)&amp;"&lt;br&gt;"<BR>next<BR>%&gt;</P>
              <P>效果:<BR>先访问test_cookies_1.asp,再访问test_cookies_2.asp,,发现了什么?</P>
              <P><BR>test_cookies_3.asp<BR>&lt;%<BR>for i=1 to 
              50<BR>response.cookies("cookies_"&amp;i)=i<BR>next</P>
              <P>for i=1 to 50<BR>response.write 
              request.cookies("cookies_"&amp;i)&amp;"&lt;br&gt;"<BR>next<BR>%&gt;</P>
              <P>效果:<BR>没有Cookies丢失!!!!</P>
              <P>测试二维Cookies数量极限:<BR>test_cookies_4.asp<BR>&lt;%<BR>for i=1 to 
              301<BR>response.cookies("tuht")("cookies_"&amp;i)=i<BR>next<BR>%&gt;</P>
              <P><BR>test_cookies_5.asp<BR>&lt;%<BR>for i=1 to 
              301<BR>response.write 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -