1、什么是jsp,什么是Servlet?jsp 和Servlet 有什么區(qū)別?
jsp本質(zhì)上就是一個Servlet,它是Servlet的一種特殊形式(由SUN公司推出),每個jsp頁面都是一個servlet實例。Servlet是由Java提供用于開發(fā)web服務(wù)器應(yīng)用程序的一個組件,運行在服務(wù)端,由servlet容器管理,用來生成動態(tài)內(nèi)容。一個servlet實例是實現(xiàn)了特殊接口Servlet的Java類,所有自定義的servlet均必須實現(xiàn)Servlet接口。
● 區(qū)別:
jsp是html頁面中內(nèi)嵌的Java代碼,側(cè)重頁面顯示;
Servlet是html代碼和Java代碼分離,側(cè)重邏輯控制,mvc設(shè)計思想中jsp位于視圖層,servlet位于控制層
jsp運行機制:如下圖
JVM只能識別Java類,并不能識別jsp代碼!web容器收到以.jsp為擴展名的url請求時,會將訪問請求交給tomcat中jsp引擎處理,每個jsp頁面第一次被訪問時,jsp引擎將jsp代碼解釋為一個servlet源程序,接著編譯servlet源程序生成.class文件,再有web容器servlet引擎去裝載執(zhí)行servlet程序,實現(xiàn)頁面交互。
四大域?qū)ο螅?/span>
● pageContext page域-指當(dāng)前頁面,在當(dāng)前jsp頁面有效,跳到其它頁面失效。
● requestrequest域-指一次請求范圍內(nèi)有效,從http請求到服務(wù)器處理結(jié)束,返回響應(yīng)的整個過程。在這個過程中使用forward(請求轉(zhuǎn)發(fā))方式跳轉(zhuǎn)多個jsp,在這些頁面里你都可以使用這個變量。
● sessionsession域-指當(dāng)前會話有效范圍,瀏覽器從打開到關(guān)閉過程中,轉(zhuǎn)發(fā)、重定向均可以使用。
● applicationcontext域-指只能在同一個web中使用,服務(wù)器未關(guān)閉或者重啟,數(shù)據(jù)就有效。
xml是一種可擴展性標(biāo)記語言,支持自定義標(biāo)簽(使用前必須預(yù)定義)使用DTD和XMLSchema標(biāo)準(zhǔn)化XML結(jié)構(gòu)。
優(yōu)點:用于配置文件,格式統(tǒng)一,符合標(biāo)準(zhǔn);用于在互不兼容的系統(tǒng)間交互數(shù)據(jù),共享數(shù)據(jù)方便;
缺點:xml文件格式復(fù)雜,數(shù)據(jù)傳輸占流量,服務(wù)端和客戶端解析xml文件占用大量資源且不易維護(hù)
xml常用解析器有2種,分別是:DOM和SAX。主要區(qū)別在于它們解析xml文檔的方式不同。使用DOM解析,xml文檔以DOM樹形結(jié)構(gòu)加載入內(nèi)存,而SAX采用的是事件模型。
Ajax是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的的網(wǎng)頁開發(fā)技術(shù);AsynchronousJavaScriptandXML的縮寫。
Ajax的優(yōu)勢:通過異步模式,提升了用戶體驗。優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用。Ajax引擎在客戶端運行,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作,從而減少了大用戶量下的服務(wù)器負(fù)載。
Ajax的最大特點:可以實現(xiàn)局部刷新,在不更新整個頁面的前提下維護(hù)數(shù)據(jù),提升用戶體驗度。
JavaScript是一種在Web開發(fā)中經(jīng)常使用的前端動態(tài)腳本技術(shù)。在JavaScript中,有一個很重要的安全性限制,被稱為“Same-OriginPolicy”(同源策略)。這一策略對于JavaScript代碼能夠訪問的頁面內(nèi)容做了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內(nèi)容。
JavaScript這個安全策略在進(jìn)行多iframe或多窗口編程、以及Ajax編程時顯得尤為重要。根據(jù)這個策略,在baidu.com下的頁面中包含的JavaScript代碼,不能訪問在google.com域名下的頁面內(nèi)容;甚至不同的子域名之間的頁面也不能通過JavaScript代碼互相訪問。對于Ajax的影響在于,通過XMLHttpRequest實現(xiàn)的Ajax請求,不能向不同的域提交請求,例如,在abc.example.com下的頁面,不能向def.example.com提交Ajax請求,等等。然而,當(dāng)進(jìn)行一些比較深入的前端編程的時候,不可避免地需要進(jìn)行跨域操作,這時候“同源策略”就顯得過于苛刻。JSONP跨域GET請求是一個常用的解決方案,下面我們來看一下JSONP跨域是如何實現(xiàn)的,并且探討下JSONP跨域的原理。jsonp的最基本的原理是:動態(tài)添加一個<script>標(biāo)簽,使用script標(biāo)簽的src屬性沒有跨域的限制特點。首先在客戶端注冊一個callback,然后把callback的名字傳給服務(wù)器。此時,服務(wù)器先生成json數(shù)據(jù)。然后以javascript語法的方式,生成一個function,function名字就是傳遞上來的參數(shù)jsonp。最后將json數(shù)據(jù)直接以入?yún)⒌姆绞剑胖玫絝unction中,這樣就生成了一段js語法的文檔,返回給客戶端。客戶端瀏覽器,解析script標(biāo)簽,并執(zhí)行返回的javascript文檔,此時數(shù)據(jù)作為參數(shù),傳入到了客戶端預(yù)先定義好的callback函數(shù)里。