直播中
在前面的章節(jié)中介紹了ASP提供的訪問(wèn)一個(gè)客戶請(qǐng)求和產(chǎn)生響應(yīng)的方法,本章將討論ASP的另兩個(gè)對(duì)象。就是Application和Session對(duì)象。這兩個(gè)對(duì)象不是直接地與請(qǐng)求和響應(yīng)的管理有關(guān),而是更多地與ASP網(wǎng)頁(yè)運(yùn)行環(huán)境的管理相關(guān)。
與建立Web站點(diǎn)或Web應(yīng)用程序有關(guān)的共同問(wèn)題之一,是使用HTTP協(xié)議時(shí)沒(méi)有狀態(tài)。狀態(tài)提供了與一個(gè)指定用戶有關(guān)的變量值、對(duì)象和其他資源,并且應(yīng)用程序中的任意例程都能使用它;以一種像VB或C++這樣的程序設(shè)計(jì)語(yǔ)言編寫(xiě)一般的基于客戶的應(yīng)用程序時(shí),使用狀態(tài)可以完成一些相應(yīng)的工作。然而,Web并不提供這種能力。在本章中,讀者將看到為什么和如何避免這個(gè)問(wèn)題。
本章還涉及到一些術(shù)語(yǔ)和技術(shù)問(wèn)題。它迄今為止,本書(shū)中已經(jīng)簡(jiǎn)單地討論了“Web應(yīng)用程序”,但沒(méi)有真正確切地理解或準(zhǔn)確定義它們到底是什么。本書(shū)也涉及到了“用戶會(huì)話”,也沒(méi)有相應(yīng)的比較完全的描述。前面有意地省略這方面的內(nèi)容,因?yàn)樗鼈兣cASP的應(yīng)用程序和會(huì)話密切相關(guān)。下面將介紹ASP的Application和Session對(duì)象。
本章研究的主要內(nèi)容:
· Web應(yīng)用程序是什么,以及它們?nèi)绾闻cASP Application對(duì)象相聯(lián)系。
· ASP如何自動(dòng)地創(chuàng)建和管理應(yīng)用程序和會(huì)話。
· Application和Session對(duì)象提供的功能。
· 如何把Application和Seesion對(duì)象放入ASP網(wǎng)頁(yè)中。
首先研究整個(gè)內(nèi)容的核心問(wèn)題:狀態(tài)。
3.1 Web上的狀態(tài)管理
許多開(kāi)發(fā)人員把應(yīng)用程序傳送到Web之前從來(lái)沒(méi)考慮狀態(tài)的概念。正如前面說(shuō)過(guò)的,Web是一個(gè)無(wú)狀態(tài)的環(huán)境。因此應(yīng)該探討一下?tīng)顟B(tài)是什么,了解能夠避免產(chǎn)生問(wèn)題的方法。
3.1.1狀態(tài)的準(zhǔn)確定義
在單用戶程序中,創(chuàng)建一個(gè)可執(zhí)行的應(yīng)用程序時(shí),例如使用VB建立一個(gè).exe文件,可以聲明一個(gè)全局(或Public)變量,然后在代碼中任何地方可對(duì)其進(jìn)行訪問(wèn)。在應(yīng)用程序運(yùn)行的所有時(shí)刻,時(shí)刻值一直是有效,并且是可訪問(wèn)的。
對(duì)于一個(gè)傳統(tǒng)的客戶機(jī)/服務(wù)器解決方案,例如一個(gè)基于客戶機(jī)的應(yīng)用程序?qū)σ粋€(gè)基于服務(wù)器的數(shù)據(jù)庫(kù)引擎進(jìn)行訪問(wèn)的系統(tǒng),每個(gè)客戶端建立了一個(gè)與服務(wù)器和數(shù)據(jù)庫(kù)應(yīng)用程序的連接。這種連接通常是通過(guò)驗(yàn)證用戶的方法來(lái)建立的。
驗(yàn)證過(guò)程是典型的識(shí)別用戶身份的過(guò)程,通過(guò)一個(gè)用戶名和口令組合來(lái)證明是否為合法的用戶。
一旦通過(guò)驗(yàn)證,在客戶端和基于服務(wù)器的應(yīng)用程序之間就建立了連接,該連接在用戶使用該應(yīng)用程序的所有時(shí)間內(nèi)一直保持有效。當(dāng)用戶注冊(cè)到酵Windows 2000服務(wù)器上時(shí),這一切便會(huì)發(fā)生。無(wú)論何時(shí),管理員使用“Active Directory Users and Computers”實(shí)用程序(單擊“Start”菜單的“Administrative Tools”選項(xiàng)中的“Directory Management”項(xiàng))都可以觀察到活動(dòng)的用戶連接。這個(gè)過(guò)程在許多系統(tǒng)中都相同,例如Microsoft SQL Server。
這種永久的連接意味著:當(dāng)用戶發(fā)送指令或請(qǐng)求到服務(wù)器上時(shí),服務(wù)器會(huì)很容易地識(shí)別每個(gè)用戶。同樣服務(wù)器的響應(yīng)或任何其他用戶的信息也能直接返回用戶。要進(jìn)一步指出的是服務(wù)器可以比較容易地存儲(chǔ)與每個(gè)客戶相關(guān)的值和信息,并在需要的時(shí)候提供給相應(yīng)的客戶。當(dāng)然,服務(wù)器應(yīng)用程序能夠擁有主全局變量,以便于用戶在需要的時(shí)候進(jìn)行訪問(wèn)。
這種識(shí)別每個(gè)客戶端的請(qǐng)求并在內(nèi)存中保存相關(guān)用戶的值的能力構(gòu)成狀態(tài)??梢哉J(rèn)為狀態(tài)代表應(yīng)用程序的值、環(huán)境以及用戶的內(nèi)部變量,并貫穿于應(yīng)用程序和用戶連接的整個(gè)過(guò)程。
3.1.2 狀態(tài)的重要性
如果打算創(chuàng)建與用戶進(jìn)行交互的基于Web站點(diǎn)的應(yīng)用程序,而不是僅顯示獨(dú)立頁(yè)面的Web網(wǎng)站,必須能夠?yàn)槊總€(gè)用戶提供獨(dú)立的狀態(tài)。這可能只是記住他們的名字,也可能要為每個(gè)用戶存儲(chǔ)對(duì)象引用或不同的記錄集。如果不能這樣做,ASP網(wǎng)頁(yè)就不能做更多的事情,因?yàn)樵擁?yè)面執(zhí)行完成時(shí),頁(yè)面中的變量和其他相關(guān)資料都破壞了。錄用戶請(qǐng)求下一個(gè)頁(yè)面時(shí),這個(gè)頁(yè)面提供的所有信息將全部失去。
因此,需要找到一種方法,保存每個(gè)訪問(wèn)者的狀態(tài)。能夠存儲(chǔ)對(duì)所有用戶而言的全局值是非常重要。例如,一個(gè)Web風(fēng)格的訪問(wèn)或頁(yè)面點(diǎn)擊計(jì)數(shù)器,它不為每個(gè)用戶提供自己的計(jì)數(shù)器,用戶們通常想要看到訪問(wèn)者的總數(shù),而不僅僅是他們自己訪問(wèn)的次數(shù)。訪問(wèn)者的數(shù)目需要與應(yīng)用程序級(jí)狀態(tài)一起存儲(chǔ),而不是與用戶級(jí)狀態(tài)一起存儲(chǔ)。
這不是一個(gè)剛出現(xiàn)的問(wèn)題,自從商用站點(diǎn)占據(jù)了Web,就已經(jīng)存在,甚至更早些。所以已有許多在Web上存儲(chǔ)狀態(tài)的傳統(tǒng)的解決方案。Web站點(diǎn)管理員想要了解訪問(wèn)者以前是否曾訪問(wèn)過(guò)他們的網(wǎng)站,如果訪問(wèn)過(guò),訪問(wèn)過(guò)多少次?還定期訪問(wèn)其他什么網(wǎng)站等。這樣可以更好地制定其廣告目標(biāo)。所有這些都要求一種方法來(lái)存儲(chǔ)有關(guān)用戶在訪問(wèn)時(shí)所產(chǎn)生的網(wǎng)頁(yè)請(qǐng)求或每次訪問(wèn)間的信息。
3.1.3在Web上創(chuàng)建狀態(tài)
在頁(yè)面請(qǐng)求和站點(diǎn)訪問(wèn)之間提供狀態(tài)常用的方法是通過(guò)cookie。我們?cè)谇懊娴恼鹿?jié)中已經(jīng)看到,如何在客戶端的計(jì)算機(jī)中存放相應(yīng)的值,這些值與每個(gè)頁(yè)面請(qǐng)求一起發(fā)送給對(duì)此cookie有效的域。通過(guò)用ASP檢查和更新cookie,在某種程度上能夠保持一個(gè)狀態(tài)??梢允褂盟男畔?lái)識(shí)別用戶,然后把用戶連接到一個(gè)已存儲(chǔ)相應(yīng)值的集合。
例如,可以檢測(cè)一個(gè)用戶請(qǐng)求是否包含一個(gè)站點(diǎn)指定的cookie。如果不包含,則為該用戶分配一個(gè)某種類(lèi)型的標(biāo)識(shí),指明一個(gè)數(shù)量,并存儲(chǔ)在帶有一個(gè)長(zhǎng)有效期的cookie中。以后該用戶對(duì)這個(gè)站點(diǎn)的每一次訪問(wèn),都能夠檢測(cè)到cookie并更新所包含的信息。同時(shí)可以收集有關(guān)訪問(wèn)的次數(shù)和持續(xù)時(shí)間的數(shù)據(jù),并存儲(chǔ)在服務(wù)器上,以備將來(lái)使用。
但是,如果用戶轉(zhuǎn)移到另一個(gè)計(jì)算機(jī),或刪除了cookie,或者他們的瀏覽器拒絕接收發(fā)送給他們的cookie,會(huì)發(fā)生什么事情呢?在這種情況下,不能維持狀態(tài),因?yàn)橄乱淮尾荒茏R(shí)別他們現(xiàn)在,Web上有許多cookie,大多數(shù)人會(huì)接受它們,而不加理會(huì)。如果打開(kāi)瀏覽器中的“Warn before accepting cookies”選項(xiàng),接著漫游幾個(gè)大的站點(diǎn),你就會(huì)明白其中的含意。
1. 匿名訪問(wèn)者與授權(quán)的訪問(wèn)者
如果認(rèn)為cookie是一個(gè)有點(diǎn)草率的解決方案,可以使用更直接的方法。許多站點(diǎn)采用的一種方法是,在訪問(wèn)者點(diǎn)擊一個(gè)站點(diǎn)時(shí),或者點(diǎn)擊一個(gè)要求驗(yàn)證身份的頁(yè)面時(shí),彈出一個(gè)進(jìn)行登錄的對(duì)話框。訪問(wèn)者首先必須進(jìn)行注冊(cè),獲得一個(gè)某種類(lèi)型的用戶名/口令的組合,才能允許訪問(wèn)相應(yīng)的站點(diǎn)或頁(yè)面。
為了證實(shí)訪問(wèn)者是一個(gè)已知的并且合法的用戶,在訪問(wèn)者的計(jì)算機(jī)上放置的一個(gè)cookie,它或者保存注冊(cè)的詳細(xì)數(shù)據(jù),或者是一把表明已驗(yàn)證過(guò)身份的“鑰匙(key)”。同時(shí),訪問(wèn)者的詳細(xì)數(shù)據(jù)永久地保存在服務(wù)器上,準(zhǔn)備再次訪問(wèn)時(shí)使用。如果訪問(wèn)者的瀏覽器中有了這樣一個(gè)cookie,他就可以自由地訪問(wèn)該網(wǎng)站,因?yàn)橐呀?jīng)驗(yàn)證過(guò)了。
如果cookie沒(méi)有有效期限(Expires),cookie的值在關(guān)閉瀏覽器時(shí)自動(dòng)消失,在下一次訪問(wèn)時(shí)必須重新注冊(cè)和再次驗(yàn)證。當(dāng)然,如果拒絕接收cookie或刪除了cookie,就只能再次得到注冊(cè)對(duì)話框。這樣的話,如果不被識(shí)別,就不能訪問(wèn)該站點(diǎn)。
通過(guò)強(qiáng)制用戶就像注冊(cè)到自己的網(wǎng)絡(luò)一樣注冊(cè)到Web服務(wù)器,Windows 2000整體安全性能為IIS提供更強(qiáng)和更安全的驗(yàn)證功能。但是,這只能與Internet Explorer 3.0和之上版本的瀏覽器一起工作。IIS也可以使用BASIC驗(yàn)證允許非Microsoft瀏覽器注冊(cè)Web服務(wù)器。
2. 不再有匿名訪問(wèn)者
在IIS Web服務(wù)器上使用ASP時(shí),除非用戶離開(kāi)該站點(diǎn)到另一個(gè)網(wǎng)站或者關(guān)閉了瀏覽器,否則能在當(dāng)前會(huì)話中跟蹤用戶。在本章的后面,將看到如何使用這個(gè)功能來(lái)標(biāo)識(shí)一個(gè)訪問(wèn)者、存儲(chǔ)用戶的本地信息和提供狀態(tài)。下面與已經(jīng)討論過(guò)的解決方案相比較,討論其工作方式。
ASP和IIS共同提出了一個(gè)用戶會(huì)話的概念,通過(guò)ASP Session對(duì)象進(jìn)行交互。在每個(gè)訪問(wèn)者第一次訪問(wèn)服務(wù)器上的一個(gè)ASP網(wǎng)頁(yè)時(shí),為他創(chuàng)建一個(gè)新的并且獨(dú)立的會(huì)話對(duì)象,分配給該會(huì)話一個(gè)會(huì)話標(biāo)識(shí)號(hào),并把包含會(huì)話標(biāo)識(shí)符的特殊加密版本的一個(gè)cookie發(fā)送給客戶。
cookie的路徑(參看前面的章節(jié)有關(guān)cookie屬性的描述)設(shè)置為運(yùn)行在服務(wù)器上的ASP應(yīng)用程序的根路徑。這很可能上缺省的Web網(wǎng)站的根目錄(即“/”),但也可能會(huì)是另外一個(gè)值(稍后會(huì)看到)。在cookie中沒(méi)有提供Expires值,所以當(dāng)瀏覽器關(guān)閉時(shí),cookie值也就消失。
每當(dāng)這個(gè)用戶訪問(wèn)這個(gè)ASP網(wǎng)頁(yè),ASP都會(huì)查找這個(gè)cookie。命名為ASPSESSIONIDxxxxxxxx,其中每個(gè)x是一個(gè)字母字符。從第2章圖2-7所示的ServerVariables集合,能夠在HTTP報(bào)頭中看到它。這里高亮地顯示ASP cookie,如圖3-1所示:
<img src=http://go2.163.com/~davelu/asp27.jpg>
圖3-1 顯示的cookie值
但是,這個(gè)cookie不會(huì)出現(xiàn)在 Request.Cookies或Response.Cookies集合中,ASP把它隱藏起來(lái),但仍保存在瀏覽器上。對(duì)于每個(gè)ASP網(wǎng)頁(yè)請(qǐng)求,ASP都要查看該值。這個(gè)cookie包含的值,指明了這個(gè)用戶的會(huì)話。因此,相應(yīng)的Session對(duì)象(該對(duì)象在內(nèi)存中已被處理,并且一直包含所有在前一頁(yè)面請(qǐng)求過(guò)程中進(jìn)行操作的值)的內(nèi)容可以移交給ASP網(wǎng)頁(yè)中的腳本。
當(dāng)然,如前所述,如果客戶瀏覽器不接收或不支持這些cookie,這個(gè)處理將失敗。在這種情況下,不能創(chuàng)建ASP會(huì)話,對(duì)這個(gè)訪問(wèn)者的狀態(tài)也不進(jìn)行自動(dòng)維護(hù)。
3.2 Web應(yīng)用程序的定義
前面的章節(jié)中已經(jīng)多次使用過(guò)Web應(yīng)用程序(Web Application)術(shù)語(yǔ),所指的既不是一個(gè)真正意義上的Web網(wǎng)站,又不是一個(gè)傳統(tǒng)的應(yīng)用程序。換句話說(shuō),而是認(rèn)為它是一些Web網(wǎng)頁(yè)和用來(lái)完成某些任務(wù)的其他資源的一個(gè)集合。它隱含這樣一層意思:有一個(gè)預(yù)定義的路線貫穿于網(wǎng)頁(yè)之中,用戶可做出選擇或提供信息使任務(wù)能夠完成。
例如,一個(gè)在線商店,你為了購(gòu)買(mǎi)貨物,進(jìn)行反復(fù)的觀察和選擇,瀏覽一系列網(wǎng)頁(yè),收集所需要的信息,支付相應(yīng)的費(fèi)用,最后發(fā)出定單。也可能是一個(gè)“軟件升級(jí)向?qū)А?,指?dǎo)用戶完成下載和安裝新軟件的過(guò)程,或者可能是一個(gè)基于Intranet的報(bào)價(jià)單或銷(xiāo)售報(bào)告的生成工具。
所有這些不同于“標(biāo)準(zhǔn)”的Web網(wǎng)站,一般的Web站點(diǎn)使用一系列菜單或?qū)Ш綑谝灶A(yù)先未定義的路徑漫游該站點(diǎn)。但是一個(gè)Web應(yīng)用程序遠(yuǎn)不只是受控制的導(dǎo)航器。自由地漫游于一個(gè)Web網(wǎng)站時(shí),可以進(jìn)行無(wú)狀態(tài)的和匿名的訪問(wèn),但Web應(yīng)用程序一般不接受。
3.2.1 ASP應(yīng)用程序的定義
上述內(nèi)容可以認(rèn)為是術(shù)語(yǔ)“Web應(yīng)用程序”的一個(gè)合理的一般定義,但遺憾的是,在談?wù)撚嘘P(guān)“ASP應(yīng)用”時(shí),僅這些還不夠?;卮鹗裁词恰癢eb應(yīng)用”可以是主觀的,而回答什么是“ASP應(yīng)用”則需要從技術(shù)上的解釋。在ASP中術(shù)語(yǔ)“應(yīng)用程序”有自己特定的含義,在討論如何實(shí)現(xiàn)之前,弄懂這個(gè)概念至關(guān)重要。
ASP應(yīng)用程序與兩個(gè)主要的內(nèi)容有關(guān):
· 全局范圍的規(guī)定,具有一個(gè)全局可訪問(wèn)的變量存儲(chǔ)區(qū)域。
· 通過(guò)COM+與IIS的集成,可更好地管理組件。
下面討論這些內(nèi)容。第二個(gè)內(nèi)容涉及到其他ASP對(duì)象,其覆蓋范圍相應(yīng)廣泛。在下一章研究ASP Server對(duì)象時(shí),將對(duì)這部分內(nèi)容進(jìn)行詳細(xì)地討論。
1. 提供Web應(yīng)用程序的全局范圍
ASP提供一個(gè)Application對(duì)象,基本上與前面討論的Session對(duì)象相當(dāng)。但是,這是在應(yīng)用程序?qū)佣皇窃谟脩魧?。換句話說(shuō),該對(duì)象是全局的,不是對(duì)單獨(dú)用戶的,而是對(duì)應(yīng)用程序的所有用戶,其作用域不限制為單獨(dú)用戶的訪問(wèn)。這與在一個(gè)正常的可執(zhí)行應(yīng)用程序中的全局(或Public)變量相同。Application對(duì)象可用于在全局環(huán)境中存儲(chǔ)變量和信息(即狀態(tài)),該應(yīng)用程序內(nèi)的任何ASP網(wǎng)頁(yè)中運(yùn)行的腳本都可訪問(wèn)這些值,而不管是哪個(gè)訪問(wèn)者發(fā)出的請(qǐng)求。
但是,這沒(méi)有回答主要問(wèn)題:什么是一個(gè)ASP應(yīng)用程序?為此,需要研究ASP內(nèi)部的一些情況。
當(dāng)用戶請(qǐng)求一個(gè)ASP網(wǎng)頁(yè)時(shí),IIS通過(guò)實(shí)例化asp.dll(用來(lái)實(shí)現(xiàn)ASP)創(chuàng)建一個(gè)環(huán)境(如第1章所述)。將該頁(yè)面解釋為服務(wù)器端腳本,相應(yīng)的腳本引擎的實(shí)例用來(lái)執(zhí)行該腳本。
實(shí)例化的asp.dll初如事件啟動(dòng)一個(gè)ASP應(yīng)用程序,創(chuàng)建一個(gè)Application對(duì)象。然后,為這個(gè)用戶啟動(dòng)一個(gè)會(huì)話,并創(chuàng)建單獨(dú)的Session對(duì)象。當(dāng)更多的會(huì)話啟動(dòng)時(shí),這個(gè)Application對(duì)象保留在作用域中(即已經(jīng)實(shí)例化和可用)。一旦最后保持活動(dòng)的會(huì)話結(jié)束,該應(yīng)用程序就結(jié)束,并取消相應(yīng)的Application對(duì)象。
(1) 缺省的ASP應(yīng)用
Windows 2000在安裝IIS和ASP時(shí),創(chuàng)建一個(gè)缺省的Web站點(diǎn)。它被配置成一個(gè)ASP應(yīng)用程序,涉及到在Properties對(duì)話框中針對(duì)站點(diǎn)根目錄文件夾(缺省為C:\Inetpub\WWWRoot)的一些設(shè)置。圖3-2所示是缺省Web站點(diǎn)的Properties對(duì)話框的屏幕。
<img src=http://go2.163.com/~davelu/asp28.jpg>
圖3-2 缺省Web網(wǎng)站的Properties對(duì)話框
涉及到ASP應(yīng)用程序的文件之一是global.asa。這個(gè)文件用于定制應(yīng)用程序行為的方式。放置在應(yīng)用程序的根目錄下,可用于該目錄下的所有子目錄。因此,如果它放置在整個(gè)Web站點(diǎn)的根目錄下,則定義整個(gè)網(wǎng)站作為缺省的ASP應(yīng)用程序的一部分。
在本章后面有關(guān)應(yīng)用程序和會(huì)話事件的部分中,將看到這個(gè)文件及其使用方法。
(2) ASP虛擬應(yīng)用程序
如同在設(shè)置過(guò)程中創(chuàng)建缺省的應(yīng)用程序一樣,可以在該Web網(wǎng)站的任何子目錄中創(chuàng)建屬于自己的ASP虛擬應(yīng)用程序。這個(gè)應(yīng)用程序包含作為“應(yīng)用程序目錄”而定義的目錄中所有的子目錄。并且,這個(gè)目錄和子文件夾也都是缺省應(yīng)用程序的一部分,共享由缺省的Application對(duì)象創(chuàng)建的全局空間。
事實(shí)上,在缺省的應(yīng)用程序中存儲(chǔ)的所有變量在子目錄中的應(yīng)用程序中也都是可用的。然而,如果該子目錄應(yīng)用程序中的一個(gè)ASP網(wǎng)頁(yè)把一個(gè)值寫(xiě)入Application對(duì)象,而Application對(duì)象與缺?。ǜ?yīng)用程序中已存在的一個(gè)值有相同的名字,那么,原先的值在子目錄應(yīng)用程序中就不能再用。但是在其他的應(yīng)用程序或ASP網(wǎng)頁(yè)中,將保留原有的值,因?yàn)楦夸浀膽?yīng)用程序不能訪問(wèn)子目錄應(yīng)用中的值。
從一個(gè)子程序或函數(shù)的變量的角度考慮這個(gè)問(wèn)題。如果定義一個(gè)變量intMyValue為Public或全局的變量,可以從任何的子程序或函數(shù)內(nèi)部訪問(wèn)該變量。但是,如果又聲明一個(gè)具有相同名字的局部變量,并在該子程序或函數(shù)內(nèi)對(duì)該變量進(jìn)行引用,則得到此變量的局部值。不能再訪問(wèn)原先的值。當(dāng)子程序或函數(shù)結(jié)束,局部值被撤消,全局變量原有的值仍然保留著:
Public intMyValue = 42
Function DoSomething()
Response.Write intMyValue ‘Gives 42 from global variable
Dim intMyValue
IntMyValue = 17
Response.Write intMyValue ‘Gives 17 from new local variable,but
‘the global value of MyValue is still 42
End Function
(3) 創(chuàng)建自己的ASP虛擬應(yīng)用程序
為了建立一個(gè)新的虛擬應(yīng)用程序,使用Internet Services Manager應(yīng)用程序或具有相同功能的HTML Web Manager網(wǎng)頁(yè)。在Internet Services Manager中,在要?jiǎng)?chuàng)建的虛擬應(yīng)用程序的目錄上單擊右鍵,并選擇New,接著選擇Virtual Directory,屏幕如圖3-3所示:
<img src=http://go2.163.com/~davelu/asp29.jpg>
圖3-3 創(chuàng)建ASP虛擬應(yīng)用程序的屏幕
這個(gè)操作啟動(dòng)New Virtual Directory Wizard,該向?qū)У拈_(kāi)始屏幕提供有關(guān)向?qū)У牟僮餍畔ⅰ螕鬘ext,在第二頁(yè)中鍵入新的虛擬應(yīng)用程序的名字(或別名)。這個(gè)名字與Internet Services Manager中選擇的目錄的路徑聯(lián)合起來(lái),將成為該應(yīng)用程序的URL。屏幕如圖3-4所示:
<img src=http://go2.163.com/~davelu/asp30.jpg>
圖3-4 New Virtual Directory Wizard的屏幕
為了把一個(gè)現(xiàn)有的目錄轉(zhuǎn)換為與該目錄具有相同名字的一個(gè)應(yīng)用程序,選擇包含想要轉(zhuǎn)換的目錄,并在向?qū)У腣irtual Directory Alias頁(yè)中使用該目錄名。例如把已有的test目錄轉(zhuǎn)換為一個(gè)虛擬應(yīng)用程序,應(yīng)該在Internet Services Manager中選擇Default Web Site條目,并提供一個(gè)別名“test”。
再單擊Next,指定包含該應(yīng)用程序的內(nèi)容(頁(yè)面)的路徑。單擊Browser選擇一個(gè)已有目錄。這個(gè)目錄是新的虛擬應(yīng)用指向的目錄。屏幕如圖3-5所示:
<img src=http://go2.163.com/~davelu/asp31.jpg>
圖3-5 指定路徑時(shí)的屏幕
單擊Next打開(kāi)Access Permissions頁(yè),選擇給予這個(gè)應(yīng)用程序的所有用戶的權(quán)限。缺省值是Read和Run Scripts,對(duì)大多數(shù)用戶而言是適合的。屏幕如圖3-6所示:
<img src=http://go2.163.com/~davelu/asp32.jpg>
圖3-6 設(shè)置用戶許可權(quán)限時(shí)的屏幕
如果想編寫(xiě)用戶可直接執(zhí)行的、定制的編譯的CGI應(yīng)用程序,只選擇“Execute”:例如,用戶通過(guò)在請(qǐng)求的URL中指定相應(yīng)名字的方法執(zhí)行的一個(gè).exe文件,像“http://mysite.com/.../Test Application/create_user.exe?user=Jjones”。
單擊Next,向?qū)?chuàng)建虛擬應(yīng)用程序。在圖3-7所示的屏幕中,可在左邊的列表欄中看到帶有一個(gè)包含一些填充物的打開(kāi)的小盒子圖標(biāo)。
<img src=http://go2.163.com/~davelu/asp33.jpg>
圖3-7 虛擬應(yīng)用程序創(chuàng)建完成后的屏幕
如果現(xiàn)在用右鍵單擊新的應(yīng)用程序并選擇Properties,可以看到向?qū)б呀?jīng)選擇的設(shè)置。在這里可根據(jù)需要修改訪問(wèn)權(quán)限、“Local Path”和“Application Settings”。同時(shí)會(huì)看到一個(gè)Remove按鈕,可以用來(lái)刪除該虛擬應(yīng)用程序,如圖3-8所示:
<img src=http://go2.163.com/~davelu/asp34.jpg>
圖3-8 虛擬應(yīng)用程序?qū)傩栽O(shè)置的屏幕