动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   Asp → 阅读文章
  

 ASP如何与IIS连接

作者来源: 
阅读 2094 人次 , 2006-4-3 0:44:00 

asp本身包含了一个dll文件,名字为asp.dll,缺省安装在winnt\system32\inetsrv目录下。这个dll文件负责得到一个asp页面(由文件扩展名.asp标识),然后对它进行分析,寻找服务器端脚本内容。这个脚本传送给相应的脚本引擎,脚本的执行结果与asp页中的html和模板文本结合在一起。完整的页面会送到web服务器,从那里送往原先提出请求的客户端。
关于应用程序的映射
为了更好地理解这个过程,需要研究一下windows 2000中的应用程序映射的工作方式。对于每一个在iis下设置好的web站点,服务器上都有一个根目录。安装iis时,缺省的web站点通常是c:\inetpub\wwwroot,除非在安装过程中改变了路径。对于这个目录以及其中的子目录(这个我们稍后再讨论),有一组定义目录如何配合iis的属性。
从start菜单中的administrative tools打开internet services manger,将运行微软管理控制台(microsoft management console,mmc ),显示iis的情况。
用鼠标右击default web site,选择properties (属性),然后出现home directory选项卡,如图1 - 4所示。
可以看到缺省的站点被设置成为一个虚拟的应用程序。在选项卡的下半部有applicationname、execute permissions和application protection选项。iis使用虚拟应用程序的方式来隔离页面集和所使用的组件的实例,以失败影响到防止web服务器。正如早先所看到的,这是通过在单独的内存空间中执行页面和进程外组件实现的。我们将在本章后面讨论这个问题。


单击configuration按钮打开application configuration对话框,见图1 - 5。在app mappings选项卡里,可以看到iis与各类文件采用特定的dll相链接。任何含有扩展文件名.asp的网页都送给asp.dll进行处理;有未映射的扩展文件名的页面,如html页面的.html和.htm及xml 文件的.xml,只需从磁盘上载入并直接发送给客户端。

读者可能想了解这一选项卡上的其他文件类型。.ida、.idc和.idq文件扩展名是idc模板文件和查询文件所使用的,因此,一个idc查询页面( .idc )将直接送到动态链接库httpodbc.dll进行处理。从文件名也可猜出,它使用odbc执行sql语句,返回包含在页面中的一组数据记录。同样, .shtm、.shtml和.stm文件扩展名与文件名为ssinc.dll的动态链接库相对应,这些文件类型一般用于请求服务器端包含( server- sideinclude,ssi)处理的文件。我们将在本书的后续部分给出一些相关的实例。
打开application configuration和properties对话框时,读者可能很想了解各个设置的功能。本书的很多地方都要用到这些对话框和设置,查看这些设置有助于增加感性认识,但不要改变这些设置,除非知道为什么这样做。
处理一个asp文件
我们知道一个asp页面提供给asp动态链接库等待解释和执行,那么接着asp会做些什么呢?
第一步判断是否有asp服务器端的代码需要执行。假如没有,它仅是简单地通知iis这种情况,并让iis向客户端发送页面。事实上, windows 2000的一个新特性允许对所有页面使用扩展名.asp,包括对那些非服务器端的脚本代码,而不牺牲任何性能。
在早先版本的iis和asp中,所有有.asp扩展名的页面,都会被逐行解释,即使它们含有非asp服务器端代码。这当然要比iis直接把它们从磁盘发送给客户端要慢很多。
当asp从iis接收到包含有服务器端脚本代码的页面时,它会逐行进行解释。那些非服务器端的脚本,或不需要asp进行服务器处理的,将被返回给iis,进而发送给客户端。送来的脚本都会送给相应的脚本引擎,脚本引擎处理后的结果被发送回iis时,都会插入页面上相应位置上。
为提高操作的效率, asp也常把脚本引擎创建的编译代码,放在高速缓存中以备再次调用。这个代码与发往客户端的输出结果是不相同的。客户看到的是脚本代码在经过解释、语法检查和编译后的执行结果。在服务器上高速缓存的只是编译后的代码,在原来的源文件变化后,这些代码会被放弃。
1. 辨别服务器端脚本段
asp的解释器能够根据两种分隔方式之一,分辨出代码是否为服务器端脚本。
(1) 用<% %>脚本分隔符
< %和% >用以分隔脚本段的最常用字符是:

这个方法也用于在返回页面的其余文本和html中需要插入变量值或小段脚本语句的地方:

这段代码产生如下结果:
the result of calculating seven plus six minus one is 12
(2) 使用<script>元素
当编写在浏览器内执行的脚本时,使用<script>元素。当在此元素中包含了runat属性并设定其值为“server”时,该元素也可用在服务器端:


认识到asp页面可以包含服务器端脚本和客户端脚本是很重要的。客户端的脚本(包含runat=" client ",或省略runat属性)不被asp解释器处理,像带有.htm或. html文件扩展名的普通html页一样直接送给客户端:

(3) 包含单独的脚本文件
asp页面中能够包含单独的文件,而文件中包含脚本代码,这对编写可用于其他网页的通用函数是非常方便的。用这种方法,改变这个文件中的脚本代码,则包含这个文件的所有脚本在执行时都自动做相应的改变。为了包含单独的脚本文件,可使用<script>元素的s r c属性,以指定相对的、物理的或虚拟的路径和文件名。

