QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3059|回复: 1
打印 上一主题 下一主题

ASP如何与IIS连接

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-23 13:42 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

来源:http://www.ddvip.net/

* X9 g. h9 b2 D

' G7 s- I' h/ s2 q9 Y) F1 f

% h+ Y: B0 @' u8 p8 J' o* Q' v$ V" _' S1 c& w/ U. o8 o6 {$ c& v- K, a/ W* J8 V
T. X$ ~6 c; ?. Z/ A# {' f" \$ g9 s/ M7 O2 q" E# B1 I$ w# \ o g" Y( n* g- ^; X5 P* U4 ]0 y `' e4 _
0 V; Y* g3 o1 u; A8 a/ N4 P

ASP本身包含了一个DLL文件,名字为ASP.DLL,缺省安装在Winnt\System32\inetsrv目录下。这个DLL文件负责得到一个ASP页面(由文件扩展名.ASP标识),然后对它进行分析,寻找服务器端脚本内容。这个脚本传送给相应的脚本引擎,脚本的执行结果与ASP页中的HTML和模板文本结合在一起。完整的页面会送到Web服务器,从那里送往原先提出请求的客户端。 6 Y; C5 K" C$ A4 s% O 关于应用程序的映射 ( R7 D% {: v0 ]+ j' [4 ^% [9 N. O 为了更好地理解这个过程,需要研究一下Windows 2000中的应用程序映射的工作方式。对于每一个在IIS下设置好的Web站点,服务器上都有一个根目录。安装IIS时,缺省的Web站点通常是C:\InetPub\WWWRoot,除非在安装过程中改变了路径。对于这个目录以及其中的子目录(这个我们稍后再讨论),有一组定义目录如何配合IIS的属性。: x' C2 F* w% ]) F) p+ C Z: [4 ^ 从Start菜单中的Administrative Tools打开Internet Services Manger,将运行微软管理控制台(Microsoft Management Console,MMC ),显示IIS的情况。5 E( I8 ~: W) X" F' M8 u 用鼠标右击Default Web Site,选择Properties (属性),然后出现Home Directory选项卡,如图1 - 4所示。 # k# l/ H7 [) i5 W* p 可以看到缺省的站点被设置成为一个虚拟的应用程序。在选项卡的下半部有Applicationname、Execute Permissions和Application Protection选项。IIS使用虚拟应用程序的方式来隔离页面集和所使用的组件的实例,以失败影响到防止Web服务器。正如早先所看到的,这是通过在单独的内存空间中执行页面和进程外组件实现的。我们将在本章后面讨论这个问题。( R( X z1 {2 f* V/ D- Y X & A9 J& `- o8 w4 a) O {' m% x+ m1 Q; z1 `- Z 单击Configuration按钮打开Application Configuration对话框,见图1 - 5。在App Mappings选项卡里,可以看到IIS与各类文件采用特定的DLL相链接。任何含有扩展文件名.ASP的网页都送给ASP.DLL进行处理;有未映射的扩展文件名的页面,如HTML页面的.HTML和.htm及XML 文件的.xml,只需从磁盘上载入并直接发送给客户端。6 f M* O' h& b1 j0 b7 Z* p * K6 h. b6 N! g 读者可能想了解这一选项卡上的其他文件类型。.ida、.idc和.idq文件扩展名是IDC模板文件和查询文件所使用的,因此,一个IDC查询页面( .idc )将直接送到动态链接库httpodbc.DLL进行处理。从文件名也可猜出,它使用ODBC执行SQL语句,返回包含在页面中的一组数据记录。同样, .shtm、.sHTML和.stm文件扩展名与文件名为ssinc.DLL的动态链接库相对应,这些文件类型一般用于请求服务器端包含( server- sideinclude,SSI)处理的文件。我们将在本书的后续部分给出一些相关的实例。5 f% Y' o: F. D* u v5 k 打开Application Configuration和Properties对话框时,读者可能很想了解各个设置的功能。本书的很多地方都要用到这些对话框和设置,查看这些设置有助于增加感性认识,但不要改变这些设置,除非知道为什么这样做。 % Z$ z+ |! }3 s- T7 ~ 处理一个ASP文件- C4 x- t5 m: x! Z+ S) v 我们知道一个ASP页面提供给ASP动态链接库等待解释和执行,那么接着ASP会做些什么呢? ) W" x* D2 C5 V) M. _' b( F2 s 第一步判断是否有ASP服务器端的代码需要执行。假如没有,它仅是简单地通知IIS这种情况,并让IIS向客户端发送页面。事实上, Windows 2000的一个新特性允许对所有页面使用扩展名.ASP,包括对那些非服务器端的脚本代码,而不牺牲任何性能。 ( T- G: E; K" ?* Q! X, ? 在早先版本的IIS和ASP中,所有有.ASP扩展名的页面,都会被逐行解释,即使它们含有非ASP服务器端代码。这当然要比IIS直接把它们从磁盘发送给客户端要慢很多。 8 O) B5 e0 j* u5 B3 s! s, r5 k! z 当ASP从IIS接收到包含有服务器端脚本代码的页面时,它会逐行进行解释。那些非服务器端的脚本,或不需要ASP进行服务器处理的,将被返回给IIS,进而发送给客户端。送来的脚本都会送给相应的脚本引擎,脚本引擎处理后的结果被发送回IIS时,都会插入页面上相应位置上。 4 E+ q6 i; ]" k! Z% x& f 为提高操作的效率, ASP也常把脚本引擎创建的编译代码,放在高速缓存中以备再次调用。这个代码与发往客户端的输出结果是不相同的。客户看到的是脚本代码在经过解释、语法检查和编译后的执行结果。在服务器上高速缓存的只是编译后的代码,在原来的源文件变化后,这些代码会被放弃。1 _; x5 Z1 ~$ e. U0 a! p4 L 1. 辨别服务器端脚本段1 q& F- `6 D3 } ASP的解释器能够根据两种分隔方式之一,分辨出代码是否为服务器端脚本。( `+ e/ M8 r" h! G5 ]6 X2 x (1) 用<% %>脚本分隔符 8 T0 Q: p6 B6 T& |- ]; T2 `$ z < %和% >用以分隔脚本段的最常用字符是: # X+ _4 `/ o5 S3 x+ Q" b0 I. g$ E ' k; B; A+ B0 v. {$ @- x' N7 k 这个方法也用于在返回页面的其余文本和HTML中需要插入变量值或小段脚本语句的地方:2 K1 M; F% E5 K) b3 v : z6 [- I" D/ O l6 Z( ?& h1 g 这段代码产生如下结果: 0 \! m2 ^6 e/ R) O/ N The result of calculating seven plus six minus one is 12 4 ?, S5 x. h/ m- Y (2) 使用<SCRIPT>元素5 W3 u% C5 I. b" i- Y 当编写在浏览器内执行的脚本时,使用<SCRIPT>元素。当在此元素中包含了RUNAT属性并设定其值为“SERVER”时,该元素也可用在服务器端:; w1 X2 E6 K$ j! l0 _' ? + }5 x' Z* ?# v+ d' J + P: G& f3 ]1 O5 d7 m7 s2 w1 @ 认识到ASP页面可以包含服务器端脚本和客户端脚本是很重要的。客户端的脚本(包含RUNAT=" CLIENT ",或省略RUNAT属性)不被ASP解释器处理,像带有.htm或. HTML文件扩展名的普通HTML页一样直接送给客户端:; ]& V4 v* f/ P3 O# V9 x ' ?+ y: A0 j2 ^, s* X( A (3) 包含单独的脚本文件

. n. b" q' e; }( M( y

7 c) G! c- u, i* m

