随着php4.0和jsp技术的推出以及iis中不断出现的重大的安全问题,microsoft的asp的市场仿佛是变的狭窄了,但是microsoft是不会轻言放弃的,于是在asp2.0的基础上推出了asp3.0,增加了一些新的功能:新的流控制能力、data shaping技术(请参考:http://www.aspcn.com/showarticle.asp?id=28)、无脚本 asp 、更多的组件选择、xml的支持、脚本组件、asp脚本代码的加密技术等等。其实笔者认为没有多大的改变、或者我对于asp3.0了解的还是太少了(事实上我认为微软可能放弃了asp,而是把目光转向了"asp+",asp+目前还处于测试阶段,但是笔者从一些国外站点的介绍来看,嘿嘿,我们的下一个作用于win平台上的东西可能就是asp+了,所以asp3.0才没有多大的改变),不过话说回来,对于那些使用win系统平台的用户,我还是建议大家使用asp,所以在下面给大家介绍了"asp3.0中的流控制能力"。
asp3.0中的流控制技术其实是指程序流,说的通俗一点就是程序的流程,asp3.0中有了两种新的流控制方法:"server.transfer"和"server.execute",我将就这两种方法中的一种粗略的介绍给大家,为了具体的显示其功能,我给大家对比了response.redirect同server.transfer的运用!
一般会使用response.redirect这条语句进行地址转向,asp3.0提供了一种新的方法给我们,这种方法更加高效。让我们先来看看response.redirect和server.transfer分别是如何run的!
response.redirect其实上是当服务器碰到这条语句时发送一条指令(包含新的地址)给浏览器,然后让浏览器去发送http请求,请求response.redirect后面的那个新的http地址,流程如下:
浏览器asp文件请求->服务器执行->遇到response.redirect语句->服务器发送response.redirect后面的地址给客户机端的浏览器->浏览器请求执行新的地址(服务器返回的response.redirect后面的地址)这就是一个小小的response.redirect的全部过程,不看不知道,一看吓一条!它有这么多的过程,真恐怖… …,而asp3.0中的server.transfer语句当接受地址后是直接转向后面的地址,流程如下:
浏览器asp文件请求->服务器执行->遇到server.transfer语句->服务器转向新的文件。
这样就少了一个流程了!也缩短了服务器->客户机->服务器互相访问的时间!但是值得提醒你注意的一点的是server.transfer中带的地址最好是html文件或asp文件,不要是第三方加载的东西,比如说php,如果那样的话,程序是不能正常执行的,因为转向的文件被直接送给asp的引擎解析了(唉,微软的东西教人如何说呢?不知道这点是没有考虑到,还是微软的霸气),你将得不到结果的!在下面的程序中,我们将像你展示这点
让我们看看下面的代码:
(文件:response.asp:)
<!– 代码开始 –>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta name="author" content="蒲俊杰">
<meta name="keywords" content="asp,www.aspcn.com">
<title>response测试</title>
</head>
<body>
<%response.redirect "test.php"%>
</body>
</html>
<!– 代码结束–>
test.php文件的代码如下:
<!– 代码开始 –>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta name="author" content="蒲俊杰">
<meta name="keywords" content="asp,php,www.aspcn.com">
<title>response测试</title>
</head>
<body>
<? echo "<center>这是一个测试,你好呀!欢迎你访问我们的网站<a href=http://www.aspcn.com>www.aspcn.com</a></center>" ; ?>
</body>
</html>
<!– 代码结束–>
好了,我们测试一下上面的代码,看到结果了吗?再让我们来看看server.transfer的运用语句,代码如下:
server.asp(其实直接套用response.asp就可以了):
<!– 代码开始 –>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta name="author" content="蒲俊杰">
<meta name="keywords" content="asp,www.aspcn.com">
<title>response测试</title>
</head>
<body>
<%server.transfer "test.php"%><!– 注意这条语句 –>
</body>
</html>
<!– 代码结束–>
执行一下server.asp!咦,怪了,什么都没有吗!但是你看看被ie解释后的代码,代码如下(注意千万不要被我下面的使用在html中的注释语句搞糊涂了):
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta name="author" content="蒲俊杰">
<meta name="keywords" content="asp,www.aspcn.com">
<title>response测试</title>
</head>
<body>
<!– 代码开始 –>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta name="author" content="蒲俊杰">
<meta name="keywords" content="asp,www.aspcn.com">
<title>response测试</title>
</head>
<body>
<? echo "<center>这是一个测试,你好呀!欢迎你访问我们的网站<a href=http://www.aspcn.com>www.aspcn.com</a></center>" ; ?><!– 注意这条php语句被看到了 –>
</body>
</html>
<!– 代码结束–><!– 注意这条语句 –>
</body>
</html>
"###################################################(代码结束)
test.php文件被当作一个文本文件include进来了,但是如果我们把原来的server.asp文件中的server.transfer "test.php"换成 server.transfer "response.asp"在try一下(这样做,其实是让你了解asp的引擎对于server.transfer的具体的解析情况),看看结果?是不是同我们直接运行response.asp的结果一样???
我不知道,你现在对于server.transfer的用法糊涂没有?我都有一点糊涂了!但是不要忘了我写这篇东西的关键:server.transfer比response.redirect好,因为前者少了一个流程,加快了速度的,节约了时间,后者我就不说了,只是提醒你一点的就是server.transfer到底该用在什么条件下(前面很清楚了,我不多说了,再说我也就糊涂了,你多try几下就明白了)!