这个单独的文件必须仅包含有效的脚本代码,不能包含原有页面内容如文本或html。假如使用这个技术,其他的代码不能放在<script>元素内,它必须是空的。如果要为页面增加其他脚本,需使用另外一个<script>元素或者由< % . . . % >分隔的脚本。
也可以包含来自包含脚本、文本或html的文件的文本,通过使用服务器端包含( server-side include,ssi )指令可以实现这一点。在第4章中将研究这个问题。
2. 定义脚本语言
asp有两个脚本引擎: vbscript和jscript。安装asp时这两个脚本引擎已缺省安装。也有由其他应用程序使用的脚本引擎,如微软的internet explorer web 浏览器和windows scripting host。在windows 2000中该浏览器的目前版本是5.0,可能还有新的升级版本。还有其他的脚本引擎,如tcl和perlscript (一种activex脚本解释器而非传统的基于cgi的perl )。
因此必须告诉asp,asp页用什么引擎。通常使用的方法是用特定的环境声明元素中定义引擎,这必须放在文件的第一行,并只能定义一次。这个元素一般用在asp代码分隔符后面跟着字符@来表示:

这个定义行还可包含其他的定义内容,在本章后面能看到相关内容。定义一个用vbscript编码的页面,如下所示:
<%language="vbscript"%>
对于jscript 引擎,使用:
<%@language="jscript"%>
经过上述定义,在< % . . . % >段内的页面的所有代码将被送至定义元素所定义的脚本引擎。对于这种代码分隔方式,这是指定脚本语言的唯一方法。
然而,使用<script>定义元素,可以单独定义每一段的脚本语言,如果需要的话在同一页面上可使用不止一种脚本语言:

不像在客户端,在注释元素内不需要隐藏脚本代码,因为当它执行时,代码将从页面移走,取而代之的仅是输出结果。在客户端查看asp页(在浏览器中选择view source)时,只能看到文本、html和其他客户端脚本代码。所有的服务器脚本都被执行,只有结果被送到客户端。
缺省的脚本语言
当没有指定asp页的脚本语言或没有单独的<script>元素时, asp将使用缺省的脚本引擎。首次安装iis时,缺省的脚本语言是vbscript。但对于整个web站点或者一个站点内的独立的虚拟应用程序,根据需要可相应改变设置。
在本章前面提到的application configuration对话框中,有一个app options选项卡包含了设置缺省语言的文本框,如图1 - 6所示。
缺省语言也可在iis里通过编辑active directory段的值来改变设置。在internet services manager mmc插件中所能见到的设置,都存放在windows 2000中的active directory中,只要有相应的权限就可以进行读取和编辑。本书将在后面章节详细介绍active directory。
除此以外,可根据个人喜好选择脚本语言。假如读者认为一种语言很好,可一直坚持使用它。因为所有的asp代码都在服务器端执行而不用担心浏览器的兼容性问题。假如读者精通vbscript和jscript或者其他的语言,可根据需要选择最合适的一种。然而因为vbscript各个版本的功能不断扩充(例如vbscript 5.0现在支持正规表达式),通常会选择vbscript。其对类型和语法的要求不是很高,并且有更简单的多语句结构,因此是一种容易使用的工具。

3. 脚本性能问题
一般来说,web服务器处理器的速度是足够满足使用的(除非特别繁忙的站点),因为它们的主要任务是从磁盘中载入页面并发往客户端。因此,每个页面的请求结果都使处理器等待磁盘。这意味着执行asp脚本通常对性能的影响非常小。而且如果在一个页面上某段脚本代码多次执行,而这段代码的已编译版本已被高速缓存,那么只须执行它,而不必多次编译,这样对性能的影响就更小了。
当然,随着请求数量的增加,服务器负载也不断增加,解析和执行每个asp页面就有相应的代价。应尽可能压缩asp解释器的工作量。下面是一些有用的提示。
(1) 避免在同一页面上混用脚本语言
如果同一页面上有几种脚本语言, asp不得不一个接一个地加载多种脚本引擎,并把相应的代码送给相应的引擎。这将降低处理速度,增加内存使用量。另外一个副作用是,假如编写的是一个顺序执行的代码(而不是一系列从其他代码段调用的函数或子程序),可能会以与它们在页面中出现的顺序不同的顺序执行。
例如,下面的代码可能不会产生所希望的结果,因为无法确保jscript代码的结果在网页中是首先出现,或是在第三位出现。


(2) 在脚本和其他内容中避免过多的环境切换
每当asp遇到一个脚本段,必须执行并把结果发到iis,然后再次返回去解释页面。因此,使用response.write语句(只创建发往客户端的文本,类似于print命令行)能使页面的效率更高。例如下面这段vbscript:

(3) 构建单独的组件
假如在一个页面不得不做大量的运算,或者运行一个过于复杂的脚本,通常的好办法是构建一个组件,并安装在web服务器上。组件通常是编译过的可执行代码,相对于解释asp脚本代码,使用的效率更高。本书后面将探讨构建组件的问题。

 本文Tagsiis  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:IIS相关设置问题和管理
· 下一篇:ASP的起源
· ASP中也能解压缩rar文件
· C#学习笔记(3)
· 域名专题 - NT 4.0究竟能不能进行泛域名解析
· 浅谈如何建立三层体系结构的ASP应用程序
· ASP做象资源管理器的树形目录


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077