動態網頁原理/.net面面觀

來源:互聯網
上載者:User
一、        序言
    不知從什麼地方開始才好,所以還是以閑聊作為開場。

首先很高興得到大家的支援,更高興可以遇到這麼多志同道合的朋友,願我們可以共同學習,共同進步。正所謂學無先後,達者為師,在講解的過程之中,如有錯漏之處,還請指正。

其次,恭喜你選擇WEB應用開發,成為一名WEB應用開發工人,看“工人”一說,我們都不是合格的程式員,勉強算的上一名IT產業工人。

程式員也有等級,工人、工匠與大師。工人就是這條流水線上最原始的代碼複製者,不知疲倦的複製與組合代碼。工匠已經提升了一個等級,編程是一種藝術,工匠已經可以操縱這種藝術,他們可以讓程式更精練,更維美。大師站在頂端,他們是創造者,他們瞭解每一個細節,可以創造規則。

如果編程學習是一座山,工人就站在山腳,工匠站在山腰,大師站在上頂。我自認為剛到山腳,你呢?讓我們一起向成為大師努力吧。

最後給出一點建議,不要以為WEB應用開發很簡單,即使是網站開發也不簡單。如果只簡單的對比WINFROM開發(通俗的理解就是軟體開發)與WEB應用開發(通俗的理解就是網站開發),前者需要特別的深度,無論ERP,還是遊戲開發都好,都需要對技術很深的掌握。後者需要特別的廣度,WEB由各種技術綜合而成,如果只是簡單的掌握某種程式設計語言或方法,是肯定不行,只有多種技術相結合才能為使用者提供更好的使用者體驗。

閑話不多說,我們現在就開始。

二、        從HTML說起
1.        HTML的起源
首先從印刷術說起,自從印刷術發明,一些作家就會在手稿上做一些注釋以便指導印刷
工人進行排版,尤其以法國大革命時期的巴爾紮克為甚,他的文稿經常圈塗更改寫滿注釋,所以只有特定的印刷工人才會明白他所做的標記,不得以他值得付更多報酬給印刷工人,以免遭遇罷工(以前噹噹買書,被送了104冊兒童版名人傳記,就記住了,汗)。這樣的注釋就稱為標記,它是一種特別的約定。SGML(Standard Generalized Markup Language,標準同用標記語言)就是這樣的標記語言。
   
    電腦顯示與印刷行業的排版有類同之處,都是儲存資訊,傳遞資訊,排列顯示,所以1989年3月,在歐洲粒子物理研究所,即CERN,Tim Berners-Lee提出一項計劃,目的是使科學家們能很容易地翻閱同行們的文章。此項計劃的後期目標是使科學家們能在伺服器上建立新的文檔。為了支援此計劃,Tim建立了一種新的語言來傳輸和呈現超文字文件。這種語言就是超文本標註語言HTML(Hyper text Markup Language)。
HTML是SGML語言的具體應用,比SGML更為簡單,它是以對稱結構化的筆記為“注釋”以告知意義,這樣就形成了我們所見到的網頁,而排版工人就是電腦。所以我們所見到網頁主體就是由HTML標記和他所包含的內容組成,執行者與解釋者就是瀏覽器這個軟體程式。

2.        用戶端與伺服器
    我們這裡所說的用戶端就是指瀏覽器,它可以協助你製作一個請求,並將這個請求發送給另外一台電腦(伺服器),伺服器裡有一個程式就像望夫石,它一直在那裡等待,當它發現某個用戶端的請求時,他會接受請求,並驗證這個請求的合法性,如果合法,他針對以某個程式為基礎,對資料進行處理,接著他會將程式中需要返回的資訊連同指定的HTML標記一起返回給用戶端,用戶端收到返回資訊後就會解釋、排列、顯示;

