`

asp如何实现真正的动态包含(include)

 
阅读更多
一、动态包含文件
本文假定读者已经熟悉HTML、ASP和ActiveX对象的使用。在这里,我们将使用FileSystemObject和TextStream对象实现“动态包含”功能,即实现动态的include指令。
通常我们所设想的动态包含是:用一个变量保存待包含文件的名字,然后把该变量传入include指令。相信我们之中的许多人都曾经想要在自己的ASP应用中使用动态包含的文件,但最终却发现服务器并不直接支持动态包含。
首先应该搞清楚下面的代码是无法实现动态包含的:

<%
' 声明用来保存文件名字的变量
Dim MyFile

' 在变量中保存包含文件的名字
MyFile = Request("SomeFileName")

' 将保存有文件名字的变量传递给include指令
%>
<!--#include file=<%=MyFile%>-->
上面的代码之所以不能实现动态包含,是因为ASP对include指令的处理早于脚本代码。如果我们执行上述代码,系统将提示错误说找不到包含文件。
使用包含文件的动机之一是让它作为静态HTML内容的容器,然后通过include指令来引用这个文件。包含文件中的静态HTML通常不作改动,比如标准的页头和页脚。但有些时候我们却需要根据用户的输入或其他条件提供不同的内容。为了不至于为每一种可能的情形分别创建完整的页面,“动态包含”文件这一概念就出现了。然而,正如上面说明的,表面上看起来最为合理的实现方法其实是没有用的。
为了解决这个问题,我们可以用FileSystemObject对象读入目标包含文件并保存到字符串变量,然后将这个字符串变量插入到发送给客户浏览器的页面。下面这个getFileContents函数帮助实现这个处理过程,它读入参数中指定的文件,然后将其内容作为字符串返回。
<%

' 把文件名字传递给函数
Function getFileContents(strIncludeFile)
Dim objFSO
Dim objText
Dim strPage

' 初始化FileSystemObject对象
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

'打开文件并把它传递给TextStream对象(objText)。Server对象的
'MapPath函数用于获得文件的物理路径
Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile))

'读取并以字符串形式返回文件内容
getFileContents = objText.ReadAll

objText.Close
Set objText = Nothing
Set objFSO = Nothing
End Function
%>
使用这个函数即可实现动态地包含文件。首先,我们读入主页面(即包含页面布局和所有静态内容的模板文件)并把它保存到字符串变量;然后再读入包含文件并保存为字符串变量;最后,把保存包含文件内容的变量插入到主页面的内容之中。

<b>二、应用实例</b>
首先我们来看一下模板文件。下面的代码包含了一个HTML注释“<!-- INCLUDE FILE HERE -->”,我们将用包含文件的内容来取代这个HTML注释。
<html>
<body>
<h2>欢迎到访!</h2>
<table width="500" border="1">
<tr>
<td>
<!-- INCLUDE FILE HERE -->
</td>
</tr>
</table>
</body>
</html>
下面再来看一下本例所用的几个包含文件。第一个包含文件是默认的包含文件。默认包含文件是一个表单,允许用户选择打开其他三个包含文件中的其中一个。注意这个表单没有指定“action”属性,这表示表单将提交给它自己(即重新打开dynamicin3.asp)。
<!-- BEGIN DEFAULT INCLUDE -->
<form method="post">
<h3>请选择一个您希望打开的文件</h3>
<p>
<select id=cboFile name=cboFile>
<option value="includefile1.inc">文件 #1</option>
<option value="includefile2.inc">文件 #2</option>
<option value="includefile3.inc">文件 #3</option>
</select>
<input type="submit" value="Submit">
</p>
</form>
<!-- END DEFAULT INCLUDE -->
为简单计,其他三个包含文件的内容都很简单:
<!-- BEGIN INCLUDE FILE #1 -->
<h2 style="color:red">文件 #1 </h2>
<br>
<a href="dynamicinc3.asp">返回默认页面</a>
<!-- END INCLUDE FILE #1 -->

<!-- BEGIN INCLUDE FILE #2 -->
<h2 style="color:green">文件 #2 </h2>
<br>
<a href="dynamicinc3.asp">返回默认页面</a>
<!-- END INCLUDE FILE #2 -->

<!-- BEGIN INCLUDE FILE #3 -->
<h2 style="color:blue">文件 #3 </h2>
<br>
<a href="dynamicinc3.asp">返回默认页面</a>
<!-- END INCLUDE FILE #3 -->
下面是dynamicinc3.asp页面的代码及其说明。
<%
'-------------------------------------------------------------
'getFileContents函数放到ASP文件的最前面
'-------------------------------------------------------------

'声明存放主页面和包含文件内容的变量
Dim strMain, strInclude

'读取主页面的内容并保存到strMain变量
strMain = getFileContents("maintemplate.inc")

'检查cboFile选择框是否已经选择。如是,读取所要求的文件
'否则,读取默认的包含文件
If Request.form("cboFile") = "" Then
strInclude = getFileContents("includedefault.inc")
Else
strInclude = getFileContents(Request.form("cboFile"))
End If

'把合适的包含文件读入到变量strInclude之后
'使用Replace函数将它插入到strMain文件
strMain = replace(strMain,"<!-- INCLUDE FILE HERE -->",strInclude)

'将结果发送到客户端
Response.Write strMain

%>
本例能够正常运行,而且从效果上看达到了动态包含文件的目的。但它没有使用include指令,而是使用了FileSystemObject来替代。
运行这个例子,右击页面并查看源文件,可以发现页面中插入的是默认的包含文件。然后,从选择列表选择一个包含文件。提交表单重新装载页面之后,再查看页面的源文件,可以发现此时插入的是刚才选择的包含文件。
当我们想要分离页面的布局和它的内容时,这种技术是很有用的。我们可以创建描述网站布局的模板,再以包含文件形式制作网站的内容,最后使用ASP就可以方便地把两者结合起来!

分享到:
评论

相关推荐

    真正ASP+ACCESS+JS的动态无缝跑马灯可用代码与详细介绍

    ### ASP+ACCESS+JS 实现动态无缝跑马灯技术详解 #### 一、技术背景介绍 在Web开发中,跑马灯是一种常见的视觉效果,它可以让文字或图片等内容以滚动的方式展示,增加页面的吸引力。本文将详细介绍如何利用ASP、...

    一步一步学ASP--经典教程

    ASP还支持包含文件(`&lt;%@ Include File="..." %&gt;`),这使得代码模块化,便于管理和重用。另外,错误处理也是重要一环,ASP提供了On Error语句来进行异常捕获和处理。 随着学习的深入,你将接触到更高级的主题,如...

    ASP编程速成教程《十天学会ASP》

    ASP(Active Server Pages)是微软开发的一种服务器端脚本环境,用于...这个教程的压缩包文件"十天学会ASP.exe"可能包含视频课程、示例代码、练习题等,提供了一个完整的学习路径,确保你在短时间内快速上手ASP编程。

    比较不错的asp模板引终极讲解(WEB开发之ASP模式)

    为了解决上述问题,本文提出了一种新的ASP模板引擎设计思路,其核心思想是通过预编译的方式,将模板文件中的动态部分转换为ASP代码,从而实现真正的代码与表现层分离。 ### 设计原理 1. **预编译机制**:在模板...

    最全的一天ASP教程

    10. **服务器端包含**:`&lt;%@ Include File="filename.asp" %&gt;`可以将一个ASP文件的内容插入到当前页面中,实现代码复用。 11. **ASP开发工具**:Visual Studio是常用的ASP开发环境,提供丰富的代码编辑、调试和部署...

    asp必学100句经典

    9. **包含文件(Include)**:ASP的&lt;!--#include file="filename.asp"--&gt;指令可以将一个ASP文件的内容插入到当前页面,实现代码复用和模块化。 10. **ASP组件**:IIS服务器上可以安装多种ASP组件,如水晶报表、XML...

    asp实例编程100例

    - 使用`&lt;%@ Include File="..." %&gt;`语句可以将其他ASP文件或文本文件包含进来,实现代码重用和模块化。 8. **URL重写** - ASP可以通过ISAPI筛选器或IIS的URL重写模块实现友好的URL结构,提高SEO效果。 每个实例...

    ASP3《高级编程》(第二部分)

    4.2.1 不可思议的ASP #include指令 100 4.2.2 服务器端包含指令概要 102 4.2.3 服务器端包含指令的例子 104 4.3 ASP Server对象 109 4.3.1 ASP Server对象成员概述 109 4.3.2 创建其他对象的实例 110 4.3.3 ...

    asp傻瓜教程,特别适合于初学者

    7. **包含文件**:使用&lt;%@ Include %&gt;指令,可以在多个页面间共享代码,提高代码复用率。 8. **ASP.NET**:虽然ASP和ASP.NET是两个不同的技术,但了解ASP.NET的发展可以帮助理解ASP的历史地位。ASP.NET是ASP的后续...

    ASP3《高级编程》(第一部分)

    4.2.1 不可思议的ASP #include指令 100 4.2.2 服务器端包含指令概要 102 4.2.3 服务器端包含指令的例子 104 4.3 ASP Server对象 109 4.3.1 ASP Server对象成员概述 109 4.3.2 创建其他对象的实例 110 4.3.3 ...

    ASP.NET 2.0开发技巧

    页面生命周期包括了一系列的关键事件,例如 `Init`、`Load` 和 `PreRender` 等,这些事件在页面的不同阶段被触发,开发者可以通过编写相应的事件处理程序来实现特定的功能。 **1. 页面初始化(Init):** 页面初始...

    10天学会php

    `include`则在执行到该语句时加载,适合动态引入。 3. **注释**:PHP支持单行注释(以`//`开始)和多行注释(以`/*`开始,`*/`结束)。此外,`#`也可用于单行注释,类似于UNIX Shell。 4. **变量类型**:PHP是弱...

    计算机-外文翻译-英文文献-中英版--jsp的技术发展历史大学毕设论文.doc

    JSP在构建动态网页方面具有强大但不复杂的功能,与微软的Active Server Pages(ASP)技术非常相似。这两种技术都允许在HTML代码中混入特定的程序代码,并由语言引擎解释执行这些代码。 1.1 JSP概述 JSP的核心概念...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP...

    PHP面试题(最牛)

    为了避免重复包含,可以使用`include_once`和`require_once`替代。 #### 16. 如何修改SESSION的生存时间 可以通过设置`session.gc_maxlifetime`配置项来修改。 **示例代码**: ```php ini_set('session.gc_...

    editplus 代码编辑器html c++ jsp css

    (技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有...

    Wicket.pdf(Wicket开发指南)

    - **Include:** 用于包含其他页面片段。 - **超链接控件:** - **Link:** 最基础的链接组件。 - **ExternalLink:** 用于跳转到外部 URL。 - **PageLink:** 用于跳转到应用内部的其他页面。 - **...

    C#微软培训资料

    15.4 接口的实现 .182 15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 ...

    学习英语背单词小精灵套装版English Word Eidolon Ark vers

    Right Include Words: 从右边包括取同输入的全部单词内容长度相同的并且截取的内容与输入的内容相匹配的单词 Include Words: 所有在单词中包括输入内容的单词 自动检查语言 根据输入的每一个字或是字母来...

    网管教程 从入门到精通软件篇.txt

    ASP:动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件 AST:Astound多媒体文件;ClarisWorks“助手”文件 Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的...

Global site tag (gtag.js) - Google Analytics