ASP 3.0中的新特性

來源:互聯網
上載者:User

    假如讀者已經熟悉了ASP 2.0,並正在尋找3.0版本中的實際改變的列表,那麼將在下面發現這些資訊。假如讀者是一個ASP的初學者,可以越過本章到下一章,那裡循序漸進地介紹了ASP對象和它們的用法。
    ASP 3.0新特性概要
    在ASP 3.0中,有一些新的特性或經曆較大的變化或改進的特性。
    1. 無指令碼的ASP
    如早先提到的, ASP處理不包括任何指令碼的.asp頁的速度是很快的,假如你正在建立的網站或Web應用程式檔案最終可能使用ASP,最好讓這些檔案使用.asp副檔名,而不用考慮它們是包含伺服器端指令碼還是僅僅包含靜態( HTML和文本)內容。
    2. 新的流向控制能力
    到目前為止,假如想把執行轉向另外的一個ASP頁,不得不使用Response.Redirect語句,這個工作通過向用戶端發送一個響應來指示其載入新的頁面來實現。然而這對用戶端來講是費事的。而且當Proxy 伺服器用於用戶端時,會引起錯誤的訊息。ASP 3.0為Server對象提供了兩個新的方法,允許在伺服器上轉換頁面而不需要新的用戶端的請求。
    Server.Transfer是轉換執行到另一個頁面;而Server.Execute是執行另一個頁面,然後將控制返回原來的頁面。在新的頁面裡可訪問原來頁面的環境,包括Response 和Request等所有ASP對象,但是不能訪問頁面範圍的變數。假如原始的頁面使用了一個事務標誌(在開放的< % @ . . . % >元素中),事務的環境被傳遞到新的頁面。假如第二個ASP檔案的事務標誌表明事務是受到支援的或需要的,則現有的事務將被使用,而不會開始一個新的事務。
    3. 錯誤處理和新的ASPError對象
    通過提供一個用Server.Transfer方法自動調用的定製的ASP頁面,提供了可配置的錯誤處理。在這個ASP頁面中,Server.Get Last Error可被用來返回一個ASP Error對象的執行個體,其中包含了錯誤的細節,例如錯誤的描述和相關的行號。
    4. 編碼後的ASP指令碼
    ASP指令碼和用戶端指令碼現在可以使用BASE 64加密法進行編碼。更高水平的加密計劃將出現在ASP的未來新版本裡(注意,這個特徵是由VBScript 5.0和JScript 5.0指令碼引擎實現的,因此在指令碼被執行時要求這些引擎存在)。編碼後的指令碼將在運行時由指令碼引擎解碼。因此不必使用別的工具,儘管這不是很安全的加密方法,但能夠保護指令碼不被一般的使用者瀏覽和拷貝。
    5. 包含指令檔的一種新方式
    除了使用<!--#Include...-->元素使伺服器端的IIS包含指令碼代碼檔案, ASP 3.0也能夠“包含”其自己。<SCRIPT >元素與RUNAT=“SERVER”和SRC =“path_and_filename”屬性共同使用,來包含基於伺服器的指令碼代碼檔案。相對的實體路徑或虛擬路徑也可以用在SRC屬性中:

    6. Server Scriptlets
    ASP 3.0支援一種強有力的新的指令碼技術,稱之為Server Scriptlets。這些是駐留在伺服器上的XML格式的文字檔,可以像一般的COM對象(即Active伺服器組件)為ASP所用。這樣可以把Web應用程式的商務邏輯指令碼過程更容易地實現為一個可重用的組件。
    7. 增強效能的Active伺服器組件
    ASP中的許多Active伺服器組件得到了改進,能夠提供更好的效能和附加的功能,一個例子就是新的Browser Capabilities組件。除此之外,還有一些新的組件。例如, XML分析器使應用程式可以處理伺服器上的XML格式的資料。同時,提供了ADO與XML更加緊密的整合
