原理與步驟
全球資訊網簡稱為Web。Web可以描述為在Internet上運行的、全球的、互動的、動態的、跨平台的、分散式的、圖形化的超文本信息系統。
1.Web的工作原理
Web是伴隨著Internet技術而產生的。在計算機網路中,對於提供Web服務的計算機稱為Web伺服器。Web採用瀏覽器/伺服器的工作方式。每個Web伺服器上都放置著大量的Web信息。Web信息的基本單位是Web頁(網頁),多個網頁組成了一個Web節點。每個Web節點的起始頁稱為“主頁”,且擁有一個URL地址(統一資源定位地址)。Web節點之間及網頁之間都是以超文本結構(非線性的網狀結構)來進行組織的。
2.Web的工作步驟
Web的工作步驟如下。
(1)用戶打開客戶端計算機中的瀏覽器軟體(例如Internet Explorer)。
(2)用戶輸入要啟動的Web主頁的URL地址,瀏覽器將生成一個HTTP請求。
(3)瀏覽器連線到指定的Web伺服器,並傳送HTTP請求。
(4)Web伺服器接到HTTP請求,根據請求的內容不同作相應的處理,再將網頁以HTML檔案格式發回給瀏覽器。
(5)瀏覽器將網頁顯示到螢幕上。
WWW世界中的標記語言
HTML語言
HTML(Hypertext Markup Language,超文本標記語言)是創建網頁的計算機語言。所謂網頁實際上就是一個HTML文檔。文檔內容由文本和HTML標記組成。HTML文檔的擴展名就是.html或.htm。瀏覽器負責解釋HTML文檔中的標記,並將HTML文檔顯示成網頁。
(1)HTML標記
HTML標記的作用是告訴瀏覽器網頁的結構和格式。每一個標記用尖括弧<>括起來。大多數標記都有一個開始標記和一個結束標記。標記不分大小寫。多數標記都帶有自己的屬性。例如字型標記<FONT>有FACE、COLOR、SIZE等屬性:FACE定義字型;COLOR定義字型的顏色;SIZE定義字型的大小。
使用格式:<FONT FACE= SONG SIZE=3 COLOR=RED > BEIJING </FONT>。
網頁中有很多文本連結和圖片連結。連結,又被稱為超連結,用於連結到WWW全球資訊網中的其他網頁上。在HTML文檔中表示超連結的標記是<A>,通過屬性HREF指出連結的網頁地址URL。
(2)HTML程式
HTML程式必須以<HTML>標記開始,以</HTML>標記結束。在<HTML>和</HTML>標記之間主要由兩部分組成:檔案頭和檔案體。檔案頭用標記<HEAD> </HEAD>來標識,檔案體用標記<BODY></BODY>來標識。在檔案的頭部通常包含整個網頁的一些信息。例如<TITLE></TITLE>標記是用來說明網頁的名稱;<META></META>標記是用來說明網頁的其他信息,如設計者姓名和版權資訊等。所有在瀏覽器中要顯示的內容稱為網頁的主體,必須放在<BODY></BODY>標記中。下面給出的是一個空網頁的HTML程式。
<HTML>
<HEAD>
<TITLE>(在此標記中寫網頁的標題)</TITLE>
</HEAD>
<BODY>
(在此標記中寫網頁的內容)
</BODY>
</HTML>
(3)HTML規範
HTML規範又稱為HTML標準,它總在不斷地發展。每一新版本的出現,HTML都會增加新的特性和內容。
在不同的瀏覽器中,網頁的顯示效果可能會有所不同。每一個瀏覽器都使用自己獨特的方式解釋HTML文檔中的標記,並且多數瀏覽器不完全支持HTML的所有特性。因為,像Microsoft和Netscape公司在HTML標準上又開發了一些特有的HTML標記和屬性,稱之為HTML的擴展。這些標記和屬性只被他們自己的瀏覽器所識別,不可能被其他公司的瀏覽器識別。如果瀏覽器不能識別HTML文檔中的標記,則會忽略這個標記。
(4)HTML程式的編輯環境與運行環境
HTML文檔是一個普通的文本檔案(ASCII),不包含任何與平台、程式有關的信息。因此HTML文檔可以利用任何文本編輯器來方便地生成。要注意的是HTML文檔的擴展名必須是.html或.htm。運行HTML文檔可以在任何瀏覽器下進行,並可在瀏覽器上查看網頁的HTML原始碼。
關於HTML語言中標記的種類與使用方法將會在第5章中更詳細地進行介紹。
可擴展標記語言(XML)
HTML是Web上的通用語言,隨著Internet的深入人心,WWW上的Web檔案日益複雜化、多樣化,人們開始感到了HTML這種固定格式的標記語言的不足。1996年W3C開始對HTML的後續語言進行研究,並於1998年正式推出了XML(Extensible Markup Language,可擴展標記語言)。在設計網頁時,XML提供了比HTML更靈活的方法。
(1)XML語言的特點
XML是國際組織W3C為適應WWW的套用,將SGML (Standard Generalized Markup Language)標準進行簡化形成的元標記語言。簡單地說,XML是使用標記來描述內容或與內容相關的形式信息的通用語言。一個XML文檔由標記和字元數據組成。
而作為元標記語言,XML不再使標記固定,允許網頁的設計者定義數量不限的標記來描述內容,同時還允許設計者創建自己的使用規則。
(2)XML的DTD
DTD(Document Type Definition,文檔類型定義)是一組套用在XML文檔中的自定義標記語言的技術規範。DTD中定義了標記的含義及關於標記的語法規則。語法規則中確定了在XML文檔中使用哪些標記符,它們應該按什麼次序出現,標記符之間如何 嵌套,哪些標記符有屬性等等。DTD可以包含在它所描述的XML文檔中,但通常它是一份單獨的文檔或者一系列文檔。作為外部檔案可通過URL連結,被不同的XML文檔 共享。
XML把DTD的定義權開放,不同行業可以根據自己的實際需求定義描述內容的DTD,以適應本行業內部的信息交流和存檔需要。因此,適合於不同行業、不同平台的標記語言大批湧現。
DTD定義的基本格式是:<!DOCTYPE 根元素[……規則……]>。其中的規則包括:元素聲明ELEMENT,屬性聲明ATTLIST,實體聲明ENTITY,等。通常出版發行業描述圖書的信息需要有:書號、書名、作者、出版社、出版日期等,那么下面給出的便是為描述圖書信息而制定的一個DTD和與它對應的XML文檔。
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE BookInformation [
<!ELEMENT BookInformation ((Book)+)>
<!ELEMENT Book(BookNumber, BookName, Writer, BookConcern, PublishingTime)>
<!ELEMENT BookNumber (#PCDATA)>
<!ELEMENT BookName (#PCDATA)>
<!ELEMENT Writer (#PCDATA)>
<!ELEMENT BookConcern (#PCDATA)>
<!ELEMENT PublishingTime(year, month)>
<!ELEMENT year(#PCDATA)>
<!ELEMENT month (#PCDATA)>
]>
<BookInformation>
<Book>
<BookNumber>ISBN0001</BookNumber>
<BookName>XML3.0技術內幕</BookName>
<Writer>John</Writer>
<BookConcern>清華大學出版社</BookConcern>
<PublishingTime>
<year>2001</year>
<month>8</month>
</PublishingTime>
</Book>
<Book>
另一本書信息省略
</Book>
</BookInformation>
不難看出,在XML的程式清單中使用了具有意義的標記,如<BookName>、<Writer>和<PublishingTime>等。這種用法的優點是:標記具有含義,源碼易於閱讀理解;其次是處理程式可以根據文檔類型定義來驗證XML文檔是否合法。
(3)XML的CSS與XSL
強調內容描述與形式描述的分離,一方面可以使XML檔案的編寫者更集中精力於數據本身,而不受顯示方式的細節影響;另一方面允許為相同的數據定義不同的顯示方式,從而適合於不同套用、不同媒體,使XML數據得到最大程度的重用。XML文檔數據的顯示形式是通過樣式單定義的。CSS(Cascading Style Sheets)是XML使用的一種標準的級聯樣式單,XSL(Extensible Style Language)則是可擴展的樣式語言。
由於XML允許用戶創建任何所需的標記,而通用瀏覽器卻既無法預期用戶標記的意義,又無法為顯示這些標記而提供規則,因此用戶必須為自己創建的XML文檔編寫樣式單,樣式單可以實現共享。
瀏覽器對一個XML文檔的處理過程是,首先去關聯它所指定的樣式單檔案,如果該樣式單是一個XSL檔案,則按照規定對XML數據進行轉換然後再顯示,XSL本身也是基於XML語言的,可以將XML轉化為HTML後再顯示。如果該樣式單是一個CSS檔案,瀏覽器就會按照樣式單的規定給每個標記賦予一組樣式後再顯示。
訪問技術
Web資料庫訪問技術通常是通過三層結構來實現的。目前建立與Web資料庫連線訪問的技術方法可歸納為CGI技術,ODBC技術和ASP、JSP、PHP技術。
CGI技術
CGI(Common Gateway Interface,通用網關界面)是一種Web伺服器上運行的基於Web瀏覽器輸入程式的方法,是最早的訪問資料庫的解決方案。CGI程式可以建立網頁與資料庫之間的連線,將用戶的查詢要求轉換成資料庫的查詢命令,然後將查詢結果通過網頁返回給用戶。
CGI程式需要通過一個接口才能訪問資料庫。這種接口多種多樣,資料庫系統對CGI程式提供了各種資料庫接口如Perl、C/C++、VB等。為了使用各種資料庫系統,CGI程式支持ODBC方式,通過ODBC接口訪問資料庫。
ODBC技術
ODBC(Open Database Connectivity,開放資料庫互接)是一種使用SQL的應用程式接口(API)。ODBC最顯著的優點就是它生成的程式與資料庫系統無關,為程式設計師方便地編寫訪問各種DBMS的資料庫應用程式提供了一個統一接口,使應用程式和資料庫源之間完成數據交換。ODBC的內部結構為4層:應用程式層、驅動程式管理器層、驅動程式層、數據源層。它們之間的關係如圖1-5所示。由於ODBC適用於不同的資料庫產品,因此許多伺服器擴展程式都使用了包含ODBC層的系統結構。
Web伺服器通過ODBC資料庫驅動程式向資料庫系統發出SQL請求,資料庫系統接收到的是標準SQL查詢語句,並將執行後的查詢結果再通過ODBC傳回Web伺服器,Web伺服器將結果以HTML網頁傳給Web瀏覽器,工作原理如圖1-6所示。
由於Java語言所顯示出來的編程優勢贏得了眾多資料庫廠商的支持。在資料庫處理方面,Java提供的JDBC為資料庫開發套用提供了標準的應用程式編程接口。與ODBC類似,JDBC也是一種特殊的API,是用於執行SQL語句的Java應用程式接口。它規定了Java如何與資料庫之間交換數據的方法。採用Java和JDBC編寫的資料庫應用程式具有與平台無關的特性。
ASP、JSP、PHP技術
ASP是Microsoft開發的動態網頁技術,主要套用於Windows NT+IIS或 Windows 9x+PWS平台。確切地說ASP不是一種語言,而是Web伺服器端的開發環境。利用ASP可以產生和運行動態的、互動的、高性能的Web服務應用程式。ASP支持多種腳本語言,除了VBScript和Pscript,也支持Perl語言,並且可以在同一ASP檔案中使用多種腳本語言以發揮各種腳本語言的最大優勢。但ASP默認只支持VBScript和Pscript,若要使用其他腳本語言,必須安裝相應的腳本引擎。ASP支持在伺服器端調用ActiveX組件ADO對象實現對資料庫的操作。在具體的套用中,若腳本語言中有訪問資料庫的請求,可通過ODBC與後台資料庫相連,並通過ADO執行訪問庫的操作。關於ASP的編程技術將會在第7章中詳細介紹。
JSP是Sun公司推出的新一代Web開發技術。作為Java家族的一員,幾乎可以運行在所有的作業系統平台和Web伺服器上,因此JSP的運行平台更為廣泛。目前JSP支持的腳本語言只有Java。JSP使用JDBC實現對資料庫的訪問。目標資料庫必須有一個JDBC的驅動程式,即一個從資料庫到Java的接口,該接口提供了標準的方法使Java應用程式能夠連線到資料庫並執行對資料庫的操作。JDBC不需要在伺服器上創建數據源,通過JDBC、JSP就可以實現SQL語句的執行。
PHP是Rasmus Lerdorf推出的一種跨平台的嵌入式腳本語言,可以在Windows、UNIX、Linux等流行的作業系統和IIS、Apache、Netscape等Web伺服器上運行,用戶更換平台時,無需變換PHP代碼。PHP是通過Internet合作開發的開放原始碼軟體,它借用了C、Java、Perl語言的語法並結合PHP自身的特性,能夠快速寫出動態生成頁面。PHP可以通過ODBC訪問各種資料庫,但主要通過函式直接訪問資料庫。PHP支持目前絕大多數的資料庫,提供許多與各類資料庫直接互連的函式,包括Sybase、Oracle、SQL Server等,其中與SQL Server資料庫互連是最佳組合。
層次體系
當前,Internet/Intranet技術發展異常迅速,越來越多的資料庫套用軟體運行在Internet/Intranet環境下。在此之前,資料庫套用系統的發展經歷了單機結構、集中式結構、客戶機/伺服器(C/S)結構之後,隨著Internet的普及,又出現了瀏覽器/伺服器(B/S)結構與多層結構。在構造一個套用系統時,首先考慮的是系統的體系結構,採用哪種結構取決於系統的網路環境、套用需求等因素。
客戶機/伺服器結構
1.二層C/S結構
二層C/S結構是當前非常流行的資料庫系統結構,在這種結構中,客戶機提出請求,伺服器對客戶機的服務請求做出回答。它把界面和數據處理操作分開在前端(客戶端)和後端(伺服器端),這個主要特點使得C/S系統的工作速度主要取決於進行大量數據操作的伺服器,而不是前端的硬體設備;同時也大大降低了對網路傳輸速度的要求,因為只須客戶端把服務請求傳送給資料庫伺服器,資料庫伺服器只把服務結果傳回前端。
在設計時,對數據可能有如下不同的處理形式。
(1)在處理時,客戶機先向伺服器索取數據,然後釋放資料庫,即客戶機發出的是檔案請求,在客戶機端處理數據,最後將結果送回伺服器。這種處理方式的缺點很明顯:所有的套用處理都在客戶端完成,這就要求客戶端的計算機必須有足夠的能力,以便執行需要的任何程式。更為糟糕的是,由於所有的處理均在客戶端完成,每次運行時都要將檔案整體傳送到客戶端,然後才能執行。如:Student表中有30 000條記錄,客戶端發出命令:
Select * From Student Where Sno='200101'
這條命令將要求伺服器將Student表中的所有記錄傳送到客戶端,然後在客戶端執行查詢,結果只用到一條記錄;如果查詢的記錄不存在,網路傳輸的數據實際上是無 用的。如此大的數據傳輸量是不可想像的。因此,人們提出了在伺服器中能夠執行部分代碼的客戶機/伺服器結構。
(2)在處理時,客戶機接受用戶要求,並發給伺服器;在伺服器端處理用戶要求,最後將結果傳回客戶機顯示或列印。這種處理方式網路通信量較小。客戶機向伺服器發出的是處理請求,而不是檔案請求,處理請求中的代碼在伺服器端執行後向客戶機傳送處理後的結果。
這樣,為了特定任務,客戶機上的程式和伺服器上的程式協同工作:客戶機端的代碼用於完成用戶的輸入輸出及數據的檢查,而伺服器端的代碼完成對資料庫的操作。
客戶機/伺服器結構的另一個主要特點在於軟體、硬體平台的無關性。資料庫伺服器上的資料庫管理系統集中負責管理數據,它向客戶端提供一個開放的使用環境,客戶端通過資料庫接口,如ODBC(開放資料庫連線)和SQL語言訪問資料庫,也就是說,不管客戶端採用什麼樣的硬體和軟體,它只要能夠通過網路和資料庫接口程式連線到伺服器,就可對資料庫進行訪問。
在客戶機/伺服器結構中,常把客戶機稱為前台,而把伺服器端稱為後台。前台應用程式的功能包括用戶界面、接收用戶數據、處理套用邏輯、向後台發出請求、同時接收後台返回的結果,最後再將返回的結果按一定的格式或方式顯示給用戶。而後台伺服器則負責共享外部設備、存取共享數據、回響前台客戶端的請求並回送結果等工作。前台的應用程式和數據一般是用戶專用的,而後台的數據和代碼是所有用戶可以共享的。
由於資料庫伺服器不僅要管理共享數據,保證數據的完整性,還要執行一部分代碼,完成客戶端的一些處理請求,所以對用於伺服器的計算機提出較高的要求。最好要採用一台專用的伺服器,有較快的處理速度,有大容量的硬碟和記憶體,支持磁帶等大容量的存儲設備。
上面講的客戶機/伺服器結構將套用分在了客戶機、伺服器兩級,稱其為兩層客戶機/ 伺服器結構。總之,兩層C/S結構的基本工作方式是客戶程式向資料庫伺服器傳送SQL請求,伺服器返回數據或結果。
這種C/S結構有兩種實現方式,一種是客戶來完成表示部分和套用邏輯部分,而伺服器完成數據訪問部分,這種情況是以客戶為中心的,適用於套用相對簡單、數據訪問量不是很大的情況。另一種是以伺服器為中心的,把一些重要的套用邏輯部分放到伺服器上,這樣可充分利用伺服器的計算能力,減少網路上需要傳送的數據。通常以存儲過程和觸發器的形式出現,但存儲過程都依賴於特定資料庫,不同資料庫之間很難移植,而三層C/S結構可以很好地解決這個問題。
注意:觸發器(trigger)是資料庫系統中,一個在插入、刪除、修改操作之後運行的記錄級事件代碼。不同的事件可以對應不同的動作。通常有3種類型的觸發器:INSERT觸發器、DELETE觸發器和UPDATE觸發器。
2.三層C/S結構
由於兩層結構的客戶機/伺服器系統本身固有的缺陷,使得它不能套用於一些大型、結構較為複雜的系統中,故出現了3層結構的客戶機/伺服器系統,將兩層結構中伺服器部分和客戶端部分的套用單獨劃分出來,即採用“客戶機—套用伺服器—資料庫伺服器”結構(如圖1-8所示)。典型的資料庫套用可分為三部分:表示部分、套用邏輯(商業邏輯)部分和數據訪問部分,三層結構便是對應於這三部分。
其中,套用伺服器和資料庫伺服器可位於同一主機,也可位於不同主機。客戶機是套用的用戶接口部分,負責用戶與應用程式的互動,運行在客戶機端的軟體也稱為表示層軟體。套用伺服器存放業務邏輯層(也稱為功能層)軟體,是套用邏輯處理的核心,實現具體業務。它能回響客戶機請求,完成業務處理或複雜計算。若有資料庫訪問任務時,套用伺服器層可根據客戶機的要求向資料庫伺服器傳送SQL指令。套用邏輯變得複雜或增加新的套用時,可增加新的套用伺服器。資料庫伺服器便是用來執行功能層送來的SQL指令,完成數據的存儲、訪問和完整性約束等。操作完成後再通過套用伺服器向客戶機返回操作結果。
瀏覽器/伺服器結構
隨著Internet技術和Web技術的廣泛套用,C/S結構已無法滿足人們的需要。因為在典型C/S體系中,通常為客戶安裝前端應用程式的做法已不再現實,並且限制客戶端工作環境只能基於Windows、Macintosh或UNIX等作業系統也不切實際。於是基於瀏覽器/伺服器結構(Browser/Server)的系統應運而生。
採用B/S結構後,在客戶端只需安裝一個通用的瀏覽器即可,不再受具體作業系統和硬體的制約,實現了跨平台的套用。
基於B/S結構的典型套用通常採用三層結構:“瀏覽器—Web伺服器—資料庫伺服器”,B/S模式的工作原理是:通過瀏覽器以超文本的形式向Web伺服器提出訪問資料庫的請求,Web伺服器接受客戶請求後,激活對應的CGI程式將超文本HTML語言轉化為SQL語法,將這個請求交給資料庫,資料庫伺服器得到請求後,進行數據處理,然後將處理結果集返回給CGI程式。CGI再將結果轉化為HTML,並由Web伺服器轉發給請求方的瀏覽器,如圖1-9所示。
在B/S模式中,客戶端的標準配置是瀏覽器,如IE;業務功能處理由獨立的套用伺服器處理,Web伺服器成為套用處理的標準配置;數據處理仍然由資料庫伺服器處理。
從本質上講,B/S結構與傳統的C/S結構都是以同一種請求和應答方式來執行套用的,區別主要在於:C/S是一種兩層或三層結構模式,其客戶端集中了大量套用軟體,而B/S是一種基於超連結(HyperLink)、HTML、Java的三級或多級C/S結構,客戶端僅需單一的瀏覽器軟體,是一種全新的體系結構,解決了跨平台問題。到目前,這兩種結構在不同方面都有著廣泛的套用。雖然C/S結構在Internet環境下明顯不如B/S結構具有優勢,但它在區域網路環境下仍具有優勢。
Internet/Intranet信息系統的多層體系結構
多層結構套用軟體與傳統的兩層結構套用軟體相比,有可伸縮性好、可管理性強、安全性高、軟體重用性好等諸多優點,如何在Internet/Intranet環境下構建套用軟體體系結構就成為一個非常重要的問題,也是現今軟體體系研究的一個新熱點。
目前各種技術層出不窮,如最初的靜態HTML頁面、簡單的CGI網關程式、Java Applet程式,現在的ASP等Web資料庫技術,還有動態的Java線上遊戲及PHP技術等。
實際上,多層的概念是由Sun公司提出來的。Sun公司提出的多層套用體系包括4層:客戶層、頂端Web服務層、套用服務層和資料庫層。其中頂端Web服務層是Sun公司多層體系結構中非常重要的一層,它主要起代理和快取的作用。頂端Web伺服器的作用是快取本地各客戶機經常使用的Java Applet程式和靜態數據,通常被放置在客戶機所在的區域網路內,起到一個Java Applet主機(向Web瀏覽器傳送Java Applet程式的計算機)和訪問其他服務的代理作用。與普通代理伺服器的作用相同。構建多層結構套用軟體時,選用Java平台是一個很好的選擇,因為它跨越各套用平台。總之,在Java平台上構建多層套用軟體體系代表著今後Internet/Intranet套用的趨勢。