3.        從HTML到XML
隨著網路的發展,HTML已經不能滿足多數需要,HTML被不斷的修改,從1.0版本到現
現在的4.0版本,但是由於HTML將顯示格式與資料一起儲存與傳輸,它就無法適應更多的需要,例如手機由於種種局限無法解釋HTML中的顯示格式,而需要的只有資料,人們於是追本溯源,從新以SGML為基礎開發出另一種標記語言即XML 。

    XML並不描述如何顯示,它的標記(注釋)是用來描述資料資訊,包含的是資料,它可以在各裝置與各平台中相互傳遞,因為它是無格式的,當某一程式接收到XML檔案時,這個程式會按照被一起傳輸過來的顯示描述檔案,對其解釋顯示,或者根據程式內建描述進行解釋顯示,或者僅僅將它當作資料接收。可以描述顯示的技術有MAXL,XLST,CSS等。

    XML內容遠遠不止這些,以後還會深入學習;

4.        從HTML到XHTML
管理HTML XML標準的組織(W3C)認為HTML由於其簡單化造成它的局限,HTML必然要
向XML過度,但由於XML雖然資料轉換能力強大,完全可以替代HTML,但面對成千上萬已有的網站,直接採用XML還為時過早。所以制定了一種中間過度型語言即XHTML。

    XHTML是The Extensible HyperText Markup Language可擴充標識語言的縮寫。目前推薦遵循的是W3C於2000年1月26日推薦XML1.0,是在HTML4.0的基礎上,用XML的規則對其進行擴充得到。

    雖然XHTML看起來比較高層一些,但它可以說是HTML4.0的升級版本,即4.01,我們在ASP.NET開發中要接觸到的是XHTML1.1 profisnal 標準,它是在HTML基礎上更好的結合CSS,更嚴格的定義。

5.        看看javascript
javascript是一種指令碼語言,就像HTML一樣被輸出至瀏覽器中,運行於用戶端,而不
是運行於伺服器端,它對網站開發起到一些補充作用,可以於瀏覽器中運行,既在頁面瀏覽者的電腦上(準確的說是瀏覽器裡)執行一些簡單操作,例如檢查驗證、控制瀏覽器中某單元的顯示等。

    微軟在IE瀏覽器中內建一個程式模組-XMLREQUESTHTTP,它可以被javascrit調用,並進行幕後處理,而不必改變瀏覽器中顯示,這樣就可以利用它與javascript結合隱藏處理與伺服器端相互連訊,而不必改變頁面顯示,實現資料、表單提交,而整體頁面不會被提交至伺服器,頁面不會被重新整理,這就是最近熱火的AJAX開發技術。

    Javascript 並不難,複雜程度有限,對於簡單開發掌握4-10條語句即可,所以不必擔心。

6.        關於以上
以上5點我們稱為用戶端技術,也就是被瀏覽器接收,解釋,執行,顯示。雖然用戶端
技術還有很多,以上是最為關鍵,也是我們教程中需要用到的技術。這些技術又被稱為靜態技術,他們的元素是構成網頁顯示層面的要素,所以我們接收到的都是這些靜態要素,都是可以被瀏覽器讀懂並解釋的。而我們接收到的這些靜態要素是由伺服器傳遞過來的,伺服器通過執行、解釋某個程式,並最終講運行結果與原有動態網頁面中的HTML,一起製成靜態格式檔案傳遞給用戶端,用戶端接收,解釋並顯示。

