仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5880|回复: 20
打印 上一主题 下一主题

[学习教程] ASP编程:用模板完成代码和页面的分别

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:28:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。模板|页面     为了不ASP法式和HTML代码混写形成保护坚苦的情形,本文引见了一种办法,使用模板来分别法式和页面,使法式设计加倍轻松。
  在利用ASP制造一个站点的时分,经常会呈现一个ASP文件中,法式代码和HTML代码夹杂的情形。如许子做有很多弱点:
  1. 且不说编程时就要对页面结构停止设计和编排,形成代码凌乱难明,不标准;
  2. 当需求改动页面外不雅时,你不但要改动HTML部分,也需求改动ASP代码,不容易保护。
  那末,要若何才干防止这些费事呢?
  谜底就是利用模板文件,将ASP代码和HTML页面分隔,一切成绩就都处理了。利用模板有以下优点:
  1. 在很短的工夫内可以交换全部站点的外不雅;
  2. 使法式员可以笼统编程,而不必接触HTML代码;
  3. 可以反复使用之前的模板。
  利用过PHP的法式就会晓得,PHP有个模板法式(FastTemplate),如今的成绩是若何在ASP中完成相似的功效。
  Microsoft的ASP带有两种剧本:VBScript和JScript。它们都带有一个 "正则表达式对象" (RegExp),使用字符串对象和RegExp对象,就能够轻松的完成模板功效。沐枫以此编写了一个 "Template.JScript.INC" 文件,此文件的内容附在文章前面。有才能的读者可以依据本人的需求停止改善。
  上面引见一下利用办法。因为此文件是利用JScript编写的(固然要转成VBScript也很轻易),因而,缺省剧本言语要设为JScript,即ASP法式第一行应为:<%@Language=JScript%>,然后再包括模板法式文件:<!--#include file="Template.JScript.INC"-->。
  先引见一下Template类的利用:
  1. 创立Template对象:Template(Path)
  参数:Path(字符串类型) HTML模板文件的寄存途径。利用new 操作符创立Template对象。
例子:
var tpl = new Template("c:\\template");
  在法式中可以用tpl.TplPath来获得模板途径,也能够经由过程tpl.TplPath来改动模板途径。
如:
tpl.TplPath = "d:\\template";
  2. 装载模板文件:Template.Load(Name, File)
  参数:Name(字符串类型) 是一个模板变量名。File(字符串类型) 模板文件名。此文件寄存在HTML模板途径下。读取文件File到模板变量Name中。
例子:
tpl.Load("Main", "TEST.HTM");
  此时,模板变量Main就包括了文件TEST.HTM的内容。你可以用tpl.Main来会见模板变量"Main"。
例子:
<%=tpl.Main%>
  将显示方才读出去的TEST.HTM文件内容。
  3. 模板分拆:Template.Split(Name)
  参数:Name(字符串类型) 是一个模板变量名。将Name中的子模板分化。
例子:
先假定上例中的TEST.HTM内容为:
-------------------
这是主模板。接上去是:<!--#TPLDEF SUB-->SUB子模板,还有
<!--#TPLDEF THIRD-->THIRD模板。<!--#TPLEND THIRD-->
<!--#TPLEND SUB-->
-------------------
那末:
tpl.Split("Main");
履行今后,就会生成新的模板变量"SUB",和"THIRD",它们的内容就是<!--#TPLDEF SUB-->和<!--#TPLEND SUB-->之间语句。并且"Main"模板变量的内容也会产生改动:
tpl.Main 的内容为:"这是主模板。接上去是{SUB}"
tpl.SUB 的内容为:"SUB子模板,还有{THIRD}"
tpl.THIRD 的内容为:"THIRD模板。"
TPLDEF 和 TPLEND 界说的语句块充很多重嵌套。
  4. 模板处置:Template.Parse(Name)
  参数:Name(字符串类型) 是一个模板变量。将模板顶用花括号括起来的字串用同名的模板变量的内容交换。
例子:续上例
<%=tpl.Parse("Main")%>
显示:"这是主模板。接上去是SUB子模板,还有{THIRD}"
  由例子可知,Parse只交换"Main"模板中的{SUB}变量,而不克不及嵌套交换下去。这是为了增添法式天真性而居心设计的。那末该怎样完全显示"Main"模板呢?
例子:
tpl.SUB = tpl.Parse("SUB"); //先处置SUB变量,再处置Main变量。
Response.write(tpl.Parse("Main"));
  5. 自界说模板变量。
  自界说模板变量很复杂,可以直接用赋值语句来界说和修正任何变量:
例子:
tpl.Hahaha = "这是自界说变量";
tpl.THIRD = "改动原模板中的THIRD变量";
  需求注重的是,因为JScrip是辨别巨细写的,因而必定要注重巨细写的拼写。普通来讲,HTML模板中界说的模板变量都用大写。
  别的,模板中利用的"TplPath","Load","Parse","Split"变量是外部利用的,不要挪做它用,不然法式将能够产生异常。
  上面举个完全的例子:
  第一步:先创立Html模板文件。
  这里先申明HTML模板文件的构成。起首,它和通俗的HTML文件几近没有区分,只不外多了几个标志。模板的标志有两种。让咱们先看一个例子:
