通過前九篇的理論和實踐,相信大家已經(jīng)對 ASP 有了系統(tǒng)的了解,,雖然至今為止,,我們只學(xué)了 ASP 的 4 個內(nèi)建對象,但已經(jīng)完全能夠?qū)懗鲆恍嵱玫男〕绦蛄?。今天,,作者將繼續(xù)給大家講解最后一個 ASP 內(nèi)建對象——Server。 在開始本次課程之前,,我仍要在這里回答一些朋友們提出的比較普遍的問題,。最近仍有不少朋友來信問我,如何構(gòu)建服務(wù)器端的 Active Server Page 環(huán)境,。我想可能是我在前幾篇中沒有講清楚,,因此,在本篇的開頭有必要把這個問題詳細(xì)闡述一遍,。 ASP 的應(yīng)用完全是基于 Microsoft Internet Infomation Server(簡稱 IIS)之上的,,IIS 有分別用于 Windows NT Server 和 WorkStation 的兩個版本中(當(dāng)然 IIS4.0 也有 Windows98 版,這里暫且不提),,其功能幾乎完全相同,,所不同的只是安裝過程。一般來說,,我們使用的都是基于 NT 服務(wù)器上的 IIS 版本,。在 NT Server 的環(huán)境中,發(fā)布信息,、管理站點的工作一般都是通過 IIS 來完成的,。通常我們在 NT4.0 版本中運(yùn)行的是 IIS2.0 版,但它不具有支持 ASP 的功能,。ASP 必須在安裝完 IIS 后單獨(dú)安裝,,安裝文件是一個微軟發(fā)布的 ASP 安裝包,,大約有 9 兆多,應(yīng)該可以在微軟的網(wǎng)站上下載,。當(dāng) IIS2.0 中增添了支持 ASP 的功能后,,其也就自動升級為 3.0 版本。2.0 和 3.0 對于 WEB 服務(wù)器來說,,并沒有什么大的改動,,只是單純地增加了運(yùn)行 ASP 的能力。當(dāng)安裝完成后,,運(yùn)行 Internet 服務(wù)管理器,,你將看到如下畫面:
IIS 支持虛擬目錄,,通過在“服務(wù)器屬性”對話框中的“目錄”標(biāo)簽可以管理虛擬目錄。建立虛擬目錄對于管理 WEB 站點具有非常重要的意義,。首先,,虛擬目錄隱藏了有關(guān)站點目錄結(jié)構(gòu)的重要信息。因為在瀏覽器中,,客戶通過選擇“查看源代碼”,,很容易就能獲取頁面的文件路徑信息,,如果在 WEB 頁中使用物理路徑,將暴露有關(guān)站點目錄的重要信息,,這容易導(dǎo)致系統(tǒng)受到攻擊,。其次,只要兩臺機(jī)器具有相同的虛擬目錄,,你就可以在不對頁面代碼做任何改動的情況下,,將 WEB 頁面從一臺機(jī)器上移到另一臺機(jī)器。還有就是,,當(dāng)你將 WEB 頁面放置于虛擬目錄下后,,你可以對目錄設(shè)置不同的屬性,如:Read,、Excute,、Script。讀訪問表示將目錄內(nèi)容從 IIS 傳遞到瀏覽器,。而執(zhí)行訪問則可以使在該目錄內(nèi)執(zhí)行可執(zhí)行的文件,。當(dāng)你需要使用 ASP 時,就必須將你存放 .asp 文件的目錄設(shè)置為“Excute(執(zhí)行)”,。作者建議大家在設(shè)置 WEB 站點時,,將 HTML 文件同 ASP 文件分開放置在不同的目錄下,然后將 HTML 子目錄設(shè)置為“讀”,,將 ASP 子目錄設(shè)置為“執(zhí)行”,,這不僅方便了對 WEB 的管理,而且最重要的提高了 ASP 程序的安全性,,防止了程序內(nèi)容被客戶所訪問,。因為在今年 7 月底的時候 IIS 被一些網(wǎng)絡(luò)高手發(fā)現(xiàn)了一個可怕的 bug,那就是,,當(dāng)你在一個站點的 .asp 文件后加上 ::$DATA 后,,客戶將能在瀏覽器中看到該 .asp 文件的所有源代碼,這對于一個站點來說是非??膳碌?。當(dāng)然微軟已經(jīng)針對這個 bug,編寫了補(bǔ)丁,,但是為了徹底杜絕這種可能性的發(fā)生,,作者還一建議大家不要將 .asp 所在的目錄設(shè)置為可讀。 Server 對象提供對服務(wù)器上的方法和屬性的訪問 , 其中大多數(shù)方法和屬性是作為實用程序的功能服務(wù)的,。有了 Server 對象,,你就可以在服務(wù)器上啟動 ActiveX 對象例程,,并使用 Active Server 服務(wù)提供象 HTML 和 URL 編碼這樣的函數(shù)。 一,、語法 Server.property|method 二,、屬性 ScriptTimeout 超時值,在腳本運(yùn)行超過這一時間之后即作超時處理,。如下代碼指定服務(wù)器處理腳本在 100 秒后超時,。 < % Server.ScriptTimeout=100 %> 這里需要注意的是,通過使用元數(shù)據(jù)庫中的 AspScriptTimeout 屬性可以為 Web 服務(wù)或 Web 服務(wù)器設(shè)置缺省的 ScriptTimeout 值,。ScriptTimeout 屬性不能設(shè)置為小于在元數(shù)據(jù)庫中指定的值,。例如,如果 NumSeconds 設(shè)置為 60,,而元數(shù)據(jù)庫設(shè)置包含了默認(rèn)值 90 秒,,則腳本在 90 秒后超時。 1,、HTMLEncode 方法 HTMLEncode 方法允許你對特定的字符串進(jìn)行 HTML 編碼,雖然 HTML 可以顯示大部分你寫入 ASP 文件中的文本,,但是當(dāng)你需要實際包含 HTML 標(biāo)記中所使用的字符,,就會遇到問題。這是因為,,當(dāng)瀏覽器讀到這樣的字符串時,,會試圖進(jìn)行解釋。例如下面的這段文本 : 會被瀏覽器顯示為 : 這是對 HTMLEncode 方法的測試,。 為了避免此類問題,我們就需要使用 Server 對象的 HTMLEncode 方法,,采用對應(yīng)的不由瀏覽器解釋的 HTML Character Code 替代 HTML 標(biāo)記字符,。所以,用下面的代碼才能顯示正確的 HTMLEncode 字符串,,從而在瀏覽器中按你的需要輸出文本,。 2,、URLEncode 方法 就象 HTMLEncode 方法使客戶可以將字符串翻譯成可接受的 HTML 格式一樣,Server 對象的 URLEncode 方法可以根據(jù) URL 規(guī)則對字符串進(jìn)行正確編碼,,當(dāng)字符串?dāng)?shù)據(jù)以 URL 的形式傳遞到服務(wù)器時,,在字符串中不允許出現(xiàn)空格,,也不允許出現(xiàn)特殊字符。為此,,如果你希望在發(fā)送字符串之前進(jìn)行 URL 編碼,,可以使用 Server.URLEncode 方法。 MapPath 方法將指定的相對或虛擬路徑映射到服務(wù)器上相應(yīng)的物理目錄上,。 語法如下 :Server.MapPath(Path) Path 指定要映射物理目錄的相對或虛擬路徑。若 Path 以一個正斜杠 (/) 或反斜杠 (\) 開始,,則 MapPath 方法返回路徑時將 Path 視為完整的虛擬路徑,。若 Path 不是以斜杠開始,則 MapPath 方法返回同 .asp 文件中已有的路徑相對的路徑,。這里需要注意的是 MapPath 方法不檢查返回的路徑是否正確或在服務(wù)器上是否存在,。 對于下列示例,文件 data.txt 和包含下列腳本的 test.asp 文件都位于目錄 C:\Inetpub\Wwwroot\asp 下,。C:\Inetpub\Wwwroot 目錄被設(shè)置為服務(wù)器的宿主目錄,。下列示例使用服務(wù)器變量 PATH_INFO 映射當(dāng)前文件的物理路徑。以下腳本 輸出 c:\inetpub\wwwroot\asp\test.asp 由于下列示例中的路徑參數(shù)不是以斜杠字符開始的,,所以它們被相對映射到當(dāng)前目錄,,此處是目錄 C:\Inetpub\Wwwroot\asp。以下腳本 輸出 4,、CreateObject 方法 Server.CreateObject 恐怕是 ASP 中最為實用,,也是最強(qiáng)勁的功能了。它用于創(chuàng)建已經(jīng)注冊到服務(wù)器上的 ActiveX 組件實例,。這是一個非常重要的特性,,因為通過使用 ActiveX 組件能夠使你輕松地擴(kuò)展 ActiveX 的能力,正是使用了 ActiveX 組件,,你可以實現(xiàn)至關(guān)重要的功能,,譬如數(shù)據(jù)庫連接、文件訪問,、廣告顯示和其他 VBScript 不能提供或不能簡單地依靠單獨(dú)使用 ActiveX 所能完成的功能,。正是因為這些組件才使得 ASP 具有了強(qiáng)大的生命力。 Server.CreateObject("Component Name") 默認(rèn)情況下,,由 Server.CreateObject 方法創(chuàng)建的對象具有頁作用域,。這就是說,再當(dāng)前 ASP 頁處理完成之后,,服務(wù)器將自動破壞這些對象,。如果要創(chuàng)建有會話或應(yīng)用程序作用域的對象,可以使用 < OBJECT> 標(biāo)記并設(shè)置 SESSION 或 APPLICATION 的 SCOPE 屬性,也可以在對話及應(yīng)用程序變量中存儲該對象,。如下例程 : 這里需要注意的是,,不能創(chuàng)建與內(nèi)建對象同名的對象實例,否則,,如下列腳本將返回錯誤,。 < % Set Response = Server.CreateObject("Response") %> 至今為止,我們已經(jīng)學(xué)習(xí)完了 ASP 所有的內(nèi)建對象,,不知大家是不是很興奮,?其實 ASP 是很簡單的,只要大家不斷的實踐,,相信一段時間后都不難成為 ASP 的高手,。從下一篇起作者將開始介紹 ASP 內(nèi)建 ActiveX 組件,這也是 ASP 運(yùn)用中非常重要和實用的一部分,。敬請關(guān)注,。
|
|