三、        資料庫(不要結合上面看)
    有一批水果,各種類型都有,想儲存起來,怎麼放才好?
    雜亂的一堆,如果想從裡面把蘋果全部找出來,豈不是很耗力?
    如果倉庫有一個柜子,柜子上有很多盒子,盒子上都唯一的編號,一個盒子存一種水果,這樣找出蘋果就方便了,只要找到那個對應編號的盒子就行了。

    資訊也是這樣,要把他們分門別類的村入資料庫中的每個表中,尋找起來才有效率。一個資料庫可以有多張表,一張表裡可以有多個欄位,一個欄位儲存一條資訊,這樣在資料表中就形成行與列,一行代表一整條新資料,比如某個蘋果的大小,重量,顏色都在這行對應的列裡(欄位),下一行是另一個蘋果。

    如果你想給每個蘋果特徵都記下來,只要把這個蘋果的特徵對應的記錄到一行裡對應欄位裡就可以了,下一行寫見的就是另一個蘋果,這就是資料庫的寫入。

    如果你想看到所有蘋果的特徵,很簡單,用程式讀出來,然後寫進HTML檔案裡,這就是資料庫的讀出,需要一條一條的讀出嗎?不需要,程式是可以自己迴圈的讀的,讀完一條他會自動讀下一條,一直讀到沒有(判斷沒有了的條件),那迴圈又怎麼顯示呢,首先你要把HTML標記是一行的標記一起放入迴圈結構裡,這樣在向頁面輸出的資料的時候,就自動把行結構迴圈了,就是告訴HTML,加一個行,加完再加,一直到不能加了就不加了,那怎麼把表了每個欄位資訊讀出來呢,好象你在地裡挖馬鈴薯,你買了把鐵鍬,馬鈴薯長的成行成排的,每行的的每一個馬鈴薯邊上放的都是那把鐵鍬(科幻),從左邊起,然後右邊,換到下一行就成迴圈了。呵呵

     還有就是資料庫刪除了,比如某個蘋果爛了,你想把這個蘋果的資訊刪除了,幸好你知道這個蘋果編號,只要告訴程式這個蘋果編號,然後執行什麼樣處理就可以刪除了。

     最後就是資料庫更新了,某個蘋果突然變胖了,你得更改記錄他的體重,你把這個蘋果編號給程式再告訴他體重改成多少斤就可以了。

    幸好我們有資料庫軟體,只要開啟資料庫軟體,在裡面建好資料庫,再在資料裡建好表,再在網站程式裡寫上幾行代碼就可以與資料庫軟體建立相互連訊了。

    這裡我們用MMSQL 2000 SERVER這個軟體,不管是用哪個資料庫軟體,他接受的查詢語言都是一樣的,都是TSQL97資料庫查詢語言,不多,幾個定義而已,不管是讀出,寫入,還是刪除 更新都好,我們只要在網站頁面裡把對應語句傳輸給資料庫系統,資料庫系統就會自動執行,並那執行的結果返回給我們的程式,這樣我們控制這些顯示這些資料就得到最終結果了。

    後面會對資料庫進行講解,以及各種方法講解;

四、        動態網站原理
1.        動態網站一般原理
動態網站一般是由瀏覽器發送請求給伺服器,伺服器接收到請求後根據請求進行處理,
最後將處理結果返回給用戶端顯示。
2.        用戶端一般通用請求
不管是在ASP、PHP、ASP.NET、JSP裡都存在以下的要求方法:
A.        表單提交
    表單是HTML(我用HTML類稱XHTML等,下同)中的一個標記,沒有顯示意義,相當於一個容器,當這個表單中的某個按鈕,發生點擊事件後,瀏覽器首先檢測到這個事件,接著它會尋找這個按鈕所在的表單中所有可以向伺服器傳送資料的元素,記錄這些資料的標記,數值,然後發送給伺服器上指定處理頁面,這個指定處理頁面是在表單的 action 屬性指定
<fron asction=”xxxx.aspx” mothed=”post”></from>
    例如論壇中的發表文章,在文字框輸入資訊後按提交,瀏覽器會將這個文字框資訊傳遞給伺服器
mothed代表表單提交方法   
B.        地址定位
    地址定位一般是不傳遞參數,或者將參數作為地址的一部分傳遞給伺服器端。
    比如一個產品頁 http://www.xx.com/product.asp?&id=10
    告訴伺服器找到product.asp並接收參數id=10,這樣程式就會處理這個頁面,並根據參數讀出資料寫進HTML檔案中再傳遞給用戶端。

