1赊堪、 Web概要
- 早期的web應(yīng)用主要是靜態(tài)頁(yè)面的瀏覽面殖,這些靜態(tài)頁(yè)面使用HTML語(yǔ)言編寫(xiě),放在服務(wù)器上哭廉,用戶(hù)使用瀏覽器通過(guò)HTTP協(xié)議請(qǐng)求服務(wù)器上的web頁(yè)面脊僚,服務(wù)器上的web服務(wù)器軟件接受到用戶(hù)發(fā)送的請(qǐng)求后,讀取請(qǐng)求URI所標(biāo)識(shí)的資源群叶,加上消息包頭發(fā)送給客戶(hù)端的瀏覽器吃挑,瀏覽器解析響應(yīng)中的HTML數(shù)據(jù),向用戶(hù)呈現(xiàn)多姿多彩的HTML頁(yè)面街立。
- 但是隨著網(wǎng)絡(luò)的發(fā)展舶衬,很多線(xiàn)下業(yè)務(wù)開(kāi)始向網(wǎng)上發(fā)展,基于Internet的web應(yīng)用也變得越來(lái)越復(fù)雜用戶(hù)所訪(fǎng)問(wèn)的資源已不僅僅局限于服務(wù)器硬盤(pán)上存放的靜態(tài)網(wǎng)頁(yè)赎离,更多的應(yīng)用需要根據(jù)用戶(hù)的請(qǐng)求動(dòng)態(tài)生成網(wǎng)頁(yè)信息逛犹,復(fù)雜的還需要從數(shù)據(jù)庫(kù)中提取信息,經(jīng)過(guò)一定的運(yùn)算梁剔,生成一個(gè)頁(yè)面返回給客戶(hù)
- 如何才能實(shí)現(xiàn)? 利用已經(jīng)實(shí)現(xiàn)HTTP協(xié)議的服務(wù)器端軟件虽画,這些軟件預(yù)先給我們留出了擴(kuò)展的接口,我們只需要按照一定的規(guī)則提供相應(yīng)的擴(kuò)展功能荣病,當(dāng)這類(lèi)web服務(wù)器接受到客戶(hù)端請(qǐng)求后码撰,判斷請(qǐng)求是否是訪(fǎng)問(wèn)我們提供的擴(kuò)展功能,如果是个盆,將請(qǐng)求交由我們編寫(xiě)的程序去處理脖岛,處理完成后,程序?qū)⑻幚斫Y(jié)果交回web服務(wù)器軟件颊亮,web服務(wù)器軟件拿到結(jié)果后柴梆,再將結(jié)果作為相應(yīng)信息返回給客戶(hù)端。
- 早起使用的web服務(wù)器擴(kuò)展機(jī)制是CGI终惑,它允許用戶(hù)調(diào)用web服務(wù)器上的CGI程序绍在,CGI全稱(chēng) Common Gateway Interface 公共網(wǎng)關(guān)接口,大多數(shù)的CGI程序使用Perl來(lái)編寫(xiě),也有通過(guò)C,Python或PHP編寫(xiě)偿渡,用戶(hù)通過(guò)單擊某個(gè)連接或者直接在瀏覽器的地址欄輸入U(xiǎn)RL來(lái)訪(fǎng)問(wèn)CGI程序臼寄,web服務(wù)器接受到請(qǐng)求后,發(fā)現(xiàn)這個(gè)請(qǐng)求是給CGI程序的溜宽,于是就啟動(dòng)并運(yùn)行這個(gè)CGI程序脯厨,對(duì)用于請(qǐng)求進(jìn)行處理。CGI程序解析請(qǐng)求中的CGI數(shù)據(jù)坑质,處理數(shù)據(jù),并且產(chǎn)生一個(gè)響應(yīng)临梗,這個(gè)響應(yīng)被返回給web服務(wù)器涡扼,web服務(wù)器包裝這個(gè)響應(yīng),以HTTP響應(yīng)的形式發(fā)送給Web瀏覽器盟庞。但是CGI編寫(xiě)困難吃沪,對(duì)用戶(hù)請(qǐng)求的響應(yīng)時(shí)間較長(zhǎng)以進(jìn)程方式運(yùn)行導(dǎo)致性能受限制。
2什猖、Web應(yīng)用歷史
1票彪、單機(jī)程序
軟件從附著于電腦硬件之日起,就在不斷的進(jìn)行著自我完善和演變不狮。從其使用模式的角度出發(fā)降铸,可以簡(jiǎn)單分為單機(jī)程序和網(wǎng)絡(luò)程序。發(fā)展到今時(shí)今日仍有大量的不依賴(lài)網(wǎng)絡(luò)的單機(jī)程序被我們使用摇零,如記事本推掸、Excel、PPT驻仅、ZIP壓縮等軟件都是大家熟知的裝機(jī)必備軟件
2谅畅、網(wǎng)絡(luò)程序
當(dāng)電腦越來(lái)越多的參與到日常生產(chǎn)生活中,單機(jī)程序已經(jīng)不能滿(mǎn)足企業(yè)的需要噪服。企業(yè)級(jí)應(yīng)用要求能夠最大程度的讓更多的客戶(hù)端參與到協(xié)同辦公之中毡泻,所以依賴(lài)于網(wǎng)絡(luò)的程序開(kāi)始大力發(fā)展起來(lái)。
2.1粘优、主機(jī)+終端模式
最早的網(wǎng)絡(luò)程序是基于主機(jī)+終端模式的仇味,也就是整個(gè)應(yīng)用中只有一臺(tái)大型主機(jī),各個(gè)操作地點(diǎn)都是使用一條專(zhuān)線(xiàn)與主機(jī)相連敬飒,終端不提供任何運(yùn)算和界面邪铲,類(lèi)似于Unix形式,所有的運(yùn)算和處理都由主機(jī)來(lái)完成无拗。主機(jī)一般處理能力非常強(qiáng)大带到,并且穩(wěn)定,主要機(jī)型都是由IBM這樣的大公司提供。
主機(jī)-終端模式
但上述模式中揽惹,主機(jī)的高昂的價(jià)格以及擴(kuò)展難被饿、維護(hù)費(fèi)用高等弊端并不是一般企業(yè)所能承受,所以除銀行搪搏、航空訂票狭握、證券等大企業(yè)在使用以外,大多數(shù)企業(yè)開(kāi)始轉(zhuǎn)投CS架構(gòu)的程序疯溺,即客戶(hù)端服務(wù)器架構(gòu)论颅。
2.2、C/S架構(gòu)
1囱嫩、說(shuō)明
CS架構(gòu)的發(fā)展過(guò)程經(jīng)歷了兩層CS架構(gòu)恃疯,三層CS架構(gòu)以及多層CS架構(gòu)的演變。
兩層的CS架構(gòu)是由客戶(hù)端和后面的數(shù)據(jù)庫(kù)組成的墨闲。數(shù)據(jù)庫(kù)用于存放數(shù)據(jù)今妄,并且使用數(shù)據(jù)庫(kù)編程語(yǔ)言編寫(xiě)業(yè)務(wù)邏輯,客戶(hù)端則使用VB鸳碧、VC盾鳞、Delphi這樣的可視化編程方便的語(yǔ)言來(lái)開(kāi)發(fā)客戶(hù)端的輸入輸出界面。用戶(hù)通過(guò)界面向服務(wù)器發(fā)送請(qǐng)求瞻离,服務(wù)器發(fā)回的數(shù)據(jù)則通過(guò)界面進(jìn)行顯示腾仅,服務(wù)器的角色就由數(shù)據(jù)庫(kù)來(lái)充當(dāng)。這樣做的好處就是開(kāi)發(fā)效率高琐脏,滿(mǎn)足企業(yè)需求攒砖。但是這種架構(gòu)存在著很大的弊端,第一是可移植性差日裙,如當(dāng)數(shù)據(jù)庫(kù)從SQL Server更換為Oracle時(shí)就必須將業(yè)務(wù)邏輯用新的語(yǔ)言再重新編寫(xiě)一遍吹艇;第二則是大型系統(tǒng)做不了,因?yàn)榭蛻?hù)端與數(shù)據(jù)庫(kù)需要建立持續(xù)的連接昂拂,而數(shù)據(jù)庫(kù)能夠支持的最大連接數(shù)是有限制的受神。所以在2000年這樣的架構(gòu)流行之后,慢慢的就開(kāi)始向三層CS架構(gòu)轉(zhuǎn)變格侯。
三層的CS架構(gòu)指的是客戶(hù)端+應(yīng)用服務(wù)器+數(shù)據(jù)庫(kù)鼻听,即將混合在數(shù)據(jù)庫(kù)端的業(yè)務(wù)邏輯從中分離出來(lái),放入到應(yīng)用服務(wù)器中联四,數(shù)據(jù)庫(kù)只負(fù)責(zé)數(shù)據(jù)的管理撑碴、存儲(chǔ)及檢索〕眨客戶(hù)端負(fù)責(zé)界面醉拓。三層之中的應(yīng)用服務(wù)器其實(shí)也是程序,類(lèi)似于前面講過(guò)的TCP、Socket編程亿卤,任何支持TCP編程的語(yǔ)言都可以作為應(yīng)用服務(wù)器愤兵。三層CS架構(gòu)的工作流程。C / S 三層架構(gòu)圖
用戶(hù)通過(guò)GUI(圖形用戶(hù)界面)進(jìn)行操作排吴,然后調(diào)用客戶(hù)端的通信模塊秆乳,通信模塊依據(jù)自定義協(xié)議將請(qǐng)求數(shù)據(jù)打包,通過(guò)網(wǎng)絡(luò)發(fā)送該請(qǐng)求钻哩,到達(dá)應(yīng)用服務(wù)器時(shí)屹堰,應(yīng)用服務(wù)器同樣也有一個(gè)通信模塊,將收到的數(shù)據(jù)包按照協(xié)議進(jìn)行拆包街氢,調(diào)用相應(yīng)的業(yè)務(wù)處理模塊双藕,處理數(shù)據(jù),其中可能需要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)來(lái)完成數(shù)據(jù)的獲取阳仔,將處理完的結(jié)果再次發(fā)送給通信模塊,通信模塊將結(jié)果按照自定義協(xié)議進(jìn)行打包扣泊,然后將數(shù)據(jù)包發(fā)送給客戶(hù)端的通信模塊近范,客戶(hù)端進(jìn)行拆包獲取響應(yīng)數(shù)據(jù),將結(jié)果顯示在界面上延蟹,更新界面上的數(shù)據(jù)顯示评矩。
這樣的程序結(jié)構(gòu)雖然在一定程度上降低了對(duì)數(shù)據(jù)庫(kù)編程的依賴(lài),并且能夠適應(yīng)大型的應(yīng)用程序阱飘,但數(shù)據(jù)通信模塊的增加卻提升了開(kāi)發(fā)的難度以及整體架構(gòu)的復(fù)雜度斥杜。
2、優(yōu)缺
優(yōu)點(diǎn)
- 能充分發(fā)揮客戶(hù)端PC的處理能力沥匈,很多工作可以在客戶(hù)端處理后再提交給服務(wù)器蔗喂,所以CS客戶(hù)端響應(yīng)速度快。
- 操作界面漂亮高帖、形式多樣缰儿,可以充分滿(mǎn)足客戶(hù)自身的個(gè)性化要求。
- C/S結(jié)構(gòu)的管理信息系統(tǒng)具有較強(qiáng)的事務(wù)處理能力散址,能實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)流程乖阵。
- 安全性能可以很容易保證,C/S一般面向相對(duì)固定的用戶(hù)群预麸,程序更加注重流程瞪浸,它可以對(duì)權(quán)限進(jìn)行多層次校驗(yàn),提供了更安全的存取模式吏祸,對(duì)信息安全的控制能力很強(qiáng)对蒲。一般高度機(jī)密的信息系統(tǒng)采用C/S結(jié)構(gòu)適宜。
缺點(diǎn) - 需要專(zhuān)門(mén)的客戶(hù)端安裝程序,分布功能弱齐蔽,針對(duì)點(diǎn)多面廣且不具備網(wǎng)絡(luò)條件的用戶(hù)群體两疚,不能夠?qū)崿F(xiàn)快速部署安裝和配置。
- 兼容性差含滴,對(duì)于不同的開(kāi)發(fā)工具诱渤,具有較大的局限性。若采用不同工具谈况,需要重新改寫(xiě)程序勺美。開(kāi)發(fā)、維護(hù)成本較高碑韵,需要具有一定專(zhuān)業(yè)水準(zhǔn)的技術(shù)人員才能完成赡茸,發(fā)生一次升級(jí),則所有客戶(hù)端的程序都需要改變祝闻。
- 用戶(hù)群固定占卧。由于程序需要安裝才可使用,因此不適合面向一些不可知的用戶(hù)联喘,所以適用面窄华蜒,通常用于局域網(wǎng)中
3、B/S架構(gòu)
1豁遭、說(shuō)明
為了降低三層CS架構(gòu)中與通信有關(guān)的復(fù)雜度叭喜,BS架構(gòu)開(kāi)始成為了網(wǎng)絡(luò)程序中一大重要的架構(gòu)類(lèi)型。
BS架構(gòu)即Browser + Web Server + DBB/S三層架構(gòu)圖
由于三層CS架構(gòu)中蓖谢,自定義協(xié)議提升了整體的復(fù)雜度捂蕴,那么就將自定義協(xié)議變成標(biāo)準(zhǔn)的HTTP協(xié)議。于是客戶(hù)端使用HTTP協(xié)議進(jìn)行數(shù)據(jù)打包拆包的程序即各廠(chǎng)商依據(jù)標(biāo)準(zhǔn)開(kāi)發(fā)的瀏覽器闪幽,Web服務(wù)器也是基于HTTP協(xié)議由一些廠(chǎng)商提供啥辨,如IIS,Apache等盯腌。這樣基于瀏覽器和服務(wù)器的架構(gòu)中委可,由于協(xié)議已被限定,所以與通信有關(guān)的數(shù)據(jù)打包拆包的過(guò)程都不用我們開(kāi)發(fā)人員來(lái)編寫(xiě)程序腊嗡,只需要考慮將HTTP協(xié)議解析出來(lái)的數(shù)據(jù)進(jìn)行業(yè)務(wù)處理着倾,以及將什么樣的結(jié)果提供給響應(yīng)即可。也就是開(kāi)發(fā)過(guò)程中只需要考慮7,8,9這三個(gè)步驟即可燕少。于是大大降低了網(wǎng)絡(luò)程序的開(kāi)發(fā)難度卡者,所以這種架構(gòu)得到了大量的應(yīng)用嚼蚀。
2梭域、優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 分布性強(qiáng)居灯,客戶(hù)端零維護(hù)。只要有網(wǎng)絡(luò)贫贝、瀏覽器犁享,可以隨時(shí)隨地進(jìn)行查詢(xún)澈驼、瀏覽等業(yè)務(wù)處理畏纲。
- 業(yè)務(wù)擴(kuò)展簡(jiǎn)單方便,通過(guò)增加網(wǎng)頁(yè)即可增加服務(wù)器功能盈厘。
- 維護(hù)簡(jiǎn)單方便睁枕,只需要改變網(wǎng)頁(yè),即可實(shí)現(xiàn)所有用戶(hù)的同步更新沸手。
- 開(kāi)發(fā)簡(jiǎn)單外遇,共用性強(qiáng)。
缺點(diǎn) - 個(gè)性化特點(diǎn)明顯降低契吉,無(wú)法實(shí)現(xiàn)具有個(gè)性化的功能要求跳仿。
- 在跨瀏覽器上,BS架構(gòu)不盡如人意捐晶。
- 客戶(hù)端服務(wù)器端的交互是請(qǐng)求-響應(yīng)模式菲语,通常動(dòng)態(tài)刷新頁(yè)面,響應(yīng)速度明顯降低(Ajax可以一定程度上解決這個(gè)問(wèn)題)
- 在速度和安全性上需要花費(fèi)巨大的設(shè)計(jì)成本惑灵。
- 功能弱化谨究,難以實(shí)現(xiàn)傳統(tǒng)模式下的特殊功能要求。
二泣棋、什么WEB應(yīng)用程序
- WEB應(yīng)用程序指供瀏覽器訪(fǎng)問(wèn)的程序,通常也簡(jiǎn)稱(chēng)為web應(yīng)用畔塔。例如有x.html 潭辈、x.html…..多個(gè)web資源,這多個(gè)web資源用于對(duì)外提供服務(wù)澈吨,此時(shí)應(yīng)把這多個(gè)web資源放在一個(gè)目錄中把敢,以組成一個(gè)web應(yīng)用程序
- 一個(gè)web應(yīng)用由多個(gè)靜態(tài)web資源和動(dòng)態(tài)web資源組成,如:html谅辣、css修赞、js文件,Jsp文件桑阶、java程序柏副、支持jar包、配置文件等等蚣录。
- Web應(yīng)用開(kāi)發(fā)好后割择,若想供外界訪(fǎng)問(wèn),需要把web應(yīng)用所在目錄交給web服務(wù)器管理
三萎河、WEB應(yīng)用程序的開(kāi)發(fā)
1荔泳、概要
Web應(yīng)用程序指供瀏覽器訪(fǎng)問(wèn)的程序蕉饼,通常也簡(jiǎn)稱(chēng)為web應(yīng)用
2、靜態(tài)web
- 定義
指web頁(yè)面中供人們?yōu)g覽的數(shù)據(jù)始終是不變,例如 .htm玛歌、.html昧港,這些是網(wǎng)頁(yè)的后綴,用戶(hù)直接訪(fǎng)問(wèn)這些文件就能看到內(nèi)容 -
流程示例圖
img - 缺點(diǎn)
1支子、Web頁(yè)面中的內(nèi)容無(wú)法動(dòng)態(tài)更新创肥,所有的用戶(hù)每時(shí)每刻看見(jiàn)的內(nèi)容和最終效果都是一樣的。
2译荞、靜態(tài)WEB無(wú)法連接數(shù)據(jù)庫(kù)瓤的,無(wú)法實(shí)現(xiàn)和用戶(hù)的交互 - 靜態(tài)WEB想達(dá)到動(dòng)態(tài)效果需要用到的技術(shù)
JavaScript(常用)
JScript
ScriptEase
VBScript
3、動(dòng)態(tài)web
- 定義
指web頁(yè)面中瀏覽的數(shù)據(jù)是由程序產(chǎn)生的吞歼,不同時(shí)間點(diǎn),不同地點(diǎn),不同人訪(fǎng)問(wèn)同一個(gè)web頁(yè)面看到的內(nèi)容和界面可能不一樣,而且動(dòng)態(tài)WEB具有交互性圈膏,WEB的頁(yè)面的內(nèi)容可以動(dòng)態(tài)更新 -
流程示意圖
img動(dòng)態(tài)WEB中,程序依然使用客戶(hù)端和服務(wù)端篙骡,客戶(hù)端依然使用瀏覽器(IE稽坤、FireFox等),通過(guò)網(wǎng)絡(luò)(Network)連接到服務(wù)器上糯俗,使用HTTP協(xié)議發(fā)起請(qǐng)求(Request)尿褪,現(xiàn)在的所有請(qǐng)求都先經(jīng)過(guò)一個(gè)WEB Server Plugin(服務(wù)器插件)來(lái)處理,此插件用于區(qū)分是請(qǐng)求的是靜態(tài)資源(.htm或者是.htm)還是動(dòng)態(tài)資源得湘。
如果WEB Server Plugin發(fā)現(xiàn)客戶(hù)端請(qǐng)求的是靜態(tài)資源(.htm或者是.html)杖玲,則將請(qǐng)求直接轉(zhuǎn)交給WEB服務(wù)器,之后WEB服務(wù)器從文件系統(tǒng)中取出內(nèi)容淘正,發(fā)送回客戶(hù)端瀏覽器進(jìn)行解析執(zhí)行摆马。
如果WEB Server Plugin發(fā)現(xiàn)客戶(hù)端請(qǐng)求的是動(dòng)態(tài)資源(.jsp、.asp/.aspx鸿吆、.php)囤采,則先將請(qǐng)求轉(zhuǎn)交給WEB Container(WEB容器),在WEB Container中連接數(shù)據(jù)庫(kù)惩淳,從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)等一系列操作后動(dòng)態(tài)拼湊頁(yè)面的展示內(nèi)容蕉毯,拼湊頁(yè)面的展示內(nèi)容后,把所有的展示內(nèi)容交給WEB服務(wù)器思犁,之后通過(guò)WEB服務(wù)器將內(nèi)容發(fā)送回客戶(hù)端瀏覽器進(jìn)行解析執(zhí)行
- 動(dòng)態(tài)web技術(shù)
- ASP
- PHP
- JSP
- template語(yǔ)法
四代虾、什么是WEB 服務(wù)器
1、概念
- 一臺(tái)負(fù)責(zé)提供網(wǎng)頁(yè)的電腦激蹲,主要是各種編程語(yǔ)言構(gòu)建而成的褐着,通過(guò)HTTP協(xié)議傳給客戶(hù)端。
- 一個(gè)提供網(wǎng)頁(yè)的服務(wù)器程序
- 服務(wù)器是一種被動(dòng)程序:只有當(dāng)Internet上運(yùn)行在其他計(jì)算機(jī)中的瀏覽器發(fā)出請(qǐng)求時(shí)托呕,服務(wù)器才會(huì)響應(yīng)
2含蓉、常見(jiàn)的WEB服務(wù)器
- Nginx服務(wù)器
Nginx(發(fā)音同engine x)是一個(gè) Web服務(wù)器频敛,也可以用作反向代理,負(fù)載平衡器和 HTTP緩存馅扣。該軟件由 Igor Sysoev 創(chuàng)建斟赚,并于2004年首次公開(kāi)發(fā)布。同名公司成立于2011年差油,以提供支持拗军。
Nginx 是免費(fèi)的開(kāi)源軟件,根據(jù)類(lèi)似 BSD許可證的條款發(fā)布蓄喇。大部分 Web服務(wù)器通常使用 NGINX 作為反向代理,負(fù)載均衡器发侵。 - Gunicorn
(從Ruby下面的Unicorn得到的啟發(fā))應(yīng)運(yùn)而生:依賴(lài)Nginx的代理行為,同Nginx進(jìn)行功能上的分離妆偏。由于不需要直接處理用戶(hù)來(lái)的請(qǐng)求(都被Nginx先處理)刃鳄,Gunicorn不需要完成相關(guān)的功能,其內(nèi)部邏輯非常簡(jiǎn)單:接受從Nginx來(lái)的動(dòng)態(tài)請(qǐng)求钱骂,處理完之后返回給Nginx叔锐,由后者返回給用戶(hù) - uwsgi
因?yàn)槭褂肅語(yǔ)言開(kāi)發(fā),會(huì)和底層接觸的更好见秽,配置也是比較方便愉烙,目前和gunicorn兩個(gè)算是部署時(shí)的唯二之選。 - Apache服務(wù)器
Apache HTTP Server(簡(jiǎn)稱(chēng)Apache)是Apache軟件基金會(huì)的一個(gè)開(kāi)放源代碼的網(wǎng)頁(yè)服務(wù)器軟件解取,可以在大多數(shù)電腦操作系統(tǒng)中運(yùn)行步责,由于其跨平臺(tái)和安全性被廣泛使用,是最流行的Web服務(wù)器軟件之一禀苦。它快速可靠蔓肯,并且可以通過(guò)簡(jiǎn)單API擴(kuò)充,將Python/Perl等解析器編譯到服務(wù)器中