|
来源:http://www.ddvip.net/
- ] s' V% y: `3 Z# q4 M
* }& P, I X" ^0 ?- `2 j0 Q2 a 6 H1 Y5 S6 v4 @$ N; A9 j7 O# g
. x+ k$ V% [3 H: A# @% p) O
' q2 g; d J: Y7 ^# {- H4 [( a* X/ \# H2 q3 I
/ U V( [! j7 |7 z( h5 q
[5 ], P4 ^+ N3 n3 h; F
, N% \1 f7 t1 T0 `3 S
|
( ]: [ h6 O8 D, q ASP本身包含了一个DLL文件,名字为ASP.DLL,缺省安装在Winnt\System32\inetsrv目录下。这个DLL文件负责得到一个ASP页面(由文件扩展名.ASP标识),然后对它进行分析,寻找服务器端脚本内容。这个脚本传送给相应的脚本引擎,脚本的执行结果与ASP页中的HTML和模板文本结合在一起。完整的页面会送到Web服务器,从那里送往原先提出请求的客户端。
6 |7 ^0 K- ^9 a8 {7 c 关于应用程序的映射
0 z8 k1 U v8 O9 O+ Z% U 为了更好地理解这个过程,需要研究一下Windows 2000中的应用程序映射的工作方式。对于每一个在IIS下设置好的Web站点,服务器上都有一个根目录。安装IIS时,缺省的Web站点通常是C:\InetPub\WWWRoot,除非在安装过程中改变了路径。对于这个目录以及其中的子目录(这个我们稍后再讨论),有一组定义目录如何配合IIS的属性。
4 t% p6 ~" U4 V# z 从Start菜单中的Administrative Tools打开Internet Services Manger,将运行微软管理控制台(Microsoft Management Console,MMC ),显示IIS的情况。
! s n+ j4 [4 B. `, Q. F 用鼠标右击Default Web Site,选择Properties (属性),然后出现Home Directory选项卡,如图1 - 4所示。
/ v1 k+ u3 J' Z; x 可以看到缺省的站点被设置成为一个虚拟的应用程序。在选项卡的下半部有Applicationname、Execute Permissions和Application Protection选项。IIS使用虚拟应用程序的方式来隔离页面集和所使用的组件的实例,以失败影响到防止Web服务器。正如早先所看到的,这是通过在单独的内存空间中执行页面和进程外组件实现的。我们将在本章后面讨论这个问题。5 Z7 J$ n( n; G7 J% r
4 f9 o- N9 L, l4 [( A" M! M4 a
" s0 I- t* u3 B( D, C 单击Configuration按钮打开Application Configuration对话框,见图1 - 5。在App Mappings选项卡里,可以看到IIS与各类文件采用特定的DLL相链接。任何含有扩展文件名.ASP的网页都送给ASP.DLL进行处理;有未映射的扩展文件名的页面,如HTML页面的.HTML和.htm及XML 文件的.xml,只需从磁盘上载入并直接发送给客户端。* s; E2 p2 \. W6 ~5 `8 |- L. M
" \( c# y7 }5 u! n, s 读者可能想了解这一选项卡上的其他文件类型。.ida、.idc和.idq文件扩展名是IDC模板文件和查询文件所使用的,因此,一个IDC查询页面( .idc )将直接送到动态链接库httpodbc.DLL进行处理。从文件名也可猜出,它使用ODBC执行SQL语句,返回包含在页面中的一组数据记录。同样, .shtm、.sHTML和.stm文件扩展名与文件名为ssinc.DLL的动态链接库相对应,这些文件类型一般用于请求服务器端包含( server- sideinclude,SSI)处理的文件。我们将在本书的后续部分给出一些相关的实例。
! v$ c7 D! i. f1 y. X: E- W% B- d 打开Application Configuration和Properties对话框时,读者可能很想了解各个设置的功能。本书的很多地方都要用到这些对话框和设置,查看这些设置有助于增加感性认识,但不要改变这些设置,除非知道为什么这样做。
5 r1 s# t4 d; P( Z& N 处理一个ASP文件" x+ ~7 w/ m$ X. P4 g
我们知道一个ASP页面提供给ASP动态链接库等待解释和执行,那么接着ASP会做些什么呢?
% I2 i4 }1 S0 \( h 第一步判断是否有ASP服务器端的代码需要执行。假如没有,它仅是简单地通知IIS这种情况,并让IIS向客户端发送页面。事实上, Windows 2000的一个新特性允许对所有页面使用扩展名.ASP,包括对那些非服务器端的脚本代码,而不牺牲任何性能。
+ H( G5 @. M* w+ g" F 在早先版本的IIS和ASP中,所有有.ASP扩展名的页面,都会被逐行解释,即使它们含有非ASP服务器端代码。这当然要比IIS直接把它们从磁盘发送给客户端要慢很多。* G8 o/ n9 Q& _& `$ |/ y8 V# q
当ASP从IIS接收到包含有服务器端脚本代码的页面时,它会逐行进行解释。那些非服务器端的脚本,或不需要ASP进行服务器处理的,将被返回给IIS,进而发送给客户端。送来的脚本都会送给相应的脚本引擎,脚本引擎处理后的结果被发送回IIS时,都会插入页面上相应位置上。
9 ~0 A* M5 Y; [+ s) y. f9 Z 为提高操作的效率, ASP也常把脚本引擎创建的编译代码,放在高速缓存中以备再次调用。这个代码与发往客户端的输出结果是不相同的。客户看到的是脚本代码在经过解释、语法检查和编译后的执行结果。在服务器上高速缓存的只是编译后的代码,在原来的源文件变化后,这些代码会被放弃。
/ @( L0 ^% F! ~' U, a 1. 辨别服务器端脚本段% A$ }0 E' r" O& x" D/ R& Y/ d
ASP的解释器能够根据两种分隔方式之一,分辨出代码是否为服务器端脚本。/ x% ?2 q: o; _: J% d! G
(1) 用<% %>脚本分隔符5 C ~- W& B6 e' S& Y) }: l7 E
< %和% >用以分隔脚本段的最常用字符是:
- v) q0 V4 ]$ N: }! ]! _$ D, A2 q , M0 v: _) M( T9 X
这个方法也用于在返回页面的其余文本和HTML中需要插入变量值或小段脚本语句的地方:
1 H3 X$ y+ u' V8 g. S; X7 R7 k 0 ^9 M4 }- L6 e* O6 C
这段代码产生如下结果:! v0 E- O& o& O! O% U! d9 a# u
The result of calculating seven plus six minus one is 12
" [# @+ T9 ?7 {1 Z' W (2) 使用<SCRIPT>元素% s) P. q# _/ z. d
当编写在浏览器内执行的脚本时,使用<SCRIPT>元素。当在此元素中包含了RUNAT属性并设定其值为“SERVER”时,该元素也可用在服务器端:
- u. b5 ?* U9 a3 I) f* @ 2 I* y* k/ C/ a4 Z+ @/ a! J6 ~
8 L6 g9 s5 M" b5 Z8 O. E) A
认识到ASP页面可以包含服务器端脚本和客户端脚本是很重要的。客户端的脚本(包含RUNAT=" CLIENT ",或省略RUNAT属性)不被ASP解释器处理,像带有.htm或. HTML文件扩展名的普通HTML页一样直接送给客户端:8 T4 [1 F9 g8 f, r; o
1 k' Y! {5 m) m h: b$ J& F" e ^0 I
(3) 包含单独的脚本文件
, \" F) B% o! c, f
2 @1 i& A* J/ M% t [1] [2] 下一页 | | |