asp包含文件include的用法
#include
#include 命令指示Web 服务器将文件内容插入到HTML 页中。所包括的文件可以包含在HTML 文档中有效的任何内容。必须使用HTML 注释定界符将指令括起来。
该命令既可用在ASP 页中,也可用在HTML 页中。
语法
<!-- #include PathT ype = FileName -->
参数
PathT ype
将FileName 的路径类型。路径可为以下某种类型:
路径类型含义
文件该文件名是带有#include 命令的文档所在目录的相对路径。被包含文件可位于相同目录或子目录中;但它不能处于带有#include 命令的页的上层目录中。
虚拟文件名为Web 站点上虚拟目录的完整虚拟路径。
FileName
指定要包含的文件名。FileName 必须包含文件名扩展,而且必须将文件名用引号(") 引起来。asp网页文件的格式
注释
包含#include 命令的文件必须使用映射到SSI 解释器的文件扩展名;否则,Web 服务器将不处理该命令。默认情况下,扩展名.stm、.shtm 和.shtml 将映射到解释器(Ssinc.dll)。如果安装了Internet 服务管理器,则可以修改默认扩展映射并添加新的映射。请参阅设置应用程序映射。被包含的文件可具有任何文件扩展名,但建议赋予它们.inc 扩展名。
示例
<!--被包含文件与父文件存在于相同目录中。-->
<!-- #include file = "myfile.inc" -->
<!--被包含文件位于脚本虚拟目录中。-->
<!-- #include virtual = "/scripts/tools/global.inc" -->
不可思议的ASP #include指令
在一个ASP页中,可以使用#include指令把另一个文件的内容插入到当前的页面中:
<!-- #include file=”/scripts/usefulbits.inc” -->
这条指令读取该文件的全部内容并插入到该页中,替代<!-- #include.. -->行。这是一种非常有用的插入HTML段落的技术,可反复使用。也常用该指令来插入代码段。例如,如果有
一个包含几个脚本函数(或者只是单行脚本代码)的文件同时在几个页面中使用,则可以使用#include指令将其插入到需要它的每个页中。
通过把脚本和内容分开的方法,给页面提供了一个组成层次。这意味着如果对脚本进行了修改,在客户端再次打开该页面时,脚本的修改情况自动地反映到使用包含文件的每个页面中。包含文件也是一种插入服务器特定的信息的简单方法,所以把站点转移到另一个服务器不意味着必须编辑涉及原来服务器的所有页面(明显的例子是数据库连接字符串或指定一个完整的URL或服务器名字的链接)。这可以极大地减少维护费用。
例如,可以把下面的内容作为一个包含文件,命名为connect.inc:
<%
strConnect = “SERVER=myserver;DA TABASE=mydb;DRIVER={SQL Server};” _
& “UID=username;PWD=secretpassword”
%>
然后可以在任何页中使用这个文件:
<!-- #include file=”path_to_file\connect.inc” -->
<%
…
strTheConnectionString = strConnect …From include file
…
%>
使用包含文件的另一种情况是有些内容需要按指定的时间间隔进行修改。例如,在Wrox Web Deverloper站点上显示书目列表的网页,它包含了一个表,其中提供了所有的封面、书名和一些按钮,如图4-2所示:
显示书目列表的网页
这个表的HTML和文本保留在一个单独的文件中,该文件通过一条单独的#include语句包含在主页中。每次一本新书加入到该网页所基于的数据库中时,那个包含文本文件根据该数据库的情况重新创建,并作为一个文本文件写到磁盘上。
这个技术大大减少了在Web服务器和数据库服务器上的工作量,对该站点的访问者实现较快地响应。
1.包含文件和ASP
在ASP网页(即带有.asp文件扩展名的网页)中使用的#include指令不能像一条真正的SSI 指令那样进行处理,它仅是一条ASP能够识别并进行语法分析的特别指令。ssinc.dll直接用于执行SSI #include指令。然而这个由相应文件的内容替代#include指令的页面由ASP解释。这意味着ASP对#include指令所进行的操作不实施控制。例如,可以试验以下代码:
<%
‘This will *not* work
strIncludeURL = Request.Form(“FileName”)
%>
…
<!-- #include file=”<% = strIncludeURL %>” -->
ssinc.dll将查名为<% = strIncludeURL %>的文件,并且不可能到,因此这段代码不会工作。
2.包含文件的安全性
如果没有包含可执行脚本,在Web服务器上的ASP网页不能通过IIS的Web服务程序下载到一个客户端。但是,有人已经发现了偶然的安全性漏洞,比如著名的$DA TA问题,所有在NTFS格式化的磁盘上保留Web内容的Web服务器都存在相应的问题。在IIS 5.0中这个问题已经得到解决。
$DA TA问题的出现是因为在Windows NTFS驱动器上的所有文件都有一个缺省的“值”,即是该文件的
内容,并且通过文件名加后缀“::$DA TA”来指示。将其增加到一个ASP网页的URL的末尾将打乱IIS中的脚本映射关系,且允许服务器不对其中包含的脚本进行处理而不载该页面。对IIS 4.0和早期版本,有一个方法可以解决这个问题,或者可以只是增加几个映射来强制IIS正常地执行该网页:即增加对“.asp::$DA TA”和“.asa::$DA TA”的映射,两者都指向asp.dll文件。
包含文件的扩展各一般是.inc或.txt。如果在站点上发现一个包含文件的路径和文件名,可通过把包含文件的URL键入到浏览器的地址栏中,下载该包含文件,而不会把其作为ASP 网页的一部分来执行。为防止出现这样情况,特别是在文件包含有敏感信息(诸如一个数据库链接字符串)的情况下,可能希望包含文件的扩展名为.asp。在这种情况下,如果试图下载一个包含文件,它将首先被传送到ASP,ASP将执行该文件中的所有脚本代码,并只发送出结果。如在包含文件中定义的一个链接字符串如下:
<%
strConnect = “SERVER=myserver;DA TABASE=mydb;DRIVER={SQL Server};” _
& “UID=username;PWD=secretpassword”
Response.Write vbCrlf …Output a carriage return character
%>
客户端只能接受到单个回车符而不是脚本代码,因为该文件已经被ASP在服务器上执行了。如果不包含回车符,浏览器将挂起并等待一个响应(这并不是我们的问题,因为我们确实不打算允许用户直接访问这个文件)。
IIS 5.0和Windows的访问控制列表
在IIS 5.0中,Microsoft已经改变了Web服务器和操作系统访问服务器端包含文件的方法。在IIS早期版本中,当ssinc.dll载入一个虚拟URL(即使用VIRTUAL = “filename”而不是FILE = “filename”)定位的一个包含文件时,将绕过Windows本身的安全性检查并忽略该文件及所存储的目录上的任何安全性设置。现在,在IIS 5.0中,运行当前ASP或SSI页面的帐号必须与对该文件和目录在Windows访问控制列表(ACL)中设置的权限相一致。如果不一致,该SSI指令运行将失败。
服务器端包含指令概要
除了已经讨论过的#include语句以外,还有IIS支持的五条服务器端包含指令(记住,除#include以外,这些语句不能在ASP网页中执行)。这些服务器端包含指令及说明:
服务器端包含指令及说明
指令
说明
#include
把一个指定文件的内容插入到将被发送给客户端的响应流中并代替该指令。例如:
<!-- #include FILE = “usefulbits.inc” -->
这条指令把名为usefulbits.inc文件的内容插入到响应中。这个文件可以由一个相对或全
路径与文件名的组合描述,如FILE=”..\scripts\myscr.inc”。通过使用VIRTUAL属性,可使用一个虚拟的相对或绝对路径来描述它,例如:
<!-- #include VIRTUAL=”/mysite/ussefulbits.inc” -->
<!-- #include VIRTUAL=”../../thisbit/usefulbits.inc” -->
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论