Jsp和Servlet有什么區(qū)別?:Jsp是一種動態(tài)網(wǎng)頁開發(fā)技術(shù),它使用Jsp標簽在HTML網(wǎng)頁中插入Java代碼。標簽通常以lt;%開頭,以%gt;結(jié):-servlet,jsp,區(qū)別
Jsp是一種動態(tài)網(wǎng)頁開發(fā)技術(shù),它使用Jsp標簽在HTML網(wǎng)頁中插入Java代碼。標簽通常以<%開頭,以%>結(jié)束。Jsp標簽有多種功能,比如訪問數(shù)據(jù)庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網(wǎng)頁中傳遞控制信息和共享信息。Jsp本質(zhì)上是Servlet的一種簡易形式,Jsp經(jīng)編譯后就變成了Servlet,是Servlet的擴展。由于jvm只能識別Java類,不能識別Jsp代碼,Web容器會將Jsp的代碼編譯成jvm能夠識別的Java類,然后再由Servlet負責響應(yīng)用戶請求。
Servlet是一種服務(wù)器端的Java應(yīng)用程序,它運行于服務(wù)器的jvm中,由Web容器加載和管理,用于生成動態(tài)Web內(nèi)容,負責處理客戶端請求,能夠依靠服務(wù)器的支持向瀏覽器提供顯示內(nèi)容。在數(shù)通暢聯(lián)AEAI DP開發(fā)平臺的交互機制中,就是通過DispatchServlet來響應(yīng)瀏覽器上請求,再調(diào)用對應(yīng)Handler中的prepareDisplay方法,然后查詢對應(yīng)的信息放到PageBean中,最后將PageBean放到request中轉(zhuǎn)發(fā)到Jsp頁面來顯示結(jié)果集。
Servlet和Jsp的區(qū)別:
JSP是一種建立在Servlet規(guī)范功能之上的動態(tài)網(wǎng)頁技術(shù)。和ASP類似,它們都是在通常的網(wǎng)頁文件中嵌入腳本代碼,用于產(chǎn)生動態(tài)內(nèi)容,不過JSP文件中嵌入的是Java代碼和JSP標記。
JSP文件在用戶第一次請求時,會被編譯成Servlet,然后再由這個Servlet處理用戶的請求,所以JSP也可以看成是運行時的Servlet。既然JSP也是Servlet,那么我們?yōu)槭裁催要使用JSP呢?或者說JSP和Servlet的區(qū)別是什么呢?
? Servlet是Java對CGI的回應(yīng)。它們在服務(wù)器上執(zhí)行和解釋瀏覽器的請求,承擔客戶端和其他應(yīng)用程序之間的中間層的角色。Servlet主要是把動態(tài)的內(nèi)容混合到靜態(tài)的內(nèi)容中以產(chǎn)生HTML。
? JSP頁面在HTML元素中嵌入Java腳本代碼和JSP標記,使得文件長度變短,格式更加清晰。另一方面,JSP把靜態(tài)和動態(tài)的內(nèi)容分離開來,實現(xiàn)了內(nèi)容和表示的分離。
? 使用JSP,不需要單獨配置每一個文件,只要擴展名是.jsp,JSP容器(也是Servlet容器)就會自動識別,將其轉(zhuǎn)換為Servlet為客戶端服務(wù)。術(shù)語Web容器和JSP容器是同義的。
我們先來看一個簡單的JSP文件:
<html>
<head><title>Hello</title></head>
<body>
<%
out.println(\"Hello World!\");
%>
</body>
</html>
這個JSP頁面向客戶端輸出“Hello World!”。我們把這個頁面復(fù)制到%CATALINA_ HOME%\webapps\ROOT目錄下,啟動Tomcat,打開瀏覽器,在地址欄中輸入http://localhost: 8080/hello.jsp,看到“Hello World!”的輸出后,你可以轉(zhuǎn)到%CATALINA_HOME%\work\Catalina\localhost目錄,在ROOT\org\apache\jsp目錄下,可以看到兩個文件:“hello_jsp.java”和“hello_jsp.class”,這兩個文件就是在我們訪問hello.jsp文件時,由JSP容器生成的,整個過程如下圖所示。
JSP文件的指定過程
JSP容器管理JSP頁面生命周期的兩個階段:轉(zhuǎn)換階段(translation phase)和執(zhí)行階段(execution phase)。當有一個對JSP頁面的客戶請求到來時,JSP容器檢驗JSP頁面的語法是否正確,將JSP頁面轉(zhuǎn)換為Servlet源文件,然后調(diào)用javac工具類編譯Servlet源文件生成字節(jié)碼文件,這一階段是轉(zhuǎn)換階段。接下來,Servlet容器加載轉(zhuǎn)換后的Servlet類,實例化一個對象處理客戶端的請求,在請求處理完成后,響應(yīng)對象被JSP容器接收,容器將HTML格式的響應(yīng)信息發(fā)送到客戶端,這一階段是執(zhí)行階段。
從整個過程中我們可以知道,當?shù)谝淮渭虞dJSP頁面時,因為要將JSP文件轉(zhuǎn)換為Servlet類,所以響應(yīng)速度較慢。當再次請求時,JSP容器就會直接執(zhí)行第一次請求時產(chǎn)生的Servlet,而不會再重新轉(zhuǎn)換JSP文件,所以其執(zhí)行速度和原始的Servlet執(zhí)行速度幾乎就相同了。在JSP執(zhí)行期間,JSP容器會檢查JSP文件,看是否有更新或修改。如果有更新或修改,JSP容器會再次編譯JSP或Servlet;如果沒有更新或修改,就直接執(zhí)行前面產(chǎn)生的Servlet,這也是JSP相對于Servlet的好處之一。
JSP容器在后臺針對hello.jsp生成的Servlet源文件中有如下代碼:
public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase{...}
HttpJspBase類是Tomcat提供的實現(xiàn)了HttpJspPage接口的類,而HttpJspPage接口繼承自javax.servlet.jsp.JspPage接口(JSP 規(guī)范中定義,JSP頁面轉(zhuǎn)換后的Servlet類必須實現(xiàn)JspPage接口),JspPage接口又繼承自javax.servlet.Servlet接口。
結(jié)論:JSP本質(zhì)上還是Servlet。
jsp編譯后形成servlet類,本質(zhì)上它還是servlet。由于servlet在做頁面展示需要將html信息作為輸出信息,維護成本太高,開發(fā)難度很大,美工和程序員很難配合,因此產(chǎn)生了jsp技術(shù)。jsp主要是在html中嵌入java代碼,這使得美工和程序員可以有效的配合。但是jsp還是難以拜托維護難度高弊病,且缺乏面向?qū)ο蟮木幊趟枷搿?/p>
一天中什么時候運動減肥效果好抓 小孩能不能練啞鈴多大的孩子適合 小孩嘴唇起皮怎么辦怎樣才能預(yù)防 孩子的羅圈腿是怎么形成的三大因 孩子早戀怎么辦如何有效疏導(dǎo)孩子 醫(yī)生婆婆稱自己專業(yè)孩子的事必須 兒子成人禮送什么禮物好呢給你孩 有孩子的夫妻千萬不要離婚對于孩 小孩千萬別讓老人帶的說法正確嗎 自卑缺乏安全感的孩子怎么改善 怎么讓孩子開口說話 這幾個方法 怎么讓孩子吃飯 教你如何讓孩子 怎么管教不聽話的孩子 家長首先 頑皮的孩子怎么管教的 這些方法 叛逆期的孩子怎么管教 引導(dǎo)孩子 孩子性格軟弱怎么辦 懦弱的性格 孩子性格偏激怎么辦 孩子性格偏 孩子性格固執(zhí)怎么辦 家長們不妨 愛惹事的孩子怎么管教 不妨試試 養(yǎng)育優(yōu)秀的孩子具備特征,家長要 高考數(shù)學(xué)難出新天際,可有的孩子 “做胎教”和“不做胎教”的孩子 花費十幾萬只考了302分 媽媽覺得 甘肅作弊考生留下來的疑團,是怎 一舉奪魁!高三學(xué)生離校時,校領(lǐng) 高考釘子戶:26次參加高考,今年 D2809次列車因泥石流脫線!此類 “女兒16歲,學(xué)校宿舍里分娩了” 扭曲邪門的內(nèi)容,頻頻出現(xiàn)在教科 川渝地區(qū)幾所大學(xué)實力很牛!四川