爱飞 发表于 2015-1-16 22:46:34

ASP教程之ASP 静态包括文件的改善

缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。静态ASP自己不撑持静态包括文件,如今的静态包括是经由过程FSO把被包括的文件兼并到主文件里再运转。以下也有把形如<!--#includefile="filename.asp"-->的一般包括文件体例称作“传统援用”,用函数完成的静态包括文件称作“静态援用”。罕见的程序以下:
Functioninclude(filename)
Dimre,content,fso,f,aspStart,aspEnd

setfso=CreateObject("Scripting.FileSystemObject")
setf=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
setf=nothing
setfso=nothing

setre=newRegExp
re.pattern="^s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
dowhileaspStart>aspEnd+1
Response.writeMid(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.writeMid(content,aspEnd)
setre=nothing
EndFunction
利用典范:include("youinc.asp")
以上典范引自
但这处函数在处置补包括的文件中另有包括文件时就不灵了。我在以上函数的基本上改善出来以下函数,在被包括文件中另有一般的包括文件<!--#includefile="filename.asp"-->也可一般运转。
Functionincludeconvert(oRegExp,strFilename,strBlock)
DimincStart,incEnd,match,oMatches,str,code
用提取ASP代码的不异体例提掏出include部分的文件名,其他部分原样输入
code=""
incEnd=1
incStart=InStr(incEnd,strBlock,"<!--#include")+13要找个方针字符串<!--#include恰好是13个字符,以是要+13
DoWhileincStart>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",捕获范例及文件名两个子串
SetoMatches=oRegExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Setmatch=oMatches(0)断定只要一组捕获时,要失掉这一组婚配的子串,能够如许做,省往用ForEachmatchInoMatches……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
EndFunction
Functioninclude(filename)
Dimre,content,fso,f,aspStart,aspEnd,code
Setfso=CreateObject("scripting.FileSystemObject")
Setf=fso.OpenTextFile(Server.MapPath(filename))
content=f.ReadAll
f.close
Setf=nothing
Setfso=nothing
code=""
aspEnd=1
aspStart=InStr(aspEnd,content,"<%")+2
Setre=newRegExp
DoWhileaspStart>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.Writestr%>
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))
Setre=nothing
include=code
EndFunction
<p>便利起见,以上函数终极前往的是整合了包括文件的全部ASP代码,利用时还要再用Execute实行之,即便用时必要:Execute(include("file.asp"))。ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。

蒙在股里 发表于 2015-1-19 23:24:18

尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。

小魔女 发表于 2015-1-27 07:51:13

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

小妖女 发表于 2015-2-5 02:41:50

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

海妖 发表于 2015-2-11 02:03:38

还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。

分手快乐 发表于 2015-3-1 19:32:49

先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习

莫相离 发表于 2015-3-10 22:32:41

跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组

老尸 发表于 2015-3-17 11:56:07

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

第二个灵魂 发表于 2015-3-24 09:24:13

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
页: [1]
查看完整版本: ASP教程之ASP 静态包括文件的改善