以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Dot NET,C#,ASP,VB 』 (http://bbs.xml.org.cn/list.asp?boardid=43) ---- [转帖]Asp深度揭密 (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=11008) |
-- 作者:愚者 -- 发布时间:10/16/2004 12:08:00 AM -- [转帖]Asp深度揭密 Asp深度揭密(上) 一、Asp基本知识 1.Asp是Active Server Pages的简称,是解释型的脚本语言环境; 例子: HelloWorld_1.asp 效果: 效果: 注意:Asp不区分大小写;变量无需定义也可使用,转换方便;语法检查很松。 可以使用下面的任何ASP内置对象,而不必在ASP脚本中特别声明。 1. Request: 定义:可用来访问从浏览器发送到服务器的请求信息,可用此对象读取已输入HTML表单的信息。 集: 例子: request_url.asp '判断用户输入是否正确 '打印变量 效果: 思考:变量是如何在URL中传递和被Asp页面获取的? <center> request_form.asp '判断用户输入是否正确 '打印变量 注意:form的action的指向,request_form.asp和request_url.asp在源代码上的区别? 2. Response: 定义:用来向浏览器回发信息,可用此对象从脚本向浏览器发送输出。 集: 方法: 属性: 例子: response_redirect.asp 效果: 效果: 3. Server 定义:可在服务器上使用不同实体函数,如在时间到达前控制脚本执行的时间。还可用来创建其他对象。 方法: 例子: server_htmlencode.asp 效果: 思考:为什么不是a""time_now这种效果?源文件是怎么了? 效果: 思考:如何获取站点根目录的实际路径?如何获取某个目录的实际路径? 效果: 4. Application 定义:用来存储、读取用户共享的应用程序信息,如可以用此对象在网站的用户间传送信息,当服务器重启后信息丢失。 方法: 事件: 例子: application_counter.asp response.write "您是本站第 "&Application("clicks")&" 位访客!" 效果: 您来自 10.1.43.238 思考:本例中lock和unlock有何作用? 5. Session 定义:存储、读取特定用户对话信息,如可存储用户对网站的访问信息,当服务器重启后信息丢失。 方法: 属性: 事件: 例子: session_counter.asp response.write "您是本站第 "&session("clicks")&" 位访客!" 效果: 您来自 10.1.43.238 思考:既然session和application都能做到计数,那它们之间有什么区别?如果要做到满100重新开始计数如何实现? 三、使用Asp操作数据库: 1.通过ODBC或者OLE方式连接的区别? 现在有两种连接数据库的方法。一方面,可以用ODBC产生一个连接,这种连接与任何有ODBC驱动器的数据库(即基本上是市场上所有的数据库)兼容;另一方面,可以用原始OLE DB提供商产生一个连接。 该用哪个提供商?尽可能用原始OLE DB提供商,因为它提供了对数据更有效的访问。Microsoft正逐步用OLE DB取代ODBC标准,应该仅仅在没有原始OLE DB提供商时使用ODBC。 ⑴.用ODBC方式连接SQL Server: ⑵.用OLE方式连接SQL Server: 2.操作数据库:Connection和Recordset 联合使用connection和recordset操作数据库,或者只使用connection操作数据库。 例子: ⑴.联合使用connection和recordset操作数据库 use_db_1.asp 效果: use_db_2.asp 效果: 思考:两种方式有和区别?各应用于什么场合? 3.如何使用事务处理、存储过程和视图? ⑴.使用存储过程 ①.定义好存储过程 CREATE PROCEDURE [output_1] CREATE PROCEDURE [return_1] CREATE PROCEDURE [user_info_1] CREATE PROCEDURE [user_info_2] CREATE PROCEDURE [user_info_3] AS ②.在Asp中调用 use_proc.asp '使用recordset调用带两个输入参数和返回纪录集的存储过程 '使用recordset调用无输入参数,返回纪录集的存储过程,可以使用recordcount等属性 '使用command调用带输出参数的存储过程 '使用command调用带两个输入参数和返回值的存储过程 conn.close 效果: 普通的调用方法: 返回纪录集,可以使用recordcount等属性: 调用带输出参数的存储过程: 调用带两个输入参数和返回值的存储过程: 注意:若存储过程无参数,则调用的sql语句直接为存储过程名,一个参数为“存储过程名 参数”,若是多个参数,则“存储过程名 参数1,参数2,……,参数n”;如果在sql语句中加入exec,则在返回的记录集中可以使用recordcount等属性;如果想获得存储过程的返回值或输出参数,可以使用command对象。 ⑵.使用事务处理 ①.Asp内嵌的事务支持 例子: sql="delete from user_info" ②.数据库级的事务 i.创建存储过程 CREATE PROCEDURE [user_info_2] ii.在Asp中调用 use_transaction_2.asp sql="user_info_2 '"&request.querystring("user_name")&"','"&request.querystring("password")&"'" set rs=server.createobject("adodb.recordset") ⑶.使用视图 4.一个数据库分页的例子 db_page.asp if rs.recordcount>0 then '如果有记录 '显示翻页按钮 '关闭对象,释放内存 |
-- 作者:愚者 -- 发布时间:10/16/2004 12:10:00 AM -- Asp深度揭密(下) 四、Asp组件的开发与使用: 1. 组件的特点? l 优点: 2. 如何使用VB开发? ⑴.打开VB>>New Project>>ActiveX DLL ⑵.修改项目名称为course
⑶.修改类模块的名字为conn_db ⑸.修改类代码如下: '建立数据库连接并输出数据库字段 Sub conn_db() If rs.recordcount > 0 Then ⑹.添加一新类cutstr ⑺.修改类代码如下: '截取字符串 ⑻.File>>Save ⑼.File>>make course.dll 3. 注册组件:MTS和regsvr32.exe 有两种方式注册组件:MTS和使用regsvr32.exe。MTS是值得推荐的,因为它具有下列优点: 要想使组件具有MTS的特性,必须对组件做少许改动。在NT和98下开发时,必须在项目中引用Microsoft Transaction Server Type Library,在Windows 2000下开发,必须引用COM+ Service Type Library。 ⑴.regsvr32注册: regsvr32.exe是system32下面的一个可执行文件,它将组件信息读入注册表,以便Asp调用。 ①.开始>>程序>>管理工具>>组件服务 ②.展开目录至如下状态:
③.按照向导,下一步,直到如下对话框,点击“创建一个空的应用程序”:
④.在接下来的对话框中,为应用程序起名为“course”,其他默认,直至完成 ⑤.展开course应用程序,右键,新建一个组件
⑥.按照提示,继续,出现如下对话框时,选择“导入已被注册的组件”
⑦.选择我们开发的组件,下一步,直至完成
⑧.这时候,可以发现course应用程序下已经多了两个组件:
4. 在Asp中调用组件 asp_use_com.asp set conn_obj=server.createobject("course.conn_db") 效果: ahyi tuth 说明调用成功。 5. 卸载组件 ⑴.使用regsvr32注册的组件,使用-u开关卸载:
注意:先进入组件dll所在的目录,然后使用“regsvr32 –u dll_file_name”卸载;卸载后重启IIS即可。 ⑵.使用MTS注册的组件,先在“组件服务”中删除对应的应用程序,然后再执行步骤 ⑴ 以彻底卸载组件。
6. Dll组件存放位置和权限设定 ⑴.我们只需要把编译生成的Dll文件拷贝出来即可,其他的文件不用做处理 7. 其他 如何在组件中使用Asp的对象以方便的将Asp代码移植为COM组件? 1.Web站点选项卡:IP、端口、虚拟主机、连接、日志 1. 发送邮件(JMail;Ms smtp) 使用Microsoft Smtp发送电子邮件 该子程序接受4个与下列各条对应的参数。 使用方法: IF toWho <> "" THEN 使用Jmail发送Email 2. 解压Zip文件(Wscript.Shell和Winzip command line;Java组件) ⑴.安装Winzip 8.1以上 '删除zip文件 '判断是否成功以继续操作 3. 操作XML文件 本次交流时间有限,有时间再做详细探讨 4.文件上传 ⑴.安装文件上传组件Asp fileup(支持多文件上传,文件类型及大小判断,文件上传后改名等) <center> '定义获得文件后缀的函数 '定义获取文件正名的函数 '创建文件上传组件的对象 '循环读取用户上传的文件,并保存在服务器上 '当用户没有选择文件或文件大小超过10m时返回到选择上传文件的页面 '获取保存的路径 '保存文件 next response.redirect "upload_file.htm" 5.驱动器/目录/文件操作 本次交流时间有限,有时间再做详细探讨 6. Asp编写与调试经验:cookies和session如何选择、cookies数量陷阱、页面过期和缓冲设定、移植性如何保证、如何应付内部服务器500错误…… 1.Cookies和Session的选择: 2.Cookies数量陷阱: 例子: 测试一维Cookies数量极限: 效果: for i=1 to 50 效果: 测试二维Cookies数量极限: 效果: 3.页面过期和缓冲设定 4.移植性的保证 5.调试内部服务器500的错误 7. 操作Word文档 ⑴.安装Office 2000,其中Word 2000必选 Sub instead(word) w1="word.activedocument.saveAs"&chr(32)&chr(34)&filenames&chr(34) <!--#include file="opr_doc_inc.asp"--> Dim wApp 效果:看看生成了doc文件吗?这个新建的doc文件和模版文件有什么区别?起草人和日期发生了变化了吗?保存一下,看看新生成的doc文件的内容。 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[return_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info_2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info_3]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) CREATE TABLE [dbo].[user_info] ( ALTER TABLE [dbo].[user_info] WITH NOCHECK ADD SET QUOTED_IDENTIFIER OFF CREATE PROCEDURE [output_1] SET QUOTED_IDENTIFIER OFF CREATE PROCEDURE [return_1] SET QUOTED_IDENTIFIER ON CREATE PROCEDURE [user_info_1] SET QUOTED_IDENTIFIER OFF CREATE PROCEDURE [user_info_2] SET QUOTED_IDENTIFIER OFF CREATE PROCEDURE [user_info_3] AS |
-- 作者:愚者 -- 发布时间:10/16/2004 12:11:00 AM -- 各位,不好意思,小弟为了申请版主,只能这样做。 如果有侵犯了您的版权。小弟会在第一时间内删除。 小弟的邮箱是:suguanyu2003@163.com QQ:46397874 谢谢!! |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
5,179.688ms |