65.9K
CodeProject 正在变化。 阅读更多。
Home

在脚本中调用脚本

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.40/5 (5投票s)

2000年1月30日

CPOL
viewsIcon

160211

downloadIcon

1018

一个用于从 ASP 脚本调用 URL 并读回输出的组件

  • 下载源文件 - 27.5 Kb
  • 概述

    在编写 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

    © . All rights reserved.