在前一篇文章中已經討論過Microsoft 在設計和開發ASP+時的主要動機。ASP非常成功,為什么 還要一個新版本?有4個問題需要考慮:
● 目前,ASP腳本主要是用基本的non-typed 語言,例如VBScript 和JScript來寫的(除非你安裝了一 個獨立的語言解釋程序)。盡管ASP第一次執行頁面代碼時確實進行分解和緩存,這一局限導致即使 在有優勢的時候,也不能使用那些strongly-typed 的語言,例如Visual Basic 和C++。而ASP+為 Web 應用程序提供了真正中立于語言的執行框架。
● 創建包含著一長串各種代碼、HTML、文本、對象聲明混合在一起的大型ASP頁也是非常容易的。 要再利用這些代碼是很困難的,除非你將其放在獨立的'include' 文件中,這也不是個很好的辦法。 在許多環境下,開發一個web 應用程序需要各方面的專業人員,例如,需要程序員來寫代碼,需要 設計師來使HTML看起來漂亮。讓代碼和內容混雜在一個雙方都需要在其上進行操作的文件中使它們 很難在一起工作。而ASP+ 提供代碼和內容的真正分離。
● 在以前版本的ASP中,大多數事情都要靠寫代碼來完成。想維護表單域的狀態嗎?寫代碼。想 確認客戶輸入的數據嗎?寫代碼。想發出一些簡單的數據值嗎?寫代碼。想緩存頁面區優化性能嗎? 寫代碼。而ASP+ 用基于服務器的控制和從概念上來說同Visual Basic 表單工作的方式相同的事件 驅動運行范例介紹了一種真正的組件模型。新的ASP+ 服務器控制是聲明式的(需要它們做一些事情 時才需要聲明它們),所以你就可以少寫一些代碼,實際上,大多數情況下根本就不用寫任何代碼。
● 世界是變化的。通過'Internet device' ,例如移動電話、PDA、電視機頂盒、游戲控制臺或 其他東西訪問你的網站的用戶比例很快就會超過使用PC和傳統瀏覽器的用戶。這就意味著我們不得 不在服務器上做更多的工作,來使我們的網頁與這些不同的設備相兼容。我們不得不以全新的格式 創建輸出,例如Wireless Markup Language (WML)。另外,除了要為運行創建WML,新的Internet 設備和商業應用程序還要求能夠從Web應用程序發送和接收XML數據。現在用ASP做這些需要你手工 使用XML 分解,從XML 計劃轉換數據,或將數據轉換成XML 。ASP+ Web 服務使將頁面剪裁得適應 特定設備變得很簡單。
除此之外,分布式應用程序迅速變化的特性要求更快地開發、更加組件化、可再利用、更易于 展開和更廣泛的平臺支持。新的標準例如簡單對象訪問協議Simple Object Access Protocol (SOAP), 新的商業需求例如business-to-business (B2B) 數據交換,要求用新技術產生輸出和與 其它系統通訊。Web 應用程序和Web 站點也需要更加靈活和可升級的服務,這些ASP+ 通過傾向于 積極的監控和應用程序失敗時的自動重新啟動,內存釋放等等都提供了。
所以,要想滿足這些要求,ASP必須要進行全面的修改來變成一個全新的編程環境。盡管目前 很少有可用于此的工具,Visual Studio 7.0 可以提供全面支持使創建ASP+ 應用程序簡單(包括 ASP+ 頁面和ASP+ 服務)。豐富的、基于組件的、事件驅動的編程模型特意設計成“工具友好”, 而這種支持對于所有的Visual Studio 語言,包括VB, C++和C#. 都可用。而你也可以確信第三方 的工具制造商也不會落后太多。 目前Web 開發人員面臨的最大挑戰是瀏覽器的兼容性問題和他們所要創建的網頁的復雜程度 不斷增加。要創建更加交互式的頁面,又要利用各種瀏覽器的最新特色的,同時還要確定頁面 在所有可能的瀏覽器上都能工作,簡直是揮之不去的噩夢。
當然,使用這些正在興起或已經在使用的新Internet 設備會使情況更糟糕。特別是,要創建 的網頁對移動電話和傳統瀏覽器客戶提供相同用戶級別的兼容性也成為可能。只能顯示3行字符文 本的移動電話當然要限制創造性和用戶交互性。
一個顯然的解決辦法是創建動態定位每個特定客戶的輸出?還是創建同一站點的多種版本,每 個客戶一種版本。第二種方法可不誘人,許多人更傾向于第一種。但是這就意味著來自于每個用戶 的每一次敲擊都需要一些服務器側的處理來指明創建哪種輸出。
如果是這樣,為什么不讓這一過程自動化?到這,ASP+ 介紹了服務器控制的概念,其中包含 普通任務和提供一個清楚的編程模型。它們還幫助處理對各種不同類型客戶的定位。 ASP已經提供了在服務器上運行組件的機會,這些組件產生返回給用戶的頁面部分。ASP+ 通過 服務器控制擴展了這一概念。將任何HTML元素轉換成服務器控制所需要做的只是增加一個額外的 屬性: runat="server"。
一頁中的任何HTML元素都可以用這種方法做標記,然后ASP+ 就在服務器上處理這些元素,然后 產生適合這一特定服務器的輸出。另外作為副產品,我們還可以特別創造一個額外的小竅門,用 HTML 〈 FORM 〉 和控制元素相關聯的表單創建代碼,在到服務器的往返旅行中維護狀態。這就使編程 的過程不那么單調,更具有創造性。
讓HTML元素在服務器上執行的概念開始看來有點奇怪,你會發現它為頁面的功能增加了一個全 新的層面,同時又更加容易編寫。一個程序員還會再要求什么呢? 創建Web 站點和交互式應用程序時最討厭的任務就是管理從HTML表單控制傳遞給服務器的值, 在頁請求之間維護這些控制的值。所以ASP+ 的核心目的之一就是簡化這種編程任務。這對于程序員 來說不設計額外的工作,支持基本HTML的所有瀏覽器都能很好地完成。
看看代碼的下一部分。用HTML控制創建一個簡單表單,用戶可以輸入計算機名并選擇操作系統。 這個例子本身沒有什么了不起,但是它代表了一個相當普遍的情況,幾乎現在每一個web 應用程序 都會用到。當表單被提交給服務器時,用戶所選擇的值就會從Request.Form 集合中提取出來,并 用Response.Write 方法顯示:
〈 HTML 〉 〈 BODY 〉 〈 % If Len(Request.Form("selOpSys")) 〉 0 Then strOpSys = Request.Form("selOpSys") strName = Request.Form("txtName") Response.Write "You selected '" & strOpSys _ & "' for machine '" & strName & "'." End If % 〉 〈 FORM action="pageone.asp" method="post" 〉 Machine Name: 〈 INPUT type="text" name="txtName" 〉 〈 P / 〉 Operating System: 〈 SELECT name="selOpSys" size="1" 〉 〈 OPTION 〉Windows 95〈 /OPTION 〉 〈 OPTION 〉Windows 98〈 /OPTION 〉 〈 OPTION 〉Windows NT4〈 /OPTION 〉 〈 OPTION 〉Windows 2000〈 /OPTION 〉 〈 /SELECT 〉 〈 P / 〉 〈 INPUT type="submit" value="Submit" 〉 〈 /FORM 〉 〈 /BODY 〉 〈 /HTML 〉
盡管這是一個ASP頁,(文件擴展名是.asp 而不是 .aspx),如果我們將擴展名改為.aspx的話, 在ASP+下是同樣工作的。記住這兩種系統在同一個機器上是自由并存的,文件的擴展名決定是由 ASP 還是 ASP+ 來處理。
下圖顯示在Internet Explorer 5中看起來是什么樣的。當用戶點擊Submit 按鈕向服務器傳遞 值時,頁面被重新裝載顯示選擇的值。當然在真正的應用程序中,有些值要儲存在數據庫中,或者 用來執行一些專用的處理。在例子中我們只是在頁面上顯示。
一個問題是頁面不維護它的狀態,換句話說控制返回它們的默認值。用戶要再次使用表達就要 重新輸入。下圖中可以看到。
要避免這種情況,就需要在頁面上增加一些額外的代碼,當頁面重新裝載時將值插入控制中。 對文本框來說只是用內聯ASP代碼設置value 屬性,用HTMLEncode 方法確保任何不合法的HTML字符 都被適當編碼。但是對于〈 SELECT 〉 列表,必須要計算出所選擇的值,并將選中的屬性增加到指定的 〈 OPTION 〉元素。要求的變化如下所示:
〈 FORM action="pageone.asp" method="post" 〉 Machine Name: 〈 INPUT type="text" name="txtName" value="〈 % = Server.HTMLEncode(Request("txtName")) % 〉" 〉 〈 P / 〉 Operating System: 〈 select name="selOpSys" size="1" 〉 〈 OPTION 〈 % If strOpSys = "Windows 95" Then Response.Write " selected" % 〉 〉 Windows 95〈 /OPTION 〉 〈 OPTION 〈 % If strOpSys = "Windows 98" Then Response.Write " selected" % 〉 〉 Windows 98〈 /OPTION 〉 〈 OPTION 〈 % If strOpSys = "Windows NT4" Then Response.Write " selected" % 〉 〉 Windows NT4〈 /OPTION 〉 〈 OPTION 〈 % If strOpSys = "Windows 2000" Then Response.Write " selected" % 〉 〉 Windows 2000〈 /OPTION 〉 〈 /SELECT 〉 〈 P / 〉 〈 INPUT type="submit" value="Submit" 〉 〈 /FORM 〉
當頁面重新裝載時,控制維護它們的狀態并顯示用戶所選擇的值。
|