在脚本中调用脚本
一个用于从 ASP 脚本调用 URL 并读回输出的组件
概述
在编写 ASP 脚本时,有时需要暂时将执行权转移到另一个脚本,然后使用被调用脚本的结果继续执行原始脚本。
这就是 AspRetrieve
组件的作用。您可以将其视为调用一个过程。
AspRetrieve
组件的作用类似于 IIS 5.0 中的新函数 Server.Execute。此外,您可以通过 GET 或 POST 传递参数。
AspRetrieve
组件的功能简介
- 从 ASP 脚本中调用任何 URL
- 通过 URL 本身(即通过 GET)或通过 POST 将参数传递给 URL
- 将被调用 URL 的结果作为字符串检索
因为我只需要有限的功能,所以只有文本结果才能从被调用的 URL 正确返回。也就是说,您可以调用 HTML 页面或 ASP 脚本,但不能调用 GIF 或 JPEG 图像,因为后两者返回二进制数据。
如果您想扩展该功能,我希望拥有这个新版本。
详细说明
AspRetrieve 组件由两部分组成
- 一个 MFC/ATL 组件,它使用 Wininet 函数来调用 URL
- 一些有助于访问 MFC 组件的 ASP 函数
此外,我还包含了一些示例
安装
- 使用 Visual C++ 编译组件的 MFC/ATL 部分(我使用的是 Visual C++ 6 的德语版本,SP3)
- 将组件复制到您想要的任何目录,确保 IIS 运行的帐户 (IUSR_XXX) 具有访问该组件的正确权限
- 使用 regsvr32 注册编译的组件(该文件位于您的 Windows 系统目录中)。只需在命令提示符下键入
regsvr32 aspretrieve.dll
- 将 ASP 函数文件 retrieve.inc 复制到您想要的任何目录
- 在您的项目中包含 retrieve.inc 并开始使用它
用法
当一切都正确安装后,只需在您的 ASP 脚本中包含 retrieve.inc 文件并调用两个函数 Retrieve(url)
和 RetrievePost(url,params)
。您可以使用相对 URL 或绝对 URL 进行调用。
该组件的一个实际用途是在那些需要大量 Response.Write
语句来生成 HTML 输出的地方。这些函数现在可以被分离到额外的 ASP 文件中,使用参数进行馈送并通过 AspRetrieve 组件进行调用。
示例
假设您有一个通过代码创建表格的函数。
如果没有 AspRetrieve 组件,您会这样编写来实现该函数
sub makeTable( byval cols, byval rows ) dim c,r Response.Write "<table border=""0"" width=""100%"">" ' create rows. for r=1 to rows Response.Write "<tr>" ' create cols. for c=1 to cols Response.Write "<td width=""100%""></td>" next Response.Write "</tr>" next Response.Write "</table>" end sub
您像这样调用该函数
<% makeTable 10, 20 %>
当使用 AspRetrieve 时,您在单独的 ASP 脚本中实现该函数,如下所示
<table border="1" width="100%"> <% ' create rows. dim c,r for r=1 to Request("rows") %> <tr> <% ' create cols. for c=1 to Request("cols") %> <td width="100%"></td> <% next %> </tr> <% next %> </table>
然后您可以编写一个包装器来简化调用
sub makeTable( byval cols, byval rows ) Response.Write Retrieve( "maketable.asp?cols="&cols&"&rows="&rows ) end sub
最后,您将在代码中调用包装器
<% makeTable 10, 20 %>
结论
使用 AspRetrieve 的优点是您可以将复杂的应用程序划分为单独的模块。您可以创建一个 ASP 脚本库,您可以根据需要调用它们。
此外,通过减少需要使用 Response.Write
的次数,您可以简化您的代码。将代码放在单独的文件中,您甚至可以使用图形布局工具来修改您的文件,如果您使用 Response.Write
构建页面,这是不可能的。
另一个好处是您不再需要使用 <!--#include--> directive
在“编译时”包含所有文件,而是可以使用 Retrieve
函数在运行时动态“包含”这些文件!(例如,JSP 默认具有此功能)。
如果您有任何问题,请随时通过电子邮件提问:keim@zeta-software.de。