(通過Windows 2000所提供的新的ADO 2.5版),這為以XML格式存貯和擷取資料,提供了新的機會。
    8. 效能
    為改善ASP和IIS的效能和可擴充性,新版本做了大量的工作。這包含ASP中的自我調整特徵,它可以檢測阻塞情況並自動增加可用線程的數量。當請求在執行中受到外部資源的阻塞時, ASP能夠檢測出來,並為同時執行附加請求和繼續正常處理提供更多的線程。但是,
假如CPU變得超負荷, ASP會減小可用線程的數量,以便當過多的非阻塞請求同時執行時,將線程切換次數最小化。
    對ASP 2.0的改進
    下面的一些特徵是從2 . 0版本中改進或升級來的。
    1. 緩衝預設為開啟狀態
    ASP提供可選的輸出緩衝。從IIS 4.0開始,這使得指令碼執行得更快,並提供對流向瀏覽器的輸出的控制能力。在ASP 3.0這個改進的效能通過改變Response.Buffer屬性的預設設定為True而反映出來。預設狀態下緩衝是開啟的,這意味著最終的輸出只有在進程完成時,或指令碼調用Response.Flush或Response.End方法時,才送至用戶端。
    注意,可以通過設定Response.Buffer屬性為False,關閉緩衝。只有這樣,才能發送XML格式化輸出給用戶端,讓XML分析器在收到輸出後開始工作。也可以使用Response.Flush發送大頁面的一部分,這樣使使用者可以很快看到部分輸出。
    2. Response.IsClientConnected的變化
    Response.IsClientConnected屬性可以在沒有任何內容發送給用戶端的情況下被讀取到。在ASP 2.0中,這隻在至少有一部分內容被發送後才能返回準確的資訊。這一改進解決了IIS必須響應每個客戶的請求(即使客戶可能已經轉移到另一個頁面或網站)的問題。同時如客戶在3秒內沒有再串連,伺服器上建立的完整的輸出資訊將被丟棄。
    3. 帶有預設文件的查詢字串
    假如一個使用者訪問一個網站而不提供所請求頁面的名字,預設的文檔(如存在的話)將被送往用戶端。然而假如他們提供了附在URL後面的查詢字串,這在早先的ASP版本中是被忽略的,而在IIS 5.0 和ASP 3.0 中這個查詢子符串將被送到預設頁面。例如,在一個URL為:http://www.wrox.com/store/的目錄中預設頁面為default.asp,則下面這兩種情況都將成對的名稱和數值Code=1274送往default.asp頁面:

    4. 伺服器端包含檔案的安全性
    伺服器端的包含檔案常用於一些敏感的資訊,如資料庫連接字串或其他訪問細節。一個虛擬路徑(即URL而不是完整的物理磁碟檔案路徑)可以用來指定這些檔案。在這種情況下,早先的ASP版本不核對檔案的安全設定和使用者的認證;換句話說,授權(驗證後)的使用者和匿名的Web伺服器帳號都沒有與檔案的存取控制清單相比較。在IIS 5.0和ASP 3.0,這些認證將被檢查以防止非授權訪問。
    5. 可配置項移到中繼資料庫中
    在IIS 5.0中ProcessorThreadMax和ErrorsToNTLog的註冊項被移到中繼資料庫中,所有的ASP可配置參數能夠通過Active Directory和Active Directory服務介面( ADSI )在中繼資料庫中修改。
    6. 應用程式中的雙線程對象的效能
    為了在常有多個並發請求的ASP中獲得最佳效能,組件應是雙線程的( Both-Threaded )—即單一執行緒 Apartment(Single Threaded Apartment,STA)和多執行緒 Apartment(Multi-Threaded Apartment,MTA ),並且支援COM Free-Thread Marshaller(FTM)。不支援FTM的雙線程的COM對象假如被儲存在ASP Application狀態物件中,將導致運行失敗。
    7. 更早釋放COM對象
    在IIS 5.0中,執行個體化的對象或組件可更早釋放。在IIS 4.0中,COM對象只有在ASP處理完一個頁面時才能釋放。在IIS 5.0中,假如一個COM對象不使用OnEndPage方法,且對象的引用計數達到零,則這個對象在處理完成之前就被釋放了。
    8. 預設時ASP允許進程外組件
    定製的本機伺服器組件現在可以從IIS中被執行個體化,而不需要改變中繼資料庫的設定。控制本機伺服器執行個體化的中繼資料庫屬性AspAllowOutOfProcComponents預設值為1,在IIS早期版本為0。
    9. COM對象的安全性
    IIS使用了新的由COM +提供的cloaking特性,因此,從ASP執行個體化的本機伺服器應用程式可以運行在原始的客戶的安全環境中。在早期版本中,安全環境被指派到本機伺服器COM對象,依賴於調用進程的身份。
    10. 預設時組件運行在進程外
    在ASP早期版本中,所有在ASP頁面環境中建立的組件預設時運行在進程內。
    為在組件的效能和Web伺服器安全性之間折衷,對於一個虛擬應用程式,可以從Properties對話方塊中Application Protection的三個選項中選擇:
    Low (IIS Process)
    這種設定的ASP虛擬應用程式的所有應用程式可執行檔和組件都運行在Web伺服器可執行檔( Inetinfo.exe )的進程(即記憶體空間)中。因此,Web伺服器就有受到可執行檔或組件失敗影響的風險,然而這提供了最快的和最少資源浪費的應用程式執行選項。
    Medium (Pooled)—這是預設設定
    這種設定的ASP虛擬應用程式的所有應用程式可執行檔和組件都運行在單個共用的DLLHost.exe執行個體的進程(即記憶體空間)中。這保護了Web伺服器可執行檔( Inetinfo.exe )免受任何一個可執行檔或組件失敗帶來的風險。然而,可執行檔或組件的失敗會引起DLLHost.exe進程失敗,進而所有其他駐留其中的可執行檔和組件也會失敗。
    High (Isolated)
    這種設定的ASP虛擬應用程式的所有應用程式可執行檔和組件都運行在單個DLLHost.exe執行個體的進程(即記憶體空間)中,但是每個ASP應用程式都有自己的DLLHost.exe執行個體。DLLHost.exe對應用程式而言是專屬的,這保護Web伺服器可執行檔免受任何一個可執行檔或組件失敗帶來的危險,同時也保護了虛擬應用程式,免受因其他虛擬應用程式的可執行檔或組件失敗帶來的問題。微軟建議在任何一個Web伺服器上最多駐留10個隔離的虛擬應用程式。
    推薦的配置是:在它們自己的進程中運行對於任務關鍵的應用程式,即High (Isolated);餘下的所有應用程式在一個共用的進程中運行,即Medium (Pooled)。也可設定組成每個虛擬應用程式的指令碼和組件的執行許可權(Execute Permission),三個選項是:
    1) None:在這個虛擬應用程式中不能運行指令碼或可執行檔。在實際效果上,這提供了一個在必要時快速和簡便地禁止一個應用程式的方式。
    2) Scripts only:僅允許指令檔,諸如ASP、IDC或其他,能夠在這個虛擬應用程式中運行,可執行檔不能運行。
    3) Scripts and Executables:允許任何指令碼和可執行檔在這個虛擬應用程式中運行。
    VBScript 5.0中的新特性
    能夠在ASP中應用的特性包括了那些由指令碼引擎所提供的特性,這意味著VBScript的改進也可在ASP中應用。VBScript的改進如下所述。
    1. 在指令碼中使用類
    在VBScript中實現完整的VB類( class )模型,但明顯的例外是在ASP伺服器端的指令碼事件。可以在指令碼中建立類,使它們的屬性和方法能夠用於頁面的其餘代碼,例如:

    這段代碼產生如下結果:
    Value of HalfValue property is 21
    Result of GetResult method is 42
    2. With結構
    VBScript 5.0支援With結構,使訪問一個對象的幾個屬性或方法的代碼更加緊湊:

    3. 字串求值
    Eval函數(過去只在JavaScript和JScript中可用)目前在VBScript 5.0中已經得到了支援。它允許建立包含指令碼代碼的字串,值可為True或False,並在執行後可得到一個結果:

    4. 語句執行
    新的Execute函數允許執行一個字串中的指令碼代碼,執行方式與Eval函數相同,但是不返回結果。它可以用來動態建立代碼中稍後執行的過程,例如:

    一個斷行符號返回(如程式中示)或冒號字元“:”可用來分隔一個字串中的各條語句。
    5. 設定地區
    新的SetLocale方法可以用來改變指令碼引擎的當前地區,可正確顯示特殊的地區特定字元,如帶重音符的字元或來自不同字元集的字元。

    6. Regex
    VBScript 5.0 現在支援Regex(過去只在JavaScript、JScript和其他語言中可用)。RegExp對象常用來建立和執行Regex,例如:

    7. 在用戶端VBScript中設定事件處理常式
    這不是直接應用於ASP的指令碼技術,這個新的特性在編寫用戶端的VBScript時是很有用的。現在可以動態指定一個函數或子程式與一個事件相關聯。例如,假設一個函數的名稱為MyFunction(),可把它指定給按鈕的OnClick事件:

    這提供了JavaScript和JScript 中的類似功能,函數可以被動態地指定為一個對象的屬性。
    8. VBScript中的On Error Goto 0
    儘管這個技術早先沒有被文檔記載,但在現有的VBScript版本中能夠使用(有著V B背景並且有好奇心的人可能早已發現這個秘密)。它現在已被記錄在文檔中,並且在執行On ErrorResume Next後能夠用來“關閉”頁面中的定製錯誤處理。結果是任何後來的錯誤將引發一個瀏覽器級或伺服器級的錯誤及相應的對話方塊/響應。
    JScript 5.0中的新特性
    JScript 5.0唯一的改變是引入了錯誤處理。
    Java風格的try和catch結構在JScript 5.0中得到了支援。例如:

    內建的JScript Error對象有3個屬性,它們定義了上次的運行期錯誤。可在catch塊中使用它們獲得有關錯誤的更多資訊。

    假如你想拋出自己的錯誤,可用一個定製的異常對象引發一個錯誤(或異常)。然而,由於沒有內建的異常對象,必須自己定義一個結構:

    這樣的對象可用來在頁面中引發定製的異常。這通過使用throw關鍵字,然後檢查catch塊中的異常類型來實現:

    其他的新特性
    還有幾個新特性已經能夠在IIS 5.0中使用了。
    1. DAV(Distributed Authoring and Versioning )
    這個標準由Internet Engineering Task Force (IETF)建立,目前為1.0版本。它允許作者在幾個不同的位置共同建立和維護We b頁和其他的文檔。它用於提供上傳( upload )和下載訪問,並控製版本號使工作過程能夠得到相應的管理, IE包含與IIS 5.0中的DAV的整合的特性。但是,在IETE標準和當前的IIS 5.0版本中,尚未實現版本控制能力。
    2. 參考型別庫
    在過去,常常使用伺服器端的包含檔案,把常數從一個類型庫(例如指令碼對象、ADO或MSMQ )增加到ASP頁面。這是必須的,因為ASP不能像VB那樣建立對類型庫或組件DLL的引用。在IIS 5.0中,不必再為常數使用包含檔案。可以在<HEAD >部分放一個HTML注釋風格的元素,來直接存取一個組件的類型庫。

    這將使指定檔案中的常量在當前ASP頁面中都可用(儘管這是IIS 5.0中的一個新特性,但在IIS 4.0中雖沒有記入文檔,但已經可以使用了)。
    3. FTP 下載續傳
    FTP服務現在終於提供了下載的續傳功能。假如一個檔案部分下載後停止,它能夠從斷點處繼續下載。這意味著沒有完成下載的檔案不需要再次下載整個檔案。
    4. HTTP壓縮
    IIS現在能夠自動實現對靜態或動態產生的檔案的HTTP資料流壓縮並快取壓縮的靜態檔案。在與適當地準備好的用戶端通訊時,這會提供更快的響應並減少網路的負載。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。