JSP全名為Java Server Pages,百科上介紹它根本上是一個(gè)簡(jiǎn)化的Servlet設(shè)計(jì)。Servlet(Server Applet)是Java Servlet的簡(jiǎn)稱,稱為小服務(wù)程序或服務(wù)連接器。Servlet 的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài) Web 內(nèi)容。這個(gè)過(guò)程為:
- 客戶端發(fā)送請(qǐng)求至服務(wù)器端;
- 服務(wù)器將請(qǐng)求信息發(fā)送至 Servlet;
- Servlet 生成響應(yīng)內(nèi)容(如HTML)并將其傳給服務(wù)器;
- 服務(wù)器將響應(yīng)返回給客戶端。
我在網(wǎng)上看了一些資料后,覺(jué)得在討論MVC與JSP的異同之前,先討論Servlet和JSP的異同更好理解。
Servlet和JSP
JSP既然是是一個(gè)簡(jiǎn)化的Servlet設(shè)計(jì),它和Servlet一樣是用于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài) Web 內(nèi)容。那么二者的不同之處呢。
不同
- Servlet在Java代碼中通過(guò)HttpServletResponse對(duì)象動(dòng)態(tài)輸出HTML內(nèi)容
- JSP在靜態(tài)HTML內(nèi)容中嵌入Java代碼,Java代碼被動(dòng)態(tài)執(zhí)行后生成HTML內(nèi)容
二者各有優(yōu)缺點(diǎn),Servlet是在Java中通過(guò)比如字符串拼接的方式生成HTML代碼(我們?cè)谒嘉钟霸褐芯陀眠@種方法修改的HTML),這樣雖然可以很好的生成業(yè)務(wù)邏輯代碼,但是它的HTML代碼卻也因此而可讀性低,維護(hù)困難。而JSP通過(guò)在HTML中嵌入Java代碼規(guī)避了這一點(diǎn),但是卻在HTML中混入了大量的業(yè)務(wù)代碼,同樣造成了維護(hù)困難。
對(duì)于這兩者的缺點(diǎn),我還有一點(diǎn)理解:很多的程序員可能美工能力不太好,這樣使用Servlet的話,在設(shè)計(jì)出美觀的UI方面可能就會(huì)有難度;而JSP的模式,在HTML中混入大量的業(yè)務(wù)邏輯代碼,又造成了前端工程師的負(fù)擔(dān)。
MVC
我們可以看出,Selvlet和JSP的優(yōu)缺點(diǎn)是互補(bǔ)的,那么為什么不找一種【互補(bǔ)】的更好的模式呢。這種模式就是MVC.
MVC的名字即就是它的三個(gè)基本部分:Model-View-Controller

其中
- Controller——負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理
- View——負(fù)責(zé)界面顯示
- Model——業(yè)務(wù)功能編寫(xiě)(例如算法實(shí)現(xiàn))、數(shù)據(jù)庫(kù)設(shè)計(jì)以及數(shù)據(jù)存取操作實(shí)現(xiàn)
結(jié)構(gòu)分工很清楚,從我自己的經(jīng)歷就可以很切實(shí)地體會(huì)到MVC的優(yōu)點(diǎn)。我在剛開(kāi)始寫(xiě)代碼的時(shí)候,總是把代碼寫(xiě)在一個(gè)文件里,后來(lái)項(xiàng)目慢慢變復(fù)雜一些,我也總是把很多的業(yè)務(wù)邏輯集中在一兩個(gè)文件里,或者分了好幾個(gè)文件,卻分得很亂。后來(lái)經(jīng)過(guò)項(xiàng)目規(guī)范,開(kāi)始按照規(guī)范,也即按照代碼的分工,來(lái)分包分文件寫(xiě)代碼,代碼的可讀性可維護(hù)性都大大提高,其實(shí)代碼的具體實(shí)現(xiàn)是差不多的,但按照規(guī)范分塊后的代碼時(shí)絕對(duì)比之前的要好的。
下面就通過(guò)MVC中三個(gè)模塊的具題工作流程來(lái)感受下MVC時(shí)怎樣結(jié)合了Servlet和JSP的優(yōu)點(diǎn)的。
- 客戶端發(fā)送請(qǐng)求后,Controller獲取請(qǐng)求,解析請(qǐng)求后調(diào)用相應(yīng)的Model
- 業(yè)務(wù)邏輯Model產(chǎn)生相應(yīng)的邏輯結(jié)果,并交給Controller
- Controller將邏輯結(jié)果交給View,View動(dòng)態(tài)生成HTML
- HTML返回給客戶端顯示
可見(jiàn),MVC將業(yè)務(wù)邏輯和HTML分開(kāi),既能很好的組織業(yè)務(wù)邏輯,又能生成高可讀性的HTML,HTML中也不會(huì)混入大量的業(yè)務(wù)邏輯。Controller和Model吸收的了Serlvet的優(yōu)點(diǎn),而View就吸收了JSP的優(yōu)點(diǎn),自然地也克服了他們各自的缺點(diǎn)。