在web剛出現(xiàn)時,餓哦們只能瀏覽那些頁面樣式簡單的內(nèi)容。如今,web使用各種各樣的技術(shù),來呈現(xiàn)豐富多彩的內(nèi)容。
一、HTML
? ? 1)web頁面幾乎全由HTML構(gòu)建
HTML(HyperText Markup Language,超文本標(biāo)記語言)是為了發(fā)送web上的超文本(Hypertext)而開發(fā)的標(biāo)記語言。超文本是一種文檔系統(tǒng),可將文檔中任意位置的信息與其他信息(文本或圖片等)建議關(guān)聯(lián),即超鏈接文本。標(biāo)記語言是指通過在文檔的某個部分穿插特別的字符串標(biāo)簽,用來修飾文檔的語言。我們把出現(xiàn)在HTML文檔內(nèi)的這種特殊字符串叫做HTML標(biāo)簽(Tag)。
平時我們?yōu)g覽的web頁面幾乎全是使用HTML寫成的。由HTML構(gòu)成的文檔經(jīng)過瀏覽器的解析、渲染后,呈現(xiàn)出來的結(jié)果就是web頁面。

一下就是用HTML編寫的文檔的例子。而這份HTML文檔內(nèi)這種被<>包圍著的文字就是標(biāo)簽。在標(biāo)簽的作用下,文檔會改變樣式,或插入圖片、連接。

? ? 2)HTML的版本
Tim Berners-Lee 提出HTTP概念的同時,還提出了HTML原型。1993年正在伊利諾伊大學(xué)的NCSA(The National Center for Supercomputing Applications,國家超級計算機(jī)應(yīng)用中心)發(fā)布了Mosaic瀏覽器(世界收割圖形界面瀏覽程序),而能夠被Mosaic解析的HTML,統(tǒng)一標(biāo)準(zhǔn)后即作為HTML1.0發(fā)布。
目前的最新版本是HTML4.01標(biāo)準(zhǔn),1999年12月W3C(World Wide Web Consortium)組織推薦使用這一版本。下一個版本,預(yù)計會在2014年左右正式推薦使用HTML5標(biāo)準(zhǔn)。
HTML5標(biāo)準(zhǔn)不僅解決了瀏覽器之間的兼容性問題,并且可把文本作為數(shù)據(jù)對待,更容易復(fù)用,動畫等效果也變得更生動。
時至今日,HTML仍存在較多懸而未決問題。有些瀏覽器未遵循HTML標(biāo)準(zhǔn)實現(xiàn),或擴(kuò)展自用標(biāo)簽等,這都反映了HTML的標(biāo)準(zhǔn)實際上尚未統(tǒng)一這一現(xiàn)狀。
? ? 3)設(shè)計應(yīng)用CSS
CSS(Cascading Style Shess, 層疊樣式表)可以指定如何展望HTML內(nèi)的各種元素,屬于樣式表標(biāo)準(zhǔn)之一。即使是相同的HTML文檔,通過改變應(yīng)用的CSS,用瀏覽器看到的頁面外觀也會隨之改變。CSS的里面就是讓文檔的結(jié)構(gòu)和設(shè)計分離,達(dá)到解耦的目的。
實例:

可在選擇器(selector).logo 的指定范圍內(nèi),使用{}括起來的聲明塊中寫明的padding:20px 等聲明語句應(yīng)用指定的樣式。
可通過指定的HTML元素或特定的class、ID等作為選擇器來限定樣式應(yīng)用范圍。
二、動態(tài)HTML
? ? 1)讓web頁面動起來的動態(tài)HTML
所謂動態(tài)HTML(Dynamic HTML),是指定使用客戶端腳本語言將靜態(tài)的HTML內(nèi)容變成動態(tài)的技術(shù)的總稱。鼠標(biāo)單擊點(diǎn)開的新聞、Google Maps 等可滾動的地圖就用到了動態(tài)HTML。
動態(tài)HTML技術(shù)是通過調(diào)用客戶端腳本語言JavaScript,實現(xiàn)對HTML的Web頁面的動態(tài)改造。利用DOM( Document Object Model,文檔對象模型)可執(zhí)行欲發(fā)生動態(tài)變化的HTML元素。
? ? 2)更容易控制HTML的DOM
DOM是用以操作HTML文檔和XML文檔的API(Application Programming Interface,應(yīng)用編程接口)。使用DOM可以將HTML內(nèi)的元素當(dāng)作對象操作,如取出元素內(nèi)的字符串、改變那個CSS的屬性等,使頁面的設(shè)計發(fā)生改變。
通過調(diào)用JavaScript等腳本語言對DOM的操作,可以以更為簡單的方式控制的HTML的改變。

