ASP 本身不支持动态包含文件,现在的动态包含是通过 FSO 把被包含的文件合并到主文件里再运行。以下也有把形如 <!--#include file="filename.asp" --> 的普通包含文件方式称作“传统引用”,用函数实现的动态包含文件称作“动态引用”。常见的程序如下:
以下为引用的内容:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
set f=nothing
set fso=nothing
set re=new RegExp
re.pattern="^\s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
do while aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%\>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
loop
Response.write Mid(content,aspEnd)
set re=nothing
End Function
使用范例:include("youinc.asp")
但这处函数在处理补包含的文件中还有包含文件时就不灵了。我在以上函数的基础上改进出来如下函数,在被包含文件中还有普通的包含文件 <!--#include file="filename.asp" --> 也可正常运行。
Function includeconvert(oRegExp, strFilename, strBlock)
Dim incStart, incEnd, match, oMatches, str, code
'用提取ASP代码的相同方式提取出include 部分的文件名,其余部分原样输出
code = ""
incEnd = 1
incStart = InStr(incEnd,strBlock,"<!--#include ") + 13 '要找个目标字符串<!--#include 正好是13个字符,所以要+13
Do While incStart>incEnd+12 '两个引用间距最小就是连续的--><--#,incStart是从<!--#include起数13个字符,所以要比前一个incEnd要至少多 13-1 得到的>incEnd+12的条件
str = Mid(strBlock,incEnd,incStart-incEnd-13)
str = Replace(str, """", """""") '把单个双引号换成两个双引号
str = Replace(str, VbCr, "")
str = Replace(str, VbLf, "")
str = Replace(str, VbCrLf, "")
code = code & VbCrLf & "Response.Write """ & str & """"
incEnd=InStr(incStart,strBlock,"-->")+3
oRegExp.pattern="(\w+)=""([^""]+)""" '匹配 file="filename.ext" 或 virtual="virtualname.ext",捕捉类型及文件名两个子串
Set oMatches = oRegExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Set match = oMatches(0) '确定只有一组捕捉时,要得到这一组匹配的子串,可以这样做,省去用 For Each match In oMatches …… Next
code = code & include(Mid(strFilename, 1, InStrRev(strFilename, "/")) & match.SubMatches(1)) 'Mid(filename, 1, InStrRev(filename, "/")) 是在被引用的子文件名有路径时,把路径提取出来,加在子文件中传统引用的文件名前面,以找到正确的打开文件路径,因为动态引用时的文件路径是相对主文件而言的。要第二个匹配子串用SubMatches(1)
以下为引用的内容:
incStart = InStr(incEnd,strBlock,"<!--#include ")+13
Loop
str = Mid(strBlock,incEnd)
str = Replace(str, """", """""") '把单个双引号换成两个双引号
str = Replace(str, VbCr, "")
str = Replace(str, VbLf, "")
str = Replace(str, VbCrLf, "")
code = code & VbCrLf & "Response.Write """ & str & """"
includeconvert = code
End Function
Function include(filename)
Dim re, content, fso, f, aspStart, aspEnd, code
Set fso=CreateObject("scripting.FileSystemObject")
Set f=fso.OpenTextFile(Server.MapPath(filename))
content=f.ReadAll
f.close
Set f=nothing
Set fso=nothing
code = ""
aspEnd=1
aspStart=InStr(aspEnd,content,"<%")+2
Set re=new RegExp
Do While aspStart>aspEnd+1
'传统引用<!--#inclde 肯定是在ASP代码段以外的,所以先转。
code = code & includeconvert (re, filename, Mid(content,aspEnd,aspStart-aspEnd-2))
aspEnd=InStr(aspStart,content,"%\>")+2
re.pattern="^\s*=" '这段正则替换原来是把 <% = str % > 换回成标准的 <%Response.Write str % >
code = code & VbCrLf & re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write ") 'ASP块前面再加回车换行,以避免连接块之间多个 Response.Write在同一行的错误
aspStart=InStr(aspEnd,content,"<%")+2
Loop
code = code & includeconvert (re, filename, Mid(content,aspEnd))
Set re=nothing
include = code
End Function
方便起见,以上函数最终返回的是整合了包含文件的整个 ASP 代码,使用时还要再用 Execute 执行之,即使用时需要:Execute(include("file.asp"))。
以上函数对被包含文件与主文件同一路径时测试通过,未对被包含文件与主文件路径不同的情况做进一步容错,时间有限,欢迎有兴趣的朋友提出意见和改进。
分享到:
相关推荐
- 提供的 `include` 函数实现了动态包含的功能,可以有效地读取文件、解析 ASP 代码块并执行它们,从而实现预期的动态包含效果。 - 使用这种技术时需要注意安全性和性能问题,特别是当包含外部文件时要确保文件来源...
ASP动态包含技术是一种在ASP(Active Server Pages)脚本中加载和执行其他ASP页面或组件的方法,这在构建大型Web应用程序时非常有用,因为它允许代码重用和模块化设计。这个"ASP动态包含技术DEMO(asp_dynamic_...
经常有这样的要求,根据不同的需求要求include不同的文件如各个人的不同设置,所以要求能动态include文件受<! #include file=”filename.asp” –> 宏限制 必须存在该文件并且会预先编译(不管前面是否加以条件...
通过本文介绍的方法,开发者可以轻松地在 ASP 应用中实现动态 include 文件的功能,进而支持更为灵活的多模板实现。这种方法不仅提高了代码的可维护性和可扩展性,还使得 Web 应用能够更好地满足用户个性化的需求。
8. **包含文件**:使用`<%@ Include File="filename.asp" %>`可以将其他ASP文件包含进来,方便代码重用和模块化开发。 9. **Web服务和XML**:ASP还可以与Web服务交互,通过XML(Extensible Markup Language)进行...
常规的`<% include file="filename.asp" %>`或`<%# virtual "filename.asp" %>`方法是在服务器编译脚本时静态地包含文件,这限制了其在动态场景下的灵活性。为了解决这个问题,我们可以利用`Execute`函数来实现动态...
在其他ASP页面中,只需包含`<% Response.WriteFile "conn.asp" %>`或使用`#include`指令,即可引入`conn.asp`文件,从而利用已定义的`conn`对象执行数据库操作。 总结来说,`conn.asp`文件是ASP中一个用于封装...
- Server-side Include(SSI):将一个或多个文件插入到ASP页面中。 4. ASP编程实践: - 控件使用:如HTML控件、服务器控件,如TextBox、Button等。 - 错误处理:使用On Error语句进行错误捕获和处理。 - 数据...
4. **包含文件(Include)**:ASP支持使用`<%@ Include File="filename.asp" %>`来包含其他ASP页面或包含常用代码的文件,提高代码复用性。 5. **HTML嵌入**:ASP脚本可以嵌入到HTML中,通过`<%...%>`标记来执行...
在ASP.NET中,文件包含的方法主要包括以下几种: 1. **`Response.WriteFile`** 方法: ```asp ("skin/default/footer.txt"); %> ``` 这种方式主要用于将指定路径下的文件内容直接输出到客户端浏览器。适用于...
在ASP.NET中,开发者通常会使用服务器控件如DropDownList来实现,但有时为了减少服务器负担或者避免加载Include文件,可能会寻找其他方法。本解答将深入探讨如何在ASP页面上不依赖Include文件生成选择列表。 首先,...
-- #Include file="common.asp" -->` 用于包含其他ASP文件;而 `<% ... %>` 则是用于包围服务器端脚本代码的标记。 #### 如何使用ASP文件 1. **安装IIS:** - ASP文件需要在支持ASP的Web服务器上运行,最常用的是...
ASP.NET中的`include`机制是一种代码组织和重用的方法,它允许开发者将常见的页面元素或者功能模块拆分到单独的文件中,然后在需要的地方通过`<%@ Include File="..." %>`指令将其引入到主页面中。这种做法有助于...
ASP.NET 服务器端指令 include 是一种强大的指令,允许开发者将外部文件包含到 ASP.NET 文件中,包括网页(.aspx 文件)、用户控件文件(.ascx 文件)和 Global.asax 文件。include 指令的基本功能是将指定文件的...
7. **包含文件和模板**:ASP支持使用Include指令来引入其他文件,这样可以实现代码复用和模块化设计。这通常用于创建页头、页脚或通用函数库。 8. **状态管理**:在ASP中,可以使用Cookies和隐藏表单字段来管理...
### ASP无组件多文件上传知识点解析 #### 一、ASP无组件上传原理及应用场景 **ASP无组件上传**,指的是在使用ASP(Active Server Pages)技术进行网站开发时,不依赖于任何第三方组件来实现文件上传功能的方式。...
ASP(Active Server Pages)是一种微软开发的服务器端脚本环境,用于创建动态网页或Web应用程序。而PHP(Hypertext Preprocessor)则是一种开源、跨平台的服务器端脚本语言,广泛应用于Web开发。"asp转php软件 asp2...