3.        ASP處理過程
IIS 資訊服務程式程式某個進程會時刻運行監聽,當它發現用戶端請求時它會接受請
求,驗證請求的合法性,將接受的請求參數給定一個記憶體地區儲存值,接著將會根據指定的處理頁面,讀取這個頁面並傳遞給ASP解釋程式,ASP解釋程式尋找ASP標記,找到後對應意義接著啟動C語言解釋程式,C語言解釋程式根據ASP代碼對應處理請求,最終通過資料庫讀取,數值運算等處理或者最終處理結果,並將這些處理結果轉換為靜態元素置入分頁檔中產生最終HTML格式檔案存入緩衝,並通知IIS 資訊服務程。

     PHP與ASP共屬於指令碼語言,他們的處理過程基本相同,都是依靠C語言程式解釋指令碼語言定義,並執行物理運算,產生最終結果返回給用戶端。

4.        ASP.NET處理過程
    ASP.NET的處理過程不同於指令碼語言的過程,它與JSP處理過程基本相同。
    當伺服器端監聽程式檢測到請求時,它會驗證請求,並啟動執行對應的ASP.NET來源程式,這個來源程式是由另外一種語言編寫而成,即IL語言,屬於一種接近機器語言的中繼語言,即不管你用什麼語言編寫的ASP.NET程式,它最終得到的都是IL語言程式,IL語言可以直接操縱物理,執行運算,並將最終結果產生並輸出。