比如,從JavaScript的角度來看,將上述HTML文檔的第三個P元素改變文字顏色時,會像下方這樣編寫代碼。

document.getElementsByTagName('p')語句調(diào)用getElementsByTagName函數(shù),從整個HTML文檔(document object)內(nèi)取出P元素。接下來的content【2】.style.color='#FF0000'語句指定content的索引為2的元素的樣式顏色改為紅色。
DOM內(nèi)存在各種函數(shù),使用它們可查閱HTML中的各個元素。
三、Web應(yīng)用
? ? 1)通過Web提供功能的Web應(yīng)用
Web應(yīng)用是指通過Web功能提供的應(yīng)用程序。比如購物網(wǎng)站、網(wǎng)上銀行、SNS、BBS、搜索引擎和e-learning等?;ヂ?lián)網(wǎng)(Internet)或企業(yè)內(nèi)網(wǎng)(Intranet)上遍布各式各樣的Web應(yīng)用。
原本應(yīng)用HTML協(xié)議的Web的機(jī)制就是對客戶端發(fā)來的請求,返回事前準(zhǔn)備好的內(nèi)容??呻S著Web越來越普及,僅靠這樣的做法已不足以應(yīng)對所有的需求,更需要引入由程序創(chuàng)建HTML內(nèi)容的做法。
類似這種有程序創(chuàng)建的內(nèi)容稱為動態(tài)內(nèi)容,而事先準(zhǔn)備好的內(nèi)容稱為靜態(tài)內(nèi)容。web應(yīng)用則作用于動態(tài)內(nèi)容之上。

? ? 2)與Web服務(wù)器及程序協(xié)作的CGI
CGI(Common Gateway Interface,通過網(wǎng)關(guān)接口)是指Web服務(wù)器在接收到客戶端發(fā)送過來的請求后轉(zhuǎn)發(fā)給程序的一組機(jī)制。在CGI的作用下,程序會對請求內(nèi)容做出相應(yīng)的動作,比如創(chuàng)建HTML等動態(tài)內(nèi)容。
使用CGI的程序叫做CGI程序,通常是用Perl、PHP、Ruby和C等編寫語言編寫而成。

有關(guān)CGI更為翔實的內(nèi)容請參考RFC2875“ The Common Gateway Interface (CGI)Version 1.1 ”
? ? 3)因Java而普及的Servlet
Servlet(Java Servlet 表示輕量服務(wù)程序) 是一種能在服務(wù)器上創(chuàng)建動態(tài)內(nèi)容的程序。Servlet用于Java語言實現(xiàn)的一個接口,屬于面向企業(yè)級Java的一部分。
之前提及的CGI,由于每次接到請求,程序都要跟著啟動一次。因此一旦訪問量過大,web服務(wù)器要承擔(dān)相當(dāng)大的負(fù)載。而Servlet運(yùn)行在于web服務(wù)器相同的進(jìn)程中,因此受到的負(fù)載較小(Servlet常駐內(nèi)存,因此在每次請求時,可啟動相對進(jìn)程級別更為輕量的Servlet,程序的執(zhí)行效率從而變得更高)。Servlet的運(yùn)行環(huán)境叫做web容器或Servlet容器。
Servlet作為解決CGI問題的對抗技術(shù)(說對抗的原因在于,這個方向上已存在用Perl編寫的CGI,實現(xiàn)在Apache HTTP Server 上內(nèi)置 mod_php 模塊后可運(yùn)行PHP程序、微軟主導(dǎo)的ASP等技術(shù)),隨Java一起得到了普及。

隨著CGI的普及,每次請求都要啟動新CGI程序的CGI運(yùn)行機(jī)制逐漸變成性能瓶頸,所以之后Servlet和Mod_Perl等可直接在web服務(wù)器上運(yùn)行的程序才得以開發(fā)、普及。
四、數(shù)據(jù)發(fā)布的格式及語言
? ? 1)可控制標(biāo)記語言
XML(eXtensible Markup Language, 可擴(kuò)展標(biāo)記語言)是一種可按應(yīng)用目標(biāo)進(jìn)行擴(kuò)展的通用標(biāo)記語言。旨在通過使用XML,使互聯(lián)網(wǎng)數(shù)據(jù)共享變得更容易。
XML和HTML都是從標(biāo)準(zhǔn)通過標(biāo)記語言SGML(Standard Generalized Markup Labguage)簡化而成。與HTML相比,它對數(shù)據(jù)的記錄方式做了特殊處理。
下面我們以HTML編寫的某公司的研討會議程為例進(jìn)行說明。

