jsp和servlet的區(qū)別和聯(lián)系:
1.jsp經(jīng)編譯后就變成了Servlet.(JSP的本質(zhì)就是Servlet,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類)
2.jsp更擅長表現(xiàn)于頁面顯示,servlet更擅長于邏輯控制.
3.Servlet中沒有內(nèi)置對象,Jsp中的內(nèi)置對象都是必須通過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到.Jsp是Servlet的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內(nèi)容,Jsp中的Java腳本如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service方法用于生成對客戶端的響應(yīng)。聯(lián)系: JSP是Servlet技術(shù)的擴展,本質(zhì)上就是Servlet的簡易方式。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點在于:Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯Servlet更多的是類似于一個Controller,用來做控制。
理解以下三點即可:
1、不同之處在哪?
Servlet在Java代碼中通過HttpServletResponse對象動態(tài)輸出HTML內(nèi)容
JSP在靜態(tài)HTML內(nèi)容中嵌入Java代碼,Java代碼被動態(tài)執(zhí)行后生成HTML內(nèi)容
2、各自的特點
Servlet能夠很好地組織業(yè)務(wù)邏輯代碼,但是在Java源文件中通過字符串拼接的方式生成動態(tài)HTML內(nèi)容會導致代碼維護困難、可讀性差
JSP雖然規(guī)避了Servlet在生成HTML內(nèi)容方面的劣勢,但是在HTML中混入大量、復雜的業(yè)務(wù)邏輯同樣也是不可取的
3、通過MVC雙劍合璧
既然JSP和Servlet都有自身的適用環(huán)境,那么能否揚長避短,讓它們發(fā)揮各自的優(yōu)勢呢?答案是肯定的——MVC(Model-View-Controller)模式非常適合解決這一問題。
MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller):
Controller——負責轉(zhuǎn)發(fā)請求,對請求進行處理
View——負責界面顯示
Model——業(yè)務(wù)功能編寫(例如算法實現(xiàn))、數(shù)據(jù)庫設(shè)計以及數(shù)據(jù)存取操作實現(xiàn)
在JSP/Servlet開發(fā)的軟件系統(tǒng)中,這三個部分的描述如下所示:
Web瀏覽器發(fā)送HTTP請求到服務(wù)端,被Controller(Servlet)獲取并進行處理(例如參數(shù)解析、請求轉(zhuǎn)發(fā))
Controller(Servlet)調(diào)用核心業(yè)務(wù)邏輯——Model部分,獲得結(jié)果
Controller(Servlet)將邏輯處理結(jié)果交給View(JSP),動態(tài)輸出HTML內(nèi)容
動態(tài)生成的HTML內(nèi)容返回到瀏覽器顯示
MVC模式在Web開發(fā)中的好處是非常明顯,它規(guī)避了JSP與Servlet各自的短板,Servlet只負責業(yè)務(wù)邏輯而不會通過out.append()動態(tài)生成HTML代碼;JSP中也不會充斥著大量的業(yè)務(wù)代碼。這大大提高了代碼的可讀性和可維護性。