TEST.HTM
-----------------
<!--文件名:TEST.HTM-->
<HTML>
<TITLE>典范</TITLE>
<HEADER>
</HEADER>
<BODY>
这是一个表格典范。
<TABLE>
<!--#TPLDEF MAXX-->10<!--#TPLEND MAXX-->
<!--...注重,此处利用了一个技能即界说了MAXX模板变量并赋值为10。-->
<TR>
<TD>X</TD><TD>X的平方</TD>
</TR>
<!--#TPLDEF ROW-->
<TR>
<TD>{X}</TD><TD>{XX}</TD>
</TR>
<!--#TPLEND ROW-->
</TABLE>
以上共有{COUNT}行数据。
</BODY>
</HTML>
-----------------
  从下面可以看出,象{X},{XX},{COUNT}之类的记号是界说模板变量。它们将会在ASP法式中被替换。
  而<!--#TPLDEF ROW-->...<!--#TPLEND ROW-->是界说一个语句块"ROW"。在ASP法式中就能够将"ROW"块反复屡次。
  第二步:设计ASP法式。
TEST.ASP
-------------------
<%@Language=JScript%>
<!--#include file="Template.JScript.INC"-->
<%
var tpl = new Template("c:\\Inetpub\\wwwroot");
var str="";
var i;
tpl.Load("Main","TEST.HTM");
tpl.Split("Main");
tpl.COUNT = 0;
for(i=1;i<=tpl.MAXX;i  ) //tpl.MAXX在模板中界说为10。
{
tpl.X = i;
tpl.XX = i*i;
str =tpl.Parse("ROW");
tpl.COUNT  ;
}
tpl.ROW = str;
tpl.MAXX =""; //清空此模板变量,以免被显示出来。
%>
<%=tpl.Parse("Main")%>
-------------------
  下面的法式将显示一个1到10的平方表。
  凡是在利用模板的情形下,都只需在最初一行加上显示页面的语句。因而全部法式显得非常明晰。此时,只需对模板文件停止编纂,就能够改动全部页面的外不雅。
至于模板文件,它可所以任何文件,如HTML文件、ASP文件,乃至是法式自己!,并且在一个法式中可以装载多个模板共同利用,如许,不但具有极大天真性,并且模板文件与ASP法式的相干性可减到最低水平。
  好好使用模板,将会使你的任务加倍轻松。

附:Template 源法式
------------------------------------
<!--文件名:Template.JScript.INC-->
<%
//Template Method Define
function Template_Parse(name)
{
if(this[name]==null)
return "";
var reg = new RegExp("{(\\w*)}","ig");
var str = new String(this[name]);
var arr = str.match(reg);
var i;
if(arr != null)
for(i=0;i<arr.length;i  )
{
key = arr[i].slice(1,-1);
reg = new RegExp(arr[i],"ig");
if(this[key]!=null)
str = str.replace(reg,this[key]);
}
return str;
}
function Template_Split(name)
{
var len = 0;
var arr;
if(this[name]==null)
return;
var Template_Exp = new RegExp("<!--#TPLDEF  (\\w*) *-->((.|\\n)*)<!--#TPLEND  \\1 *-->","i");
while(this[name].search(Template_Exp)!=-1)
{
arr = this[name].match(Template_Exp);
this[arr[1]] = arr[2];
this[name] = this[name].replace(Template_Exp,"{" arr[1] "}");
this.Split(arr[1]);
}
}
function Template_Load(name,filename)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.BuildPath(this.TplPath, filename);
if(fso.FileExists(file))
{
var f = fso.OpenTextFile(file, 1);
this[name] = f.ReadAll();
}
}

//Template Constructor
function Template(path)
{
//Property
this.TplPath = path;
//Method
this.Parse = Template_Parse;
this.Split = Template_Split;
this.Load = Template_Load;
}
%>
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-2-3 23:37:09 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
精灵巫婆 该用户已被删除
板凳
发表于 2015-2-4 13:53:50 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
简单生活 该用户已被删除
地板
发表于 2015-2-10 01:08:20 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-10 09:31:14 | 只看该作者
那么,ASP.Net有哪些改进呢?
小妖女 该用户已被删除
6#
发表于 2015-2-17 17:22:04 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
兰色精灵 该用户已被删除
7#
发表于 2015-2-20 01:07:19 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
深爱那片海 该用户已被删除
8#
发表于 2015-3-6 16:01:39 | 只看该作者
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
透明 该用户已被删除
9#
发表于 2015-3-13 04:08:23 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
爱飞 该用户已被删除
10#
发表于 2015-3-19 21:06:52 | 只看该作者
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
小魔女 该用户已被删除
11#
发表于 2015-3-25 04:39:01 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
admin 该用户已被删除
12#
发表于 2015-3-28 22:00:17 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
海妖 该用户已被删除
13#
发表于 2015-4-12 10:56:50 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
分手快乐 该用户已被删除
14#
发表于 2015-5-1 08:37:24 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
再现理想 该用户已被删除
15#
发表于 2015-7-9 04:49:06 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
只想知道 该用户已被删除
16#
 楼主| 发表于 2015-7-20 10:51:11 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
飘灵儿 该用户已被删除
17#
发表于 2015-7-24 00:55:31 | 只看该作者
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
小女巫 该用户已被删除
18#
发表于 2015-10-5 22:55:59 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
蒙在股里 该用户已被删除
19#
发表于 2015-10-31 05:06:23 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
再见西城 该用户已被删除
20#
发表于 2015-11-11 15:32:04 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-19 14:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表