用瀏覽器打開文檔時,就會顯示排列的列表內(nèi)容,但如果這些數(shù)據(jù)被其他程序讀取會發(fā)生什么?某些程序雖然具備可通過識別布局特征取出文本的方法,但這份HTML的樣式一旦改變,要讀取數(shù)據(jù)內(nèi)容也就變得相對困難了。可見,為了保持?jǐn)?shù)據(jù)的正確讀取,HTML不適合用來記錄數(shù)據(jù)結(jié)構(gòu)。
接著將這份列表以XML的形式改寫就成了以下的示例。

XML和HTML一樣,使用標(biāo)簽構(gòu)成樹形結(jié)構(gòu),并且可自定義擴(kuò)展標(biāo)簽。
從XML文檔中讀取數(shù)據(jù)比起HTML更為簡單。由于XML的結(jié)構(gòu)基本上都是用標(biāo)簽分割而成的樹狀結(jié)構(gòu),因此通過語法分析器(Parser)的解析功能解析XML結(jié)構(gòu)并取出數(shù)據(jù)元素,可更容易地對數(shù)據(jù)進(jìn)行讀取。
更容易地復(fù)用數(shù)據(jù)使得XML在互聯(lián)網(wǎng)上被廣泛接受。比如,可用在2個不同的應(yīng)用之間的交換數(shù)據(jù)格式化。
? ? 2)發(fā)布更新消息的RSS/Atom
RSS(簡易信息聚合,也叫聚合內(nèi)容)和Atom都是發(fā)布新聞或博客日志等更新信息文檔的格式的總稱。兩者都用到了XML。
RSS有以下版本,名稱和編寫方式也不相同。
RSS0.9(RDF Site Summary):最初的RSS版本。1999年3月由網(wǎng)景通信公司自行開發(fā)用于其門戶網(wǎng)站?;A(chǔ)構(gòu)圖創(chuàng)建在初期的RDF規(guī)格上。
RSS0.91(Rich Site Summary):在RSS0.9的基礎(chǔ)上擴(kuò)展元素,與1999年7月開發(fā)完畢。非RDF規(guī)格,使用XML方式編寫。
RSS1.0(RDF Site Summary):RSS規(guī)格正處于混亂狀態(tài)。2000年12月由RSS-DEV工作組再次采用RSS0.9中使用的RDF規(guī)格發(fā)布。
RSS2.0(Really Simple Syndication):非RSS1.0發(fā)展路線。增加支持RSS0.91的兼容性,2000年12月由UserLand Software 公司開發(fā)完成。
Atom具有以下兩種標(biāo)準(zhǔn)。
Atom供稿格式(Atom Syndication Format):為發(fā)布內(nèi)容執(zhí)行的網(wǎng)站消息來源格式,單講Atom時,就是指此標(biāo)準(zhǔn)。
Atom出版協(xié)定(Atom Publishing Protocol):為Web上內(nèi)容的新增或修改二制定的協(xié)議。
用于訂閱博客更新信息的RSS閱讀器,這種應(yīng)用幾乎支持RSS的所有版本以及Atom。
實例:

? ? 3)JavaScript衍生的輕量級易用JSON
JSON(JavaScript Object Notation)是一種以JavaScript(ECMAScript)的對象表示法為基礎(chǔ)的輕量級數(shù)據(jù)標(biāo)記語言。能夠處理的數(shù)據(jù)類型有false/null/true/對象/數(shù)組/數(shù)字/字符串,這7種類型。
JSON讓數(shù)據(jù)更輕更純粹,并且JSON的字符串形式可被JavaScript輕易地讀入。當(dāng)初配合XML使用的Ajax技術(shù)也讓JSON的應(yīng)用變得更為廣泛。另外,其他各種編程語言也提供豐富的庫類。已達(dá)到輕便操作JSON的目的。
有關(guān)JSON更為翔實的內(nèi)容請參考RFC4627“The application/json Media Type for javascript Object Notation (JSON)”