就服務(wù)器端處理而言,ASP是產(chǎn)生動(dòng)態(tài)Web網(wǎng)頁(yè)的一種相對(duì)較新的技術(shù)。動(dòng)態(tài)頁(yè)意味著什么呢?先暫時(shí)不考慮客戶端相關(guān)功能上的進(jìn)展,也不討論客戶端腳本、Java Applet、動(dòng)態(tài)HTML或ActiveX控件等內(nèi)容。這里的動(dòng)態(tài)頁(yè)是專指服務(wù)器響應(yīng)客戶端請(qǐng)求產(chǎn)生的頁(yè)面,并且根據(jù)情況每次產(chǎn)生的頁(yè)面可能是不同的。
舉個(gè)簡(jiǎn)單的例子,創(chuàng)建一個(gè)只包含當(dāng)前日期和時(shí)間的頁(yè)面。每次請(qǐng)求該頁(yè)面時(shí)將顯示一個(gè)不同的值,因?yàn)槿掌诤蜁r(shí)間取決于服務(wù)器的時(shí)鐘,或取決于提供日期和時(shí)間的一個(gè)資源(例如一個(gè)獨(dú)立的服務(wù)器或來(lái)自于互聯(lián)網(wǎng)上一個(gè)標(biāo)準(zhǔn)時(shí)鐘)。當(dāng)然,實(shí)際上動(dòng)態(tài)頁(yè)要比這復(fù)雜得多,也許顯示數(shù)據(jù)庫(kù)記錄的當(dāng)前值或者郵件服務(wù)器上等待著的郵件消息的摘要。重要的是服務(wù)器不僅閱讀一個(gè)無(wú)格式的HTML頁(yè)面、或磁盤(pán)上的文本文件以及把它們發(fā)送給客戶,而且,必須完成一些工作來(lái)創(chuàng)建該頁(yè)面。
Internet服務(wù)器應(yīng)用編程接口
傳統(tǒng)的技術(shù)是使用與Web服務(wù)器的一個(gè)接口,它被稱為Internet服務(wù)器應(yīng)用編程接口(Internet Server Application Programming Interface,ISAPI)。
ISAPI可用于執(zhí)行其他的應(yīng)用程序,這些應(yīng)用程序通過(guò)C語(yǔ)言風(fēng)格的stdin和stdout數(shù)據(jù)流函數(shù)來(lái)讀取客戶端請(qǐng)求的值并創(chuàng)建Web服務(wù)器的響應(yīng)。ISAPI應(yīng)用程序所必須做的全部事情就是編寫(xiě)相應(yīng)結(jié)果頁(yè)面的文本和HTML,并通過(guò)stdout函數(shù)輸出到Web服務(wù)器。事實(shí)上ASP DLL內(nèi)部真正做的事情是更面向?qū)ο蟮摹?BR> IIS自開(kāi)始就運(yùn)行ISAPI的應(yīng)用程序和腳本解釋器。它提供一個(gè)特殊的解釋器動(dòng)態(tài)鏈接庫(kù),給出訪問(wèn)服務(wù)器的請(qǐng)求和響應(yīng)的另一種方法,盡管受到一定的限制。它通過(guò)服務(wù)器端包含指令實(shí)現(xiàn),之所以這樣說(shuō),是因?yàn)樗鼈兪窃诜?wù)器上執(zhí)行的,并且結(jié)果包含在傳送給客戶端的響應(yīng)中。這個(gè)特性在IIS中是通過(guò)一個(gè)名為ssinc.dll的動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)的。缺省情況下,IIS把文件擴(kuò)展名為.shtml、.shtm或.stm的任意頁(yè)面都映射到這個(gè)動(dòng)態(tài)鏈接庫(kù)。打開(kāi)默認(rèn)Web站點(diǎn)的Properties對(duì)話框,在Application Setting中單擊Configuration按鈕,可以看到這種映射。
這樣,帶有這些被映射的文件擴(kuò)展名的頁(yè)面將被傳送給ssinc.dll進(jìn)行處理。因此,執(zhí)行頁(yè)面中所有的服務(wù)器端包含語(yǔ)句,結(jié)果(如有的話)插入到服務(wù)器的響應(yīng)中,即插入到客戶端接收到的頁(yè)面中。
因?yàn)檫@些文件是映射到ssinc.dll文件而不是映射到ASP動(dòng)態(tài)鏈接庫(kù)(asp.dll)的,所以在這些頁(yè)面中的所有ASP代碼將被忽略并且按照原有狀態(tài)傳送給客戶端,客戶端將能夠看到這些腳本。然而,在ASP 3.0版本中有一個(gè)避免這種情況的方法,稍后在討論Server對(duì)象的Execute和Transfer方法時(shí),研究這個(gè)方法??荚嚧缶庉嬚?BR>
舉個(gè)簡(jiǎn)單的例子,創(chuàng)建一個(gè)只包含當(dāng)前日期和時(shí)間的頁(yè)面。每次請(qǐng)求該頁(yè)面時(shí)將顯示一個(gè)不同的值,因?yàn)槿掌诤蜁r(shí)間取決于服務(wù)器的時(shí)鐘,或取決于提供日期和時(shí)間的一個(gè)資源(例如一個(gè)獨(dú)立的服務(wù)器或來(lái)自于互聯(lián)網(wǎng)上一個(gè)標(biāo)準(zhǔn)時(shí)鐘)。當(dāng)然,實(shí)際上動(dòng)態(tài)頁(yè)要比這復(fù)雜得多,也許顯示數(shù)據(jù)庫(kù)記錄的當(dāng)前值或者郵件服務(wù)器上等待著的郵件消息的摘要。重要的是服務(wù)器不僅閱讀一個(gè)無(wú)格式的HTML頁(yè)面、或磁盤(pán)上的文本文件以及把它們發(fā)送給客戶,而且,必須完成一些工作來(lái)創(chuàng)建該頁(yè)面。
Internet服務(wù)器應(yīng)用編程接口
傳統(tǒng)的技術(shù)是使用與Web服務(wù)器的一個(gè)接口,它被稱為Internet服務(wù)器應(yīng)用編程接口(Internet Server Application Programming Interface,ISAPI)。
ISAPI可用于執(zhí)行其他的應(yīng)用程序,這些應(yīng)用程序通過(guò)C語(yǔ)言風(fēng)格的stdin和stdout數(shù)據(jù)流函數(shù)來(lái)讀取客戶端請(qǐng)求的值并創(chuàng)建Web服務(wù)器的響應(yīng)。ISAPI應(yīng)用程序所必須做的全部事情就是編寫(xiě)相應(yīng)結(jié)果頁(yè)面的文本和HTML,并通過(guò)stdout函數(shù)輸出到Web服務(wù)器。事實(shí)上ASP DLL內(nèi)部真正做的事情是更面向?qū)ο蟮摹?BR> IIS自開(kāi)始就運(yùn)行ISAPI的應(yīng)用程序和腳本解釋器。它提供一個(gè)特殊的解釋器動(dòng)態(tài)鏈接庫(kù),給出訪問(wèn)服務(wù)器的請(qǐng)求和響應(yīng)的另一種方法,盡管受到一定的限制。它通過(guò)服務(wù)器端包含指令實(shí)現(xiàn),之所以這樣說(shuō),是因?yàn)樗鼈兪窃诜?wù)器上執(zhí)行的,并且結(jié)果包含在傳送給客戶端的響應(yīng)中。這個(gè)特性在IIS中是通過(guò)一個(gè)名為ssinc.dll的動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)的。缺省情況下,IIS把文件擴(kuò)展名為.shtml、.shtm或.stm的任意頁(yè)面都映射到這個(gè)動(dòng)態(tài)鏈接庫(kù)。打開(kāi)默認(rèn)Web站點(diǎn)的Properties對(duì)話框,在Application Setting中單擊Configuration按鈕,可以看到這種映射。
這樣,帶有這些被映射的文件擴(kuò)展名的頁(yè)面將被傳送給ssinc.dll進(jìn)行處理。因此,執(zhí)行頁(yè)面中所有的服務(wù)器端包含語(yǔ)句,結(jié)果(如有的話)插入到服務(wù)器的響應(yīng)中,即插入到客戶端接收到的頁(yè)面中。
因?yàn)檫@些文件是映射到ssinc.dll文件而不是映射到ASP動(dòng)態(tài)鏈接庫(kù)(asp.dll)的,所以在這些頁(yè)面中的所有ASP代碼將被忽略并且按照原有狀態(tài)傳送給客戶端,客戶端將能夠看到這些腳本。然而,在ASP 3.0版本中有一個(gè)避免這種情況的方法,稍后在討論Server對(duì)象的Execute和Transfer方法時(shí),研究這個(gè)方法??荚嚧缶庉嬚?BR>