五、        DONET面面觀
    1.DONET是什麼
   Microsoft  .NET 是 Microsoft XML Web services 平台。XML Web services 允許應用程式通過 Internet 進行通訊和共用資料,而不管所採用的是哪種作業系統、裝置或程式設計語言。Microsoft .NET 平台提供建立 XML Web services 並將這些服務整合在一起之所需。對個人使用者的好處是無縫的、迷人的體驗。
   
   從上面那段話裡我們可以知道DONET不是一種開發語言,也不是一種開發環境,他是一種平台,它由多種內容組成,為使用者提供跨平台的開發與部署服務。

   首先我們看DONET的核心.net framework,目前.net framework的最高版本是3.0,整合於VISTA作業系統中,為VISTA及各類應用程式提供核心驅動。目前我們一般使用的版本是2.0。

   .net framework 的核心是其運行庫的執行環境,稱為公用運行庫(CLR),從它的發展曆史來看,微軟首先給出的是COM+技術(Component Object Model,組件對象模組。一種微軟所制定的軟體技術;讓對象的功能可以被其它軟體所叫用,可以讓組件重複使用、容易更新及維護),簡單的說微軟將眾多電腦功能獨立的寫成一個一個函數,以便第三方應用程式使用,第三方應用程式只要調用微軟給出COM組件就可以輕鬆的實現一些功能,而無須編寫大量的代碼進行底層物理操作,例如一個郵件發送程式,我們無須知道郵件是如何發送,如何傳遞,我們只要調用一個組件,並將內容傳遞給他,組件就會我們發送。

   可以這樣想象,還是以郵件發送為例,我與你都使用的是windows作業系統,都想編寫一段程式進行郵件發送,如果沒有其他方法,我們只能一一編寫程式,從底層物理訪問到傳輸協議的使用,如果我想在寫第二個郵件發送程式,而又和第一個有所不同,只得重複的編寫某些相同的代碼,這就造成了效率低下,既然某些內容相同,為什麼不把他們獨立出來,只做不同的內容呢,COM+就提供了這種可重用功能,他將某些處理過程封裝起來繼成在作業系統中,當你需要時調用這些函數就可以實現功能。

    COM有他的好處也有他的壞處,由於他的開放性導致組件越來越多,同一類組件版本異同等原因給程式員造成DLL地獄,可以想象在上萬的組件中程式員無所適從,一些錯誤的引用就會造成程式的崩潰,後來微軟開始他的.NET戰略,為了實現跨平台及多平台互連,他首先將WIN32 API整理重寫縮減,由最初的近8萬個API到最終的3000多個API,全部存放於一個體系中,即.NET FRAMEWORK,分別存放於14個類別中,最終的大小隻有十多M,這就為跨平台提供了先決條件,你無須安裝WINDOWS作業系統,只需在你的智慧型裝置裡安裝。NET FRAMEWORK就可以擁有WINDOWS系統中所有的編程功能,

    然後微軟學習JAVA的做法,他將.net framework的函數編譯成一種中繼語言,既IL,這種中繼語言是以數字作為編碼,而不是以文本作為編碼,這樣就更接近機器語言,更容易被機器理解,這時.net 就可以像JAVA一樣帶著他的API四處縱橫,這樣還不夠,單單的函數庫還不足以支撐整個應用,還需要一種程式設計語言來操縱這些函數,微軟一直很有戰略眼光,他考慮了更多使用者的編程習慣,從JAVA(微軟的J++其實是JAVA變種,為此還和SUN鬧了場官司),到C++,再到VB再到DAPHI,再到JAVASCRIPT,為DAPHI創造了DAPHI2000,改造了VB成為VB.NET使之由基於對象程式設計語言變成完全物件導向,並創新了一種程式設計語言即C#,C#是綜合C/C++/JAVA的優點進而改進的一種程式設計語言,所以你在他身上能找到C C++ JAVA的影子,C#/C++/JAVA又被稱為基於C的程式設計語言,所以我們在ASP.NET編程中我們選擇C#

    但這麼多程式設計語言為何能編寫同一種類型的程式呢?.net framework函數庫既然是以IL中繼語言編寫,那為什麼C++,DAPHI又能使用這些函數呢,其實微軟玩了花招,語句還是C++的語句,還是DAPHI的語句,但最終已不是C++,不是DAPHI了,他將這些語言最終編譯產生的還是IL語言,所以你用C++只不過是一種格式,一種代碼習慣而已,本質早已變了,這就是微軟的高明之處了,只要你會那幾門語言中的任一門,都可以編寫.NET程式,但最終它就是.NET程式。

    所以我們瞭解.net 中兩個基本的東西了:類庫(函數庫,其實函數與類不同,只是為了方便理解才這麼叫)與程式設計語言,程式設計語言操縱類庫中的函數以實現功能

    其實不管是網站也好,還是軟體也好,他們都是操縱函數進行運算,然後給出結果,只是給出結果的方式不同,網站是通過網路,軟體是通過本地化介面,他們只在某些方式上有些不同,所以有了類庫,有了程式設計語言,再有一個方法就可以實現各種應用了。

    所以.NET即可以是WINDOS應用開發,也可以是WEB應用,還可以是MOBILE應用,不會受平台及方面的限制

    在WINDOS應用中,它會給出表單的方法,並將程式最終編譯成EXE,在WEB應用中給出的是WEB的方法,編譯產生的是分頁檔,與源檔案,再結合IIS的ISAPI擴充功能就發行就緒出來了,所以不管是哪種開發方式都好,他們都是使用的同一種程式設計語言,共用很多函數,某些函數是某一種應用的特有的,他們最終產生的都是IL中繼語言。

    微軟將VB的開發方式帶進了。NET,即簡單化開發,可以由工具箱中拖拽某個控制項並設定屬性進行簡單化開發。

    控制項是是什麼,控制項是微軟既已設定的的輸出和容器模式,控制項的後面是程式,通過封裝輸出與容納以及處理方法來簡化開發.

    所以我們將ASP.NET要用到的技術進行分解
    控制項為我們提供事件與容器,程式設計語言為我們進行處理,類庫為我們提供功能的實現;
   
    其他暫不介紹,以後在說。

    2.關於幾種網站開發方式的討論
A.傳統開發方式
傳統的網站開發方式正如大家所瞭解的,它是基於瀏覽器的,基於WEB標準的,應用的是HTML ,XHTML,DHTML等傳統頁面技術,遵循HTTP協議,用戶端於伺服器端沒有過多的互動。
B.非同步開發方式
遵循AJAX非同步技術的開始方式,基於瀏覽器,基於WEB標準,應用的是HTML ,XHTML,DHTML傳統頁面技術,非同步互動資料。
C.富用戶端開發方式 RIA UI
例如FLASH的FLEX技術,.NET的Expression技術,這應是未來的主流,這種技術是將介面與業務及資料邏輯層分離,將頁面狀態大量前移至用戶端,WEB伺服器端重新組織資源,形成WEB SERVICE集合。

