1.基礎(chǔ)技術(shù)
Web應(yīng)用的簡(jiǎn)易流程:瀏覽器向Web服務(wù)器請(qǐng)求,Web應(yīng)用根據(jù)請(qǐng)求信息進(jìn)行業(yè)務(wù)邏輯處理,如果需要查詢(xún)數(shù)據(jù),則與數(shù)據(jù)庫(kù)交互即可;然后把結(jié)果返回給用戶(hù)的瀏覽器;最后瀏覽器將頁(yè)面渲染并呈現(xiàn)出來(lái)。如下圖所示:
Web服務(wù)器介于操作系統(tǒng)和Web應(yīng)用之間,通常被稱(chēng)為中間件,比較流行的有IIS、Apache、Tomcat、JBoss、WebSphere、WebLogic等等。這里討論的Web后端技術(shù)僅涉及到Web應(yīng)用。下面我們來(lái)看看其發(fā)展歷程:
最早使用CGI(Common Gateway Interface,通用網(wǎng)關(guān)接口),可惜我完美地錯(cuò)過(guò)了。據(jù)說(shuō)在這個(gè)時(shí)代,可以使用C、Perl等語(yǔ)言,通過(guò)printf將希望返回的HTML內(nèi)容一行一行地寫(xiě)出來(lái)。這種方法費(fèi)時(shí)費(fèi)力,可讀性很差。后來(lái)PHP語(yǔ)言出現(xiàn)了,PHP可以將動(dòng)態(tài)內(nèi)容嵌入到HTML中執(zhí)行,可惜我只是看過(guò)PHP代碼,沒(méi)有實(shí)際編程。再后來(lái)微軟提出的ASP和Sun提出的JSP,我很榮幸地開(kāi)始使用ASP和JSP編程了,我們可以先看下JSP的廬山真面目:
可以看出,JSP將Java代碼嵌入到HTML頁(yè)面中,并用<%= %>標(biāo)識(shí)。我們將包含這個(gè)代碼的文件放入到Tomcat(Web容器的一種),然后就可以運(yùn)行了。
雖然ASP、JSP等提高了應(yīng)用開(kāi)發(fā)效率,但對(duì)一個(gè)復(fù)雜的大型Web應(yīng)用來(lái)說(shuō),頁(yè)面顯示和邏輯代碼混雜在一起,可讀性慢慢地就變差了。此時(shí),引入了MVC(Model-View-Controller,模型-視圖-控制器)架構(gòu),其中,模型的職責(zé)是:封裝與業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)和數(shù)據(jù)處理方法;視圖的職責(zé)是數(shù)據(jù)的展示;控制器的職現(xiàn)是:根據(jù)請(qǐng)求信息,路由至模型,并將響應(yīng)消息定位到視圖。Java針對(duì)Web應(yīng)用制定Servlet規(guī)范:把Web應(yīng)用程序定義為“Servlet、HTML頁(yè)面、類(lèi)以及其他資源的集合”,并將Servlet將HTTP公開(kāi)給Java,如下圖所示:
Servlet規(guī)范存在一些沒(méi)有解決的問(wèn)題:
l Web應(yīng)用程序處理請(qǐng)求時(shí)要解決的日常任務(wù):
l 呈現(xiàn)表示層(HTML);
l 請(qǐng)求參數(shù)到Java類(lèi)型的數(shù)據(jù)綁定;
l 驗(yàn)證數(shù)據(jù);
l 業(yè)務(wù)邏輯的組織;
l 訪(fǎng)問(wèn)數(shù)據(jù)層。
這些問(wèn)題在Web應(yīng)用編程中被看作是公共通用問(wèn)題,“不重復(fù)發(fā)明輪子”是軟件開(kāi)發(fā)工程領(lǐng)域中提高軟件生產(chǎn)效率的重要思想。于是,產(chǎn)生了很多諸如Struct、Spring、MyBatis等等框架(后端使用不同的語(yǔ)言,分別對(duì)應(yīng)不同的框架,這里以Java為例)。到這里,Web后端的基礎(chǔ)畫(huà)像如圖所示:
2.基本原理
我們以Java語(yǔ)言生態(tài)為例來(lái)說(shuō)明Web后端的簡(jiǎn)要處理過(guò)程。如下圖所示:
請(qǐng)求到達(dá)Socket后,Tomcat將啟動(dòng)Servlet并將請(qǐng)求的IP地址、請(qǐng)求參數(shù)傳給Servlet對(duì)象,然后根據(jù)URL地址匹配Servlet處理類(lèi),并映射到對(duì)應(yīng)的處理方法。請(qǐng)求進(jìn)入處理方法之后,如果是需要將數(shù)據(jù)保存在數(shù)據(jù)庫(kù),則通過(guò)JDBC連接數(shù)據(jù),將數(shù)據(jù)存入到數(shù)據(jù)庫(kù)中;如果需要提取數(shù)據(jù)并傳到頁(yè)面,該方法也會(huì)從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),經(jīng)過(guò)反序列化處理,生成Java對(duì)象,并將其序列化送到瀏覽器去渲染并展示。
-
Web
+關(guān)注
關(guān)注
2文章
1266瀏覽量
69572 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3841瀏覽量
64545 -
瀏覽器
+關(guān)注
關(guān)注
1文章
1032瀏覽量
35427
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論