[1] [2] 下一页

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

ASP页面中能够包含单独的文件,而文件中包含脚本代码,这对编写可用于其他网页的通用函数是非常方便的。用这种方法,改变这个文件中的脚本代码,则包含这个文件的所有脚本在执行时都自动做相应的改变。为了包含单独的脚本文件,可使用<SCRIPT>元素的S R C属性,以指定相对的、物理的或虚拟的路径和文件名。 4 |3 `) @2 w& e' R. X * J- I& `( r/ i8 T/ a4 D0 l 这个单独的文件必须仅包含有效的脚本代码,不能包含原有页面内容如文本或HTML。假如使用这个技术,其他的代码不能放在<SCRIPT>元素内,它必须是空的。如果要为页面增加其他脚本,需使用另外一个<SCRIPT>元素或者由< % . . . % >分隔的脚本。4 g$ {! Q! E/ O4 M5 c7 z 也可以包含来自包含脚本、文本或HTML的文件的文本,通过使用服务器端包含( Server-Side Include,SSI )指令可以实现这一点。在第4章中将研究这个问题。 - i! o' a7 ^" r! @- j& V4 G# E 2. 定义脚本语言 ( x& w9 C" F+ P: Y6 V B ASP有两个脚本引擎: VBScript和JScript。安装ASP时这两个脚本引擎已缺省安装。也有由其他应用程序使用的脚本引擎,如微软的Internet Explorer Web 浏览器和Windows Scripting Host。在Windows 2000中该浏览器的目前版本是5.0,可能还有新的升级版本。还有其他的脚本引擎,如TCL和PerlScript (一种ActiveX脚本解释器而非传统的基于CGI的Perl )。 9 S+ u6 ^1 D- u 因此必须告诉ASP,ASP页用什么引擎。通常使用的方法是用特定的环境声明元素中定义引擎,这必须放在文件的第一行,并只能定义一次。这个元素一般用在ASP代码分隔符后面跟着字符@来表示:. g$ I: g+ a S2 c7 V* P1 C3 l5 K" r2 Y $ d9 g, E8 n9 Y2 G: m, @2 w& Z: E' t9 A 这个定义行还可包含其他的定义内容,在本章后面能看到相关内容。定义一个用VBScript编码的页面,如下所示: # s- h) R5 ~5 N0 R+ n+ r( J <%LANGUAGE="VBScript"%>7 Q' y0 [4 w% f% v5 E 对于JScript 引擎,使用: 4 b' N- W+ \+ | v <%@LANGUAGE="JScript"%>4 ]& v4 q0 Z# M9 t6 Y- h; ~ 经过上述定义,在< % . . . % >段内的页面的所有代码将被送至定义元素所定义的脚本引擎。对于这种代码分隔方式,这是指定脚本语言的唯一方法。 . M/ D! j5 z" d* k# }9 O) ~ 然而,使用<SCRIPT>定义元素,可以单独定义每一段的脚本语言,如果需要的话在同一页面上可使用不止一种脚本语言: , B% N- P$ ^. s, K% M9 D7 M2 Y+ m" q 不像在客户端,在注释元素内不需要隐藏脚本代码,因为当它执行时,代码将从页面移走,取而代之的仅是输出结果。在客户端查看ASP页(在浏览器中选择View Source)时,只能看到文本、HTML和其他客户端脚本代码。所有的服务器脚本都被执行,只有结果被送到客户端。5 v0 o. I t! ^; E& r& g8 S 缺省的脚本语言 / g, n; j3 T I 当没有指定ASP页的脚本语言或没有单独的<SCRIPT>元素时, ASP将使用缺省的脚本引擎。首次安装IIS时,缺省的脚本语言是VBScript。但对于整个Web站点或者一个站点内的独立的虚拟应用程序,根据需要可相应改变设置。. u* Y: e. P7 \ 在本章前面提到的Application Configuration对话框中,有一个App Options选项卡包含了设置缺省语言的文本框,如图1 - 6所示。! J5 n& \' o2 S9 N1 P- T 缺省语言也可在IIS里通过编辑Active Directory段的值来改变设置。在Internet Services Manager MMC插件中所能见到的设置,都存放在Windows 2000中的Active Directory中,只要有相应的权限就可以进行读取和编辑。本书将在后面章节详细介绍Active Directory。# L) W" h* ?! \6 O% g 除此以外,可根据个人喜好选择脚本语言。假如读者认为一种语言很好,可一直坚持使用它。因为所有的ASP代码都在服务器端执行而不用担心浏览器的兼容性问题。假如读者精通VBScript和JScript或者其他的语言,可根据需要选择最合适的一种。然而因为VBScript各个版本的功能不断扩充(例如VBScript 5.0现在支持正规表达式),通常会选择VBScript。其对类型和语法的要求不是很高,并且有更简单的多语句结构,因此是一种容易使用的工具# R) x# I8 i0 r" f H1 ` & _8 L! i, g! @) x7 i/ i 3. 脚本性能问题7 j1 }& N& z/ y1 J! Q1 v9 ~ 一般来说,Web服务器处理器的速度是足够满足使用的(除非特别繁忙的站点),因为它们的主要任务是从磁盘中载入页面并发往客户端。因此,每个页面的请求结果都使处理器等待磁盘。这意味着执行ASP脚本通常对性能的影响非常小。而且如果在一个页面上某段脚本代码多次执行,而这段代码的已编译版本已被高速缓存,那么只须执行它,而不必多次编译,这样对性能的影响就更小了。 + J [0 b% M* G1 Q; J 当然,随着请求数量的增加,服务器负载也不断增加,解析和执行每个ASP页面就有相应的代价。应尽可能压缩ASP解释器的工作量。下面是一些有用的提示。: Y U6 E( G c5 [* R+ ^: F% i3 Z (1) 避免在同一页面上混用脚本语言- e* u# k1 ]! _! o3 K9 J$ A 如果同一页面上有几种脚本语言, ASP不得不一个接一个地加载多种脚本引擎,并把相应的代码送给相应的引擎。这将降低处理速度,增加内存使用量。另外一个副作用是,假如编写的是一个顺序执行的代码(而不是一系列从其他代码段调用的函数或子程序),可能会以与它们在页面中出现的顺序不同的顺序执行。 * M4 g. X; z5 k3 S0 E 例如,下面的代码可能不会产生所希望的结果,因为无法确保JScript代码的结果在网页中是首先出现,或是在第三位出现。 " k6 h* D' H! l6 _" Z/ {1 h* g3 W' K " }- a& j" k- [' |5 c" e$ w% V6 n/ D v& b Z4 `1 g (2) 在脚本和其他内容中避免过多的环境切换 - W1 n* \* _5 {: X; [ 每当ASP遇到一个脚本段,必须执行并把结果发到IIS,然后再次返回去解释页面。因此,使用Response.Write语句(只创建发往客户端的文本,类似于Print命令行)能使页面的效率更高。例如下面这段VBScript: 3 x6 Z- ?) a; @5 c7 M3 a % f' }$ d2 t, I" Q (3) 构建单独的组件 ; X. o4 C; q- e( |) L1 Q* q- j% J 假如在一个页面不得不做大量的运算,或者运行一个过于复杂的脚本,通常的好办法是构建一个组件,并安装在Web服务器上。组件通常是编译过的可执行代码,相对于解释ASP脚本代码,使用的效率更高。本书后面将探讨构建组件的问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 18:35 , Processed in 0.424797 second(s), 57 queries .

回顶部