具體的解釋是這種開發方式脫離傳統的HTML,XHTML,DHTML等頁面技術,用戶端與伺服器端以XML做為通訊方式,大量頁面UI資訊(MAXL,MXML)載入到用戶端承載儲存,伺服器端實現真正WEB SERVICE集合;

按照FLEX的做法是將在瀏覽器裡做一個緩衝容器,非同步載入執行,實現更豐富的功能體驗,微軟在很久之前就公布將IE6.0作為IE的最後版本(IE7.0是因為他的計劃延遲,網路產生變化,不得以變更)可能就是基於這個考慮
C.        胖用戶端
富用戶端只能說是功能體驗較多,胖用戶端就是肥了,胖用戶端已經完全瀏覽器外用,
脫離了傳統頁面方式,是B/S與C/S開發的的綜合,如果上一種可以稱為BC/S的話,後一種就是CB/S,C在前。
    具體的開發方式就是自訂用戶端讓使用者的下載以實現更豐富的功能,以WEB的方式進行通訊,如果無法理解,不妨想下網路遊戲,將全屏改成非全屏,將遊戲介面改成現在的網路介面,其實這還不足以說明。現在你明白了WEB應用開發≠網站開發了嗎?

    現在處於一個技術變革的時代,如果你不能確定以後你時候會轉行,一定會繼續做程式員,你就要把把你的身家性命押寶你對新一代(也可以說是這一代)WEB技術和體系的理解上,從中選擇一種,不要追逐WEB2.0這樣概念,真正的革新已經開始。

    3.小論C/S開發方式
    有句話是這麼說來著的,一切都是為了WEB,IT成就WEB,WEB吞噬IT。
    B/S越來越熱火,但不代表C/S就要趨與平淡,在基礎領域C/S無可替代,甚至C語言這麼多年依然堅挺,曾經十分厭惡C,憎恨潭浩強誤人子弟,現在回過頭來C語言是如此的帥,自由透明。還有C++
    為什麼不論VB,VB已經無藥可救了,微軟老大發話一年內VISTA時常佔有60%,誰敢再碰VB,那麼多物件導向程式設計語言,為什麼還要選VB,VB.NET不過只保留了型。升級可以,沒問題?純屬做夢。
    為什麼不論JAVA,JAVA不錯,但搞JAVA的人都搞企業級開發去了,偶爾來點J2ME,嵌入開發大佬,離C/S太遠了。
    DAPHI,DAPHI在嵌入與自動化控制方面市場佔有強悍啊(尤其是大連這種重工企業多的地方),不知道為什麼。
    看看.NET的各種語言,C/S還是等普及了VISTA再說。

    基礎領域就C與C++在挺著,其他走的越來越靠近B/S。
    B/S與C/S界限的模糊是普通應用領域的必然趨勢,所以不要說做網站沒前途啊,是還沒發現前途。

    4.小論VISTA的影響
    VISTA延遲兩年多才發布,要是04年6月發布估計網路就不是現在這個樣子了,起碼我們現在早進入64位計算時代,大把大把的程式員要失業先。我們的上網行為方式估計也不是現在這個樣子。
    現在發布VISTA有什麼影響,首先對最近還在買32位時代的電腦的人說,等死吧。其次,對主板不支援64位的人說,你們沒希望了。
    然後對VB程式員說,你們已經被時代拋棄,對還在依賴COM+的程式員及MFC程式員說,還好,但是努力轉。對ASP開發人員說,前途不會再光明。對PHP 開發人員說,再看一兩年,看看還有沒有希望,說不定。對PHYthon開發人員說,祝賀你,你已經跟著微軟老大混了。對RUBY開發人員說,提前祝賀你,你即將跟著微軟老大混。對C與C++開發人員說, 王道還是!對JAVA開發人員說,咱不管,也管不著。

  完畢!
  順便補充VISTA 6版中5版基於64位,VISTA的核心是.net framework3.0,另外它以前的叫法叫做WINFX,看起來是不是很像WIN32啊,像就對了。還有WWF,WCF,WPF可是些新詞彙哦!



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。