电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

ASP動(dòng)態(tài)include文件

瀏覽:131日期:2022-06-04 15:53:58

 經(jīng)常有這樣的要求,根據(jù)不同的需求要求include不同的文件如各個(gè)人的不同設(shè)置,所以要求能動(dòng)態(tài)include文件受<! #include file="filename.asp" --> 宏限制
    必須存在該文件并且會(huì)預(yù)先編譯(不管前面是否加以條件)

    經(jīng)常有這樣的要求,根據(jù)不同的需求要求include不同的文件
    如各個(gè)人的不同設(shè)置,所以要求能動(dòng)態(tài)include文件。

    代碼如下:

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")

ASP可以動(dòng)態(tài)Include文件

<% 
"得到用戶所在的省份 
Dim Province 
Province = Request.form("Province") 
"下面顯示這個(gè)省份相關(guān)的信息 
%> 
<!--#include virtual="/ Province/<%= Province%>"--> 

你覺得上面的代碼可以工作嗎?不!簡單地使用ASP來達(dá)到動(dòng)態(tài)包含,你不能達(dá)到你想要的效果。為什么?因?yàn)椋篒nclude命令先于ASP代碼而得到執(zhí)行,所以,上面的代碼并沒有按照作者的意愿,先得到用戶所在的省份,再包含這個(gè)省份的信息!
如果你確實(shí)需要?jiǎng)討B(tài)包含,你可以這樣做:

<%
Select Case Province
Case 1: %>
<!--#include file="1.asp"
<% Case 2: %>
<!--#include file="2.asp"
<% Case 3: %>
<!--#include file="3.asp"
<% End Select %>

應(yīng)該說,這段代碼可以得到你想要的結(jié)果。但是,由于你的用戶可能來自于33個(gè)省,你難道包含33個(gè)文件?特別要說明的是,SSInc.dll是不知道你究竟需要哪個(gè)包含文件的(事實(shí)上,這時(shí)候Province還沒有值),所以,她把所有的文件都包含進(jìn)來了!你可以想象,這時(shí)候的文件有多大!然后,ASP.DLL會(huì)去掃描這個(gè)文件中的ASP代碼,然后執(zhí)行!
所以,每當(dāng)這樣的時(shí)候,你應(yīng)該考慮其他的思路,比如數(shù)據(jù)庫,或者采用FileSystemObject。

怎樣動(dòng)態(tài)Include文件?

解答
ASP程序員經(jīng)常面臨的最大挑戰(zhàn)之一是動(dòng)態(tài)Include文件。由于#include 在ASP代碼執(zhí)行之前處理,所以,看起來,動(dòng)if/else的腦筋是不可能的。

真是這樣嗎?
根據(jù)你使用Include的目的,以及你將Include的文件數(shù)目,使用if/else也許可以解決問題。但這絕對(duì)不是任何時(shí)候可以奏效的,而且也不是一種有效的解決辦法,因?yàn)槟阈枰鲈S多的手工工作。

假設(shè)有兩個(gè)樣本HTM文件,1.htm和2.htm,為簡化起見,假設(shè)文件的內(nèi)容如下:

<!-- 1.HTM: -->
<font color=#ff0000>This is 1.htm</font>
<!-- 2.HTM: -->
<font color=#0000ff>This is 2.htm</font>

現(xiàn)在我們來試試動(dòng)態(tài)Include:

<% 
if request.querystring("param")="2" then 
%> 
<!--#include file="2.htm"--> 
<% 
else 
%> 
<!--#include file="1.htm"--> 
<% 
end if 
%>

請(qǐng)注意:上面的兩個(gè)#include 實(shí)際上都得到了處理。你可以實(shí)際運(yùn)行一下,看看效果:http://localhost/Test.asp?param=1

http://localhost/Test.asp?param=2
http://localhost/Test.asp

上面我們是把一個(gè)querystring作為條件。你還可以把時(shí)間、日期、瀏覽器版本等作為條件。但是,條件越復(fù)雜,這種方法的效率越差。下面提供了另外一種思路:

<% 
if request("param")="2" then 
filespec = "2.htm" 
else 
filespec = "1.htm" 
end if 
filespec = server.mapPath(filespec) 
scr = "scripting.fileSystemObject"
set fs = server.createobject(scr) 
set f = fs.openTextFile(filespec) 
content = f.readall 
set f = nothing 
set fs = nothing 
response.write(content) 
%>

在IIS5.0/ASP3.0中,有兩種新的方法來支持“動(dòng)態(tài)包含”:

<%
server.transfer filename
server.execute filename
%>

如果正好使用的是IIS5.0和ASP3.0,那么Ok! 但是IIS5.0需要運(yùn)行在Windows 2000上。

Asp包含文件include動(dòng)態(tài)包含方法(含變量)

很多時(shí)候,由于程序設(shè)計(jì)需要,要求在asp的include包含文件里調(diào)用動(dòng)態(tài)的文件。如<!--#include file="map1.asp"-->其中的1是個(gè)動(dòng)態(tài)參數(shù),需要request獲取。但可惜的是,include語句里并不能含有變量,否則將提示找不到文件錯(cuò)誤。本文將提供3種方法解決該問題。

