640 likes | 813 Views
第一章 網頁程式設計概論. 在本書的第一章中,我們將介紹幾個關於網頁程式設計有關的專有名詞,例如:『 HTML 』、『 JavaScript 』、『 XML 』、『 ASP.NET 』等等。同時因為 ASP.NET 屬於 .NET Framework 的一環,故本章也會介紹 .NET Framework 的觀念,本章內容將有助於讀者快速建立網頁程式設計的整體概觀。. 大綱. 1.1 WWW 與 HTML 1.1.1 WWW 1.1.2 Web 2.0 1.1.3 WWW 網站架構 1.2 網頁相關技術 1.2.1 客戶端技術 1.2.2 伺服器端技術
E N D
第一章 網頁程式設計概論 在本書的第一章中,我們將介紹幾個關於網頁程式設計有關的專有名詞,例如:『HTML』、『JavaScript』、『XML』、『ASP.NET』等等。同時因為ASP.NET屬於.NET Framework的一環,故本章也會介紹.NET Framework的觀念,本章內容將有助於讀者快速建立網頁程式設計的整體概觀。
大綱 • 1.1 WWW與HTML • 1.1.1 WWW • 1.1.2 Web 2.0 • 1.1.3 WWW網站架構 • 1.2 網頁相關技術 • 1.2.1 客戶端技術 • 1.2.2 伺服器端技術 • 1.3 .NET Framework與Visual Studio • 1.4 ASP.NET與VWD • 1.5 類別/物件 • 1.6 本章回顧
1.1 WWW與HTML • 在Internet上有著各式各樣的服務及應用,例如:Email、FTP、WWW等等。其中影響最大的就是WWW。『WWW』是World Wide Web的縮寫,中文翻譯為全球資訊網。
1.1.1 WWW • WWW是由歐洲核子研究中心(CERN)所研發的一種搜尋結構,於1993年正式對外開放,它取代了傳統電腦與網路採用樹狀結構搜尋資訊的方式,重新定義了一種網狀的資料搜尋結構,如此一來,便免除了樹狀結構搜尋資料失敗時,必須返回原搜尋點再往下搜尋的缺點。 • 除此之外,WWW可以連結各種Internet的其他種類服務(例如HTTP、FTP協定),並由於我們可以在WWW之上,建立起圖文並茂的超文件(HyperText)及超媒體(HyperMedia)網頁,透過超鏈結(HyperLink)功能,建立起網頁與網頁溝通的橋樑,因此帶動了網路的流行,現在大家使用瀏覽器來瀏覽的網路服務就是建構在WWW的基礎之上。 • 近年來,以Google為首的各種廠商逐漸推出以瀏覽器為執行環境的Web軟體(例如Web Mail),搭配雲端運算架構的流行與網路頻寬的加大,使得未來所有的桌面軟體都可能出現Web模式的類似軟體。因此,WWW對於資訊產業而言,它是不斷在成長與轉變的。
1.1.2 Web 2.0 • 全球資訊網歷經10年演變,其中包含了.com網站公司的崛起與泡沫化。現今,全球資訊網正進行著新型態的演化,在『聚沙成塔』的觀念下,符合Web 2.0精神的網站逐漸成為次世代全球資訊網的主流,也提供了每個人參與網路的無限想像空間。 • 『Web 2.0』一詞在2004年首度出現,它代表著WWW上的新型態,其中包含了一些新型態的網站、內容及服務,也包含了一些新的技術。事實上,Web 2.0在W3C(管理WWW標準的機構)並無明確的定義,但實際上已被大眾所接受。Web 2.0最主要的精神是『參與、互動、分享』,例如現在流行的部落格(Blog)、影音分享網站YouTube、眾人聯合編輯的維基百科等等,都是Web 2.0典型的範例。
1.1.3 WWW網站架構 • 在WWW上最常見的架構就是Client/Server架構,一個最簡單的Client/Server架構如圖1-1,瀏覽器(Browser)代表的是客戶端(Client),網頁伺服器(Web Server)代表的就是伺服器端(Server)。 圖1-1 網頁伺服器架構一(只負責傳送HTML網頁)
1.1.3 WWW網站架構 • 瀏覽器具有解讀HTML文件,並將之轉換為HTML網頁的能力;HTML是一種網頁設計語言,一份HTML文件其實就是一個網頁,換句話說,我們所看到的網頁就是HTML文件經由解讀後的結果。 • 最簡單的網頁伺服器至少必須具備以下3種能力: • 可接收透過HTTP協定所傳來的網頁要求。 • 能夠搜尋與讀取伺服器端所存放的HTML檔案。 • 具有透過HTTP協定將網頁回傳給客戶端(瀏覽器)的能力。 • 當網頁伺服器安置妥當後,一旦我們在瀏覽器網址列中輸入所要求的網址及網頁名稱,瀏覽器便建立連線並發出HTTP需求,請求遠端的網頁伺服器回傳網址所標示的HTML檔案。網頁伺服器接收到此需求後,便搜尋檔案系統,並將所要求的HTML檔案以HTTP方式回傳給瀏覽器,接著切斷此次連線。最後,瀏覽器依據所取得的HTML檔案內容加以解讀成為我們所看到的網頁,這就是使用者瀏覽網頁時,瀏覽器與網頁伺服器的工作流程。
1.1.3 WWW網站架構 • 除了提供HTML檔案傳輸的陽春網頁伺服器外,有些功能比較強大的伺服器,還可以執行PHP、ASP、ASP.NET、JSP、CGI等伺服器端的程式,其網頁伺服器結構則如圖1-2。 圖1-2 網頁伺服器架構二(先執行傳統ASP程式,再回傳HTML網頁)
1.1.3 WWW網站架構 • 通常要求我們在瀏覽網頁時必須輸入使用者代號與密碼的網站大多屬於這一類型的網頁伺服器,其原理與單純的網頁伺服器類似,同樣是透過HTTP協定來要求伺服器做某些事並回傳一個HTML格式的封包。只不過此時所要求的服務,可能不只是一個單純的HTML檔案,而是一個ASP、ASP.NET、PHP或JSP檔案,伺服器會先執行這個ASP、ASP.NET、PHP或JSP檔案內的程式碼或編譯後的程式碼 • 例如程式碼中可能要求從資料庫中取得使用者代號與密碼等資料,所以此類網頁伺服器通常具有與資料庫連接的能力,無論如何,當這些程式碼執行完畢之後,必須產生一個HTML格式的資料,並交由網頁伺服器透過HTTP協定傳回這些HTML格式的資料,這是因為瀏覽器除了HTML格式的資料外,其他格式的資料一律無法解讀。 • 在上述的範例中,我們可以瞭解2件事 • (1)瀏覽器可以解讀HTML格式的資料 • (2)有些程式碼必須由伺服器端執行。
1.1.3 WWW網站架構 • 事實上,並非任何形式的程式碼都無法被瀏覽器解讀或執行,為了減輕伺服器的負擔,專家們發展了一些可以由瀏覽器執行的程式,此類程式最著名的有Java Script/JScript與VBScript等,不過,由於這些程式是交由客戶端瀏覽器來執行,為了保障每一個瀏覽者的電腦安全,因此這類程式必須取消部分功能(例如:不允許建立檔案),雖然如此,Java Script/VBScript程式仍然造就了網頁多樣化的效果,尤其是JavaScript搭配新的AJAX技術可完成的網頁功能與效果更為豐富,不但降低了網站伺服器的負擔,也使得Web 2.0型態的網站更容易製作。 • 除此之外,為了使得伺服器端能夠獲得客戶端的某些資料,因此瀏覽器也必須具有送出表單(form)資料的能力。我們將瀏覽器與網頁伺服器的功能整理如表1-1。
1.1.3 WWW網站架構 • 表1-1 網頁架構軟體分析
1.1.3 WWW網站架構 • 聯合化資訊交換(syndication) • 聯合化資訊交換(syndication)是一種資訊傳播方法,透過feeds格式與REST架構(WWW採用的建構模型)進行傳送,它的優點是改善閱讀的時間與效率。 • 目前較普遍syndication規格有兩種,分別是2002年推出的RSS 2.0與2003年/05年推出的Atom 0.3/1.0,兩種格式都使用XML做為資料傳輸格式。Atom擁有比RSS更強大的支援功能和更嚴謹的定義,但由於推出時程較晚,目前syndication分享仍以RSS 2.0為主。 【Web 2.0常用的技術】 Web 2.0常使用到的技術為syndication與AJAX兩種。使用這兩種技術建置的網站,且該網站符合Web 2.0主要精神『參與、互動、分享』,則一般都將之視為Web 2.0網站。
1.1.3 WWW網站架構 • 在各大新聞網站或部落格都可以見到使用RSS的應用。例如當您訂購了某個新聞網站的RSS之後,則它會自動下載新聞的標題,您若對該標題感興趣,則可以瀏覽該篇新聞,而不用瀏覽一些不感興趣的新聞,使得我們得以節省閱讀新聞的時間。 • AJAX • AJAX(Asynchronous JavaScript and XML),全名是『非同步JavaScript和XML』,它是一種互動式的網頁開發技術。AJAX也可以看成是一種撰寫網路應用程式的新思維,它使得不用打斷使用者的操作(傳統上會因為等待伺服器回應而被打斷),就能動態地更新網頁內不同區塊的內容,而不需更新整個網頁。我們將於第18章深入介紹AJAX以及利用工具製作包含AJAX技術的網頁。
1.2 網頁相關技術 • 網頁技術可分客戶端與伺服器端技術,我們將在本節中分別加以簡介。
1.2.1 客戶端技術 • 客戶端代表的是瀏覽器,此處所指的客戶端技術代表可由瀏覽器解讀的格式或可由瀏覽器執行的程式。
1.2.1 客戶端技術 • HTML標示語言 • HTML是一種標示語言(Markup Language),也是一種標籤語言(Tag Language)。HTML的標示碼以標籤來表示,利用標籤形容所包含的資料要顯示哪種格式或哪種效果(例如<a>標籤代表超鏈結效果、<b>標籤代表粗體格式)。而瀏覽器能夠解讀這些標籤所代表的意義,將之轉換為實際所看到的網頁效果。 • 瀏覽器可以直接解讀本地端的HTML網頁,也能夠解讀由網頁伺服器下載的HTML網頁,下面是HTML文件經由瀏覽器轉換成網頁型式的範例。 • 【註】: • 若欲閱讀由伺服器端回傳給客戶端瀏覽器的HTML格式碼,可以利用【快顯功能表】的【檢視原始碼】指令來達成。
1.2.1 客戶端技術 • 撰寫HTML網頁可使用純文字編輯器(例如:記事本),因為HTML文件本身是一個文字檔,但一般我們使用專業的網頁編輯器來編輯HTML(例如Dreamweaver),因為透過所見即所得的方式配置網頁內容比較快速也比較容易。單純的HTML文件,其副檔名為『.htm』或『.html』,而不是『.txt』,若設定為『.txt』,則瀏覽器會將之視為單純的純文字檔,而顯示標籤與內容。只有在設定為『.htm』或『.html』檔時,瀏覽器才會將之視為網頁檔,顯示內容與標籤效果而不會顯示標籤原文。
1.2.1 客戶端技術 • XML與XHTML • XML(eXtensible Markup Language)中文翻譯為可延伸標記語言。1998年,W3C正式公佈XML的Recommendation 1.0版語法標準,由表面上看來,XML是標記語言的一種,但是嚴格來講,XML最大的用途為定義其他語言的語法系統。這也正是XML功能強大,受到各方重視的緣故。透過結構和資訊導向,它為不同領域(產業界、學術界和研究單位)的文件,提供統一的描述語法,讓不同領域之間資訊交換的效率大大提升,並且能夠跨平臺進行資訊的整合與資源的共用。 • XML特別適用於電子商務應用,因為XML擁有自我定義的機制,使得資料在網路傳輸時能夠很容易地在傳送端與接收端做資料交換。此外,由於XML也可使用於資料描述,因此,您可以將它視為一種資料描述語言(meta language)。例如:用它來制定元件、記錄以及其他種類的資料結構(例如另一個語言)。
1.2.1 客戶端技術 • XML也和HTML一樣屬於標示語言(Markup Language),但XML不同於HTML對於所有的標籤都定義了顯示格式的意義,對於XML而言,顯示格式並不是最重要的,相對地,資料所代表的意義才是最重要的,因此,XML並不負責標籤顯示的格式。因為XML與HTML是由兩種不同的設計目的所衍生發展的兩套語言。使用XML,您可以透過標籤來描述資料的結構,並且它還允許使用者視描述資料的需要,隨意地制定不同名稱的標籤,這和HTML有著極大的差別。 • XML身為資料描述語言(meta language),因此常用來制定各類文件格式。有些軟體使用XML取代原本使用ini檔來描述文件。例如新版Office、NET Framework的web.config檔都是以XML作為基礎設定的描述格式,其他軟體無法理解該XML檔案內容,但軟體本身可以理解該XML檔案內容。除此之外,XML也可以制定軟體間的資料傳送格式,只要雙方軟體能夠解讀標籤意義即可,例如製作web service以及RSS。
1.2.1 客戶端技術 表1-2 使用XML製作的web.config檔(.NET Framework軟體懂得各標籤意義)
表1-3 使用XML製作的新聞RSS(只有Yahoo網站與RSS閱讀器懂得各標籤的意義)
1.2.1 客戶端技術 • 除了用來制定文件格式之外,XML甚至可以用來制定另一種語言,例如早期的HTML(HTML 4.01版之前)都是採用SGML描述語言制定,而新版的XHTML則是以XML來制定。目前大多數的瀏覽器與網頁編輯軟體都能夠正確解讀XHTML標籤的意義,因為XHTML與HTML標籤的意義相同,只不過XHTML規定的更嚴格而已。 • 本書使用Visual Web Developers工具開發的網頁,實際回傳到瀏覽器的HTML標籤都是以XHTML為標準的。而ASP.NET的標籤則符合XML的規定。 • 【註】簡而言之,XHTML就是新版的HTML,也是規定較嚴格的HTML。
1.2.1 客戶端技術 • Java Applet • Java是一種物件導向程式語言,由Sun公司開發,執行Java程式是將Java程式先編譯為中間碼(即Byte Code)的類別檔,待執行時,再透過Java虛擬機器(Java Virtual Machine;簡稱Java VM或JVM)加以執行,由於Sun提供了各種平台的Java虛擬機器,因此,Java是一種跨平台的程式語言。 • Java提供了Applet機制,程式設計者可以將程式設計並編譯為類別檔後獨立於HTML文件外,使用者可以從遠端下載到瀏覽器並在網頁中加以執行,唯一的前提是,瀏覽器必須先安裝Java虛擬機器(JVM)。 • 當瀏覽器向Web伺服器要求一個包含Java Applet的HTML網頁時,首先會將該HTML網頁下載到客戶端,解讀HTML後發現有<applet>標籤,代表要執行一個Java Applet,接著依照標籤屬性的指示向伺服器要求下載Java Applet的類別檔,下載完畢,最後由瀏覽器中的JVM在網頁中執行Java Applet的類別檔,如下圖所示。
1.2.1 客戶端技術 圖 1-3 Java Applet由客戶端瀏覽器執行
1.2.1 客戶端技術 【Java Applet與ActiveX】 早期Java Applet與ActiveX都是在網頁中執行複雜程式的機制,其中Java Applet為Sun發展的Java所支援,而ActiveX則是由微軟提出的對應機制。換句話說,兩者原處於競爭對手。初期,Java Applet的普及領先ActiveX,因為各類瀏覽器都可以執行Java Applet,而只有在IE瀏覽器中可同時支援兩種機制。 後來微軟自行修改了IE中的JVM,只支援以Microsoft J++(一種極類似於Java的程式語言)方式開發成的Java Applet,而這種程式無法在非IE的瀏覽器上正確執行,並且IE的JVM也無法完全支援以Sun版本開發的Java Applet。在此同時,IE瀏覽器的市佔率持續提高,使得大多數開發「網頁中程式」的程式設計師採用了ActiveX機制。此時,Java Applet大多只用在網頁中顯示動畫的應用。 隨著Flash的流行與普及,Java Applet連製作動畫的市場也逐漸失去,並且在Windows XP之後,微軟又不主動提供Java VM的下載。這使得Java Applet幾乎完全退出市場。
1.2.1 客戶端技術 • JavaScript/VB Script/JScript • Script有人將之翻譯為『腳本』,事實上,它與直譯程式的概念更為接近,Script其實指的是一份未經編譯的程式原始碼,只有在需要被執行時,才透過翻譯程式針對Script中的每一個指令進行解讀及執行。Script程式並未限制使用於客戶端或伺服器端,但一般我們若只講Script程式,通常指的是客戶端使用的Java Script、VB Script或JScript。 • JavaScript看似與Java有關,但實際的功能則比Java精簡許多,我們應該將兩者視為不同的語言,JavaScript比Java簡單很多,使得一般非程式專精的網頁開發者也能夠透過JavaScript強化網頁的功能。
1.2.1 客戶端技術 • VBScript與JScript都是由微軟發展,VB Script是由傳統VB語法精簡而來,而JScript則是微軟為了與Sun的Java抗衡所自行設計的Java-like語法,就現實面來說,幾乎所有的瀏覽器都支援JavaScript,而IE則支援JavaScript、VB Script及JScript。而這三種Script都可以內嵌在HTML文件中,也可以獨立存在,再透過特殊的HTML標籤引入。目前大多以JavaScript為主,尤其是AJAX流行後,JavaScript已經站穩客戶端程式的重要地位。 【VB與VBScript】 本書所提之VB與VBScript可能有三種,其中,VBScript是IE瀏覽器可直譯執行的程式語言。VB或傳統VB則指的是舊版Visual Basic 6程式語言,VB.NET則指的是架構在.Net Framework的新版VB程式語言。 【JavaScript為物件基礎語言】 JavaScript雖然也可以使用物件的屬性與方法,但它不提供繼承機制,所以JavaScript只能算是物件基礎語言,而非物件導向語言。
1.2.1 客戶端技術 • CSS • CSS(Cascading Style Sheet)是一種樣式表,由W3C制定標準,目前的標準為CSS3,不過最新的IE8/9只支援部份的CSS3,因此大多數網站仍使用CSS2來設計樣式。CSS樣式表可以彌補HTML的不足,所謂『樣式表』其實是一堆網頁效果設定的集合,透過HTML的特殊標籤或屬性就可以引用這些事先定義好的設定值,享受相同設定重複使用的優點。在本書中,我們將會發現,ASP.NET大量使用CSS來設計網頁元件的顯示細節。例如按鈕或文字標籤的位置、以及文字的大小等等。
1.2.1 客戶端技術 • AJAX • AJAX也屬於客戶端的技術之一,但它並不是單一的技術,而是一系列相關技術的總稱,包含XHTML、CSS、JavaScript、XML、DOM、XMLHttpRequest等等,其主要程式皆由JavaScript開發,搭配某些特殊的元件來完成。其中大多數的技術已經在前面解釋過了,而DOM與XMLHttpRequest的解釋如下: • DOM:DOM是一種文件模型,提供了以樹狀結構與節點的存取模式,使得JavaScript的程式碼更精簡,並更有效率地存取文件資料。例如存取XML檔案就可以透過XML DOM來完成。 • XMLHttpRequest:XMLHttpRequest是一個物件,可用來與Web伺服器進行非同步數據交換。 • 暫時我們對AJAX的解釋到此為止,其餘的介紹留待第18章時再進行詳盡的介紹,現在您只要先理解AJAX是一些客戶端技術的總稱即可。事實上,ASP.NET 2.0並未包含AJAX,而是另外以ASPNET AJAX存在,直到ASP.NET 3.5才將之納入。但AJAX嚴格來說,仍屬於客戶端技術。
1.2.2 伺服器端技術 • 伺服器端代表的是網頁伺服器(Web Server),此處所指的伺服器技術代表由網頁伺服器執行的各類技術,但實際上不論您採用的是哪一種技術,其最後產生的結果都是HTML(可內嵌其他客戶端技術)格式的文件,然後將此文件回傳給瀏覽器,解讀為我們看到的網頁型式。 • CGI • CGI(Common Gateway Interface)被翻譯為『共同閘道介面』,它是早期由伺服器端執行程式的一種策略。嚴格來說,CGI是一種介面,用來在HTTP伺服器與閘道程式之間進行溝通,因為每個傳送到伺服器的資料都會由一個閘道程式來處理,CGI就是負責這兩者之間的資料傳輸介面。 • 在使用CGI技術的伺服器網站中,CGI程式屬於一種外部程式,您可以使用熟悉的語言(例如C/C++)進行開發,而這個程式同樣必須先經過編譯為執行檔,存放在伺服器端以備執行。
1.2.2 伺服器端技術 • 以C/C++語言所開發的CGI程式為例,傳統C/C++程式的標準輸入裝置(stdin)為鍵盤,標準輸出裝置(stdout)為螢幕,而CGI程式由於是透過CGI介面傳輸資料,因此,標準輸出入裝置(stdin與stdout)則改為CGI介面,程式可以由CGI介面取得使用者透過表單(Form)傳送過來的資料,也可以透過CGI介面取得相關的環境變數(Environment Variables),同時也會將回傳的HTML文件寫入到CGI介面,然後由網頁伺服器回傳給瀏覽器。其架構如圖1-4所示。 圖1-4 CGI運作架構圖
1.2.2 伺服器端技術 • ASP/JSP/PHP/ASP.NET • 相對於CGI而言,ASP/JSP/PHP是中期比較流行的伺服器網頁程式技術。JSP(Java Server Page)使用的是Java語法,並且能夠匯入(import)眾多Java的類別函式庫;而PHP則使用的是C或C++語法,並且提供大量存取MySQL資料庫的函式庫。至於ASP.NET則可以說是最新的伺服器網頁程式技術。 • ASP(Active Server Page)是由微軟所發展,正如同前面所說的,廣義的Script並不侷限於客戶端或伺服器端,在ASP中,您可以選擇使用VB Script或JScript語法來撰寫程式,但大多以VB Script語法來撰寫ASP網頁程式。ASP最終的版本為3.0(本書稱之為傳統ASP),而新一代的ASP則改為ASP.NET,版本則由1.0,1.1,2.0,3.5,發展到現今的ASP.NET 4.0版(也就是本書重點)。 • ASP.NET能夠使用VB.NET、C#等由.NET Framework所提供的程式語法來開發。在副檔名方面,傳統ASP使用的是『.asp』,而ASP.NET使用的則是『.aspx』。
1.2.2 伺服器端技術 • 在這裡還是要提醒讀者,無論您在伺服器端使用哪一種技術來撰寫程式,其結果都必須回傳給瀏覽器,而回傳給瀏覽器的內容則必定為HTML格式(當然也可以內附一些由客戶端執行的JavaScript/VB Script程式碼),因為瀏覽器只認得HTML標籤與屬性。例如下面的ASP範例(ch1_01.asp)將會回傳與1-7頁相同的HTML標籤與屬性。
表1-4 傳統ASP(ch1_01.asp)文件內容【回傳的資料同1-7頁】
1.3 .NET Framework與Visual Studio • ASP.NET屬於.NET Framework的一環,而.NET Framework則是一個程式開發與執行的環境架構,它能夠同時包含視窗程式與網頁程式的開發。長期以來,C++與Java佔據絕大多數的物件導向程式語言市場,Microsoft為了增加市場佔有率,在2002年提出了.NET Framework,目前的版本為4.0版或稱為2010版,其架構如下圖。 圖1-5 .NET Framework的視窗程式與網頁程式架構圖
1.3 .NET Framework與Visual Studio • 在圖1-5中,我們可以發現,對於一般Windows環境而言,執行的程式為視窗應用程式,而.NET Framework以Windows Forms(Form代表表單)提供此功能。至於網路作業環境,則透過網路傳輸,在伺服器端執行ASP.NET程式為主,它會產生一些格式回傳給客戶端,這些格式又分為包含HTML的Web Forms以及不包含HTML的Web Services兩種。其中,瀏覽器可解讀HTML,因此通常在瀏覽器中要求讀取的.aspx網頁就是採用Web Forms來開發。 • 至於如何產生Windows Forms、Web Forms、Web Services等成果,則是透過.NET Framework的類別庫以及CLR來完成,實際與作業系統進行溝通的為CLR,它可以視為一種虛擬機器,提供各類.NET Framework程式的執行環境。 • 事實上,.NET Framework一共包含三個層次,第一層為Windows Form與ASP.NET,第二層則為類別庫,最底層則為CLR,其中各層所包含的元件如下圖所示。
1.3 .NET Framework與Visual Studio 圖1-6 .NET Framework架構圖
1.3 .NET Framework與Visual Studio • .NET Framework的元件配置如圖1-6,而.NET Framework的視窗應用程式(Windows Forms)又應該以何種程式語言的語法來撰寫呢? • 答案是沒有限制,因為.NET Framework採用兩段式翻譯方式(與Java類似),它會先將原始程式(各種語言的程式碼)編譯為微軟的中間碼MSIL(Microsoft Intermediate Language),這個中間碼與組合語言的格式類似,可將之視為.NET平台CLR上的組合語言,這些MSIL格式的程式碼以及一些中繼資料將被置於可攜式執行檔(portable executable file;PE檔)中。當真的要執行時,再由執行環境以JIT(Just in Time)的方式將PE檔內的MSIL程式碼編譯成可執行的原生碼(native code)來執行。其過程如圖1-7所示,而後半段的編譯行為由ilasm.exe(MSIL Assembler)來執行,微軟將此軟體稱之為組譯器(Assembler),這是因為MSIL比較像是CLR上的組合語言。
1.3 .NET Framework與Visual Studio 圖1-7a .NET 程式的開發流程
1.3 .NET Framework與Visual Studio 圖1-7b .NET 程式的開發流程
1.3 .NET Framework與Visual Studio • 微軟在推出.NET Framework時,保證這是一個跨語言與跨平台的架構,因此,理論上.NET Framework的視窗應用程式可以使用各種語言來開發,同時能夠在各種平台上執行 • 但實務上則大多以VB.NET與C#語法為最多,這是因為微軟提供的開發工具Visual Studio.NET僅提供將Visual Basic .NET(簡稱VB.NET)、Visual C#、Visual J#、Visual C++ .NET等幾種語言的緣故。換句話說,Visual Studio.NET僅提供某幾種程式語言轉換為MISL中間碼的功能(也就是VB.NET編譯器/vbc.exe與C#編譯器/csc.exe),而非各種程式語言的編譯器。 圖1-8 Visual Studio.NET架構圖
1.3 .NET Framework與Visual Studio • 在跨平台上的實作上,微軟提供的CLR也只能運行於Windows作業系統(包含XP、Server、Vista等),而不能運行於Unix-like與Mac-OS的作業系統。但有一個名為Mono的Open Source Project則實際完成了跨語言與跨平台的目標。 【Mono: Open Source Project】 Mono提供了C#、Java、Visual Basic.NET、JavaScript、PHP、Object Pascal、Python以及其他語言的編譯器,並且也能夠安裝在Linux、Sun Solaris(Unix)、BSD(含FreeBSD)、Mac OS X(含iPhone OS)、Microsoft Windows甚至是Wii等機器上。但由於是Open Source Project,故本書不多加介紹,有興趣的讀者可以連至下列網址查詢。 http://www.mono-project.com/
1.3 .NET Framework與Visual Studio • Visual Studio是微軟提供程式設計師開發程式的一套IDE整合開發環境,對於開發.NET Framework的程式而言(例如VB.NET、C#、ASP.NET),使用的是Visual Studio.NET版本。而Visual Studio.NET又分為Express版、使用者端版(含專業版、企業版、企業旗艦版)、品管人員版與伺服器端及其他產品版(含TEAM FOUNDATION SERVER/TEAM EXPLORER EVERYWHERE/LAB MANAGEMENT版)等。 • 其中,Express版是提供給初學者(例如學生)使用,是一個免費的版本並且可以由微軟網站下載,網址如下:http://www.microsoft.com/express/
1.3 .NET Framework與Visual Studio 請下載 圖1-9 http://www.microsoft.com/express/(下載VWD Express 2010中文版)
1.3 .NET Framework與Visual Studio • 本書使用的為Express 2010中文版 • 而Express版包含四種開發軟體,Visual Basic、Visual C#、Visual C++以及Visual Web Developer等。要開發ASP.NET程式則請安裝Visual Web Developer 2010(簡稱VWD2010)。 • 註:下載完畢,請一同下載最新的Service Pack。
1.4 ASP.NET與VWD • 除了視窗應用程式之外,Web應用程式也被包含在.NET Framework的規範中,也就是ASP.NET。ASP.NET包含開發Web Forms與Web Services兩類,在本書開發的ASP.NET網頁程式都屬於Web Forms。要開發ASP.NET程式則請安裝Visual Web Developer 2008(簡稱VWD2008)。 • 簡言之,本書所使用的工具包含IDE、.NET Framework(含CLR)、SQL Server Express資料庫、Web伺服器等,其中IDE即為VWD2010,而在安裝VWD完成後,也同時安裝了.NET Framework與SQL Server Express資料庫(需勾選)。至於Web伺服器,在VWD2005以前都必須搭配IIS Web伺服器來執行,但Visual Studio或VWD2008以後的版本則本身已經內建虛擬的Web伺服器(稱之為ASP.NET程式開發伺服器),因此不需要安裝IIS也能夠開發Web應用程式。
1.4 ASP.NET與VWD • ASP.NET的編譯與執行 • ASP.NET可以使用VB.NET或C#語法來開發程式,本書使用的是VB.NET語法。ASP.NET程式碼的副檔名為.aspx,當使用者第一次要求網站執行ASP.NET網頁(.aspx檔)時,會自動使用編譯器編譯為中間碼組件檔。通常它會對每個應用程式目錄 (例如 App_Code) 建立組件,也會為主目錄建立一個組件(若使用不同程式設計語言所撰寫,則會為每一種語言建立不同的組件),這些組件檔會被存放在暫時目錄,此動作稱之為自動編譯,速度較慢一些。
1.4 ASP.NET與VWD • 當編譯完成後,實際執行時,則由CLR執行中間碼產生HTML格式碼回傳給客戶端(其流程如圖1-10a所示)。至於之後其他使用者欲連上此ASP.NET網頁時,則不必再進行編譯,CLR可直接執行中間碼產生HTML格式碼回傳給客戶端,因此速度較快(而這些已編譯的中間碼則被視為快取檔案),流程如圖1-10b。而傳統ASP網頁,則必須每一次都經由asp.dll直譯ASP原始碼,故ASP.NET的平均效率比單純直譯的ASP與PHP還要好。
1.4 ASP.NET與VWD 圖1-10a ASP.NET執行過程(第一次執行ASP.NET)