首先,我們需要了解,包含文件的提示和警告信息:被包含的文件可以包含其他文件。只要“#include”命令不導(dǎo)致循環(huán),.asp 文件也可以多次包含同一文件。例如,如果文件 First.asp 包含文件 Second.inc,則 Second.inc 不能反過來包含 First.asp。文件也不能包含其自身。ASP 檢測(cè)這樣的循環(huán)或嵌套錯(cuò)誤,生成錯(cuò)誤消息,并停止處理請(qǐng)求的 .asp 文件。
解決方法一:FSO調(diào)用方法

ASP語言是強(qiáng)大易用的語言,我們不要把自己的思維局限固定在一個(gè)角落里,“條條大道通羅馬”,一個(gè)思路不通,換個(gè)思路吧。

本方法采用變通的方法實(shí)現(xiàn)同樣的包含功能。即FSO調(diào)用。代碼如下:

<%
Function getFileContents(strIncludeFile) "函數(shù):讀取包含文件內(nèi)容
Dim objFSO,objText,strPage
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") "調(diào)用FSO對(duì)象
Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile))
getFileContents = objText.ReadAll
objText.Close
Set objText = Nothing
Set objFSO = Nothing
End Function
dim p
p=request("p") "2種方式:request.form ,request.querystring
response.write getFileContents("map"&p&".asp")
%>

這樣,利用fso函數(shù)讀取包含文件的內(nèi)容,然后用response.write把包含文件的內(nèi)容輸出,即實(shí)現(xiàn)和include命令同樣的功能了,輕松實(shí)現(xiàn)自由輸出諸如 map1.asp,map2.asp… 等文件內(nèi)容了。

解決方法二:if...elseif...

此方法適用于要包含的文件數(shù)量不多的情況下,也是懶人+笨人的方法,呵呵。代碼如下:

<%if a=1 then%>
<!--#include file="map1.asp"-->
<%elseif a=2 then%>
<!--#include file="map2.asp"-->
<%elseif a=3 then%>
<!--#include file="map3.asp"-->
<%end if%>

解決方法三:select case

方法和第二種差不多,稍微好點(diǎn)。代碼如下:

<%select case p
case 1%>
<!--#include virtual="inc/****1.asp"-->
<%case 2%>
<!--#include virtual="inc/****2.asp"-->
<%case 3%>
<!--#include virtual="inc/****3.asp"-->
<%case 4%>
<!--#include virtual="inc/****4.asp"-->
<%end select%>

如果你有其他更好的方法,歡迎與我們交流。您可以把你您的想法留在博客評(píng)論里,我們期待與您的探討。

補(bǔ)充:關(guān)于asp的include包含命令,需要注意以下方面。

ASP程序在執(zhí)行腳本命令之前就已經(jīng)包含文件。因此,不能使用腳本命令來建立被包含的文件名。舉例來說,因?yàn)?ASP 試圖在將文件名指派給變量 name 之前執(zhí)行“#include”命令,所以下面的腳本無法打開文件 Header1.inc。

<!-- 該腳本將失敗 -->
<% name= header1.inc %>
<!-- #include file="<%= name %>" -->

腳本命令和過程必須完全包含在腳本分隔符 <% 和 %> 內(nèi),即 HTML 標(biāo)簽 <SCRIPT> 和 </SCRIPT>,或 HTML 標(biāo)簽 <OBJECT> 和 </OBJECT> 內(nèi)部。也就是說,不能在包含 .asp 文件中打開腳本分隔符,并在被包含的文件中關(guān)閉分隔符;腳本或腳本命令必須是一個(gè)完整的單元。例如,下面的腳本將不起作用:

<!-- 該腳本將失敗 -->
<%
For i = 1 To n
主文件中的語句
<!-- #include file="header1.inc" -->
Next
%>
但下面的腳本會(huì)起作用:
<%
For i = 1 to n
主文件中的語句
%>
<!-- #include file="header1.inc" -->
<% Next %>

如果 ASP 腳本包含的文件中存在包含腳本不需要的大量函數(shù)和變量,則這些無用的結(jié)構(gòu)反而會(huì)影響性能,并最終降低 Web 應(yīng)用程序的伸縮性。因此,通常將包含文件分成多個(gè)小文件,并且只包含那些服務(wù)器端腳本必需的文件,而不是包含那些帶有冗余信息的一個(gè)或多個(gè)大型包含文件。

標(biāo)簽: ASP
相關(guān)文章:
主站蜘蛛池模板: 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 公交驾校-北京公交驾校欢迎您!| 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 淄博不锈钢无缝管,淄博不锈钢管-鑫门物资有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 达利园物流科技集团-| 书法培训-高考书法艺考培训班-山东艺霖书法培训凭实力挺进央美 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 武汉宣传片制作-视频拍摄-企业宣传片公司-武汉红年影视 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 361°官方网站| 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 |