我們可以將 JSP 看作 Java Servlet 的一種擴(kuò)展,在使用時(shí) JSP 必須被編譯為 Servlet,也就是 Java 類,然后才能調(diào)用執(zhí)行,Servlet 所產(chǎn)生的 Web 頁(yè)面不能包含在 HTML 標(biāo)簽中。JSP 的應(yīng)用特點(diǎn)如下。
1. 實(shí)現(xiàn)跨平臺(tái)操作
JSP 技術(shù)的最大特點(diǎn)是其編寫(xiě)的代碼與設(shè)計(jì)平臺(tái)完全無(wú)關(guān),用戶可以將在任何平臺(tái)上編寫(xiě)的 JSP 頁(yè)面拿來(lái)在任何 Web 服務(wù)器或 Web 應(yīng)用服務(wù)器上運(yùn)行,然后通過(guò)任何 Web 瀏覽器訪問(wèn)。
除此之外,JSP 還可以在任何平臺(tái)上建立服務(wù)器組件,在任何服務(wù)器上運(yùn)行程序。從 JSP 的這個(gè)特點(diǎn)可以看出,應(yīng)用程序開(kāi)發(fā)者只要在自己選用的任意平臺(tái)上編寫(xiě) Web 頁(yè)面,就可以將編寫(xiě)好的頁(yè)面放在任意服務(wù)器上運(yùn)行,當(dāng)需要對(duì)頁(yè)面進(jìn)行修改時(shí),也無(wú)須考慮開(kāi)發(fā)運(yùn)行平臺(tái)。
JSP 頁(yè)面的內(nèi)置腳本語(yǔ)言是基于 Java 編程語(yǔ)言的,因此,JSP 頁(yè)面都要被編譯為 Servlet。
2. 可重復(fù)使用組件
JSP 頁(yè)面依賴于可重用的、跨平臺(tái)的組件來(lái)執(zhí)行應(yīng)用程序中所要求的更為復(fù)雜的處理。基于組件的方法的特點(diǎn)是:能夠提高總體開(kāi)發(fā)過(guò)程的效率,使得各種組織在他們現(xiàn)有優(yōu)點(diǎn)的基礎(chǔ)上得到更好的優(yōu)化處理。
開(kāi)發(fā)人員能夠共享并且交換執(zhí)行普通操作的組件,這些組件除了可以將網(wǎng)頁(yè)的設(shè)計(jì)與邏輯程序的設(shè)計(jì)分離以節(jié)約開(kāi)發(fā)時(shí)間,還可以充分利用 Java 以及其他腳本語(yǔ)言的跨平臺(tái)的能力及其靈活性。
3. 標(biāo)記簡(jiǎn)化的語(yǔ)言
標(biāo)準(zhǔn)的 JSP 標(biāo)記可以訪問(wèn)和實(shí)例化JavaBean組件,并且可以設(shè)置或檢索組件屬性,以及下載Applet,執(zhí)行用其他方法更難以編碼和耗時(shí)的功能。
JSP技術(shù)可以將許多功能封裝起 來(lái),在進(jìn)行Web頁(yè)面開(kāi)發(fā)時(shí),利用這些封裝的功能就可以方便地使用與JSP相關(guān)的XML 標(biāo)記進(jìn)行動(dòng)態(tài)內(nèi)容的生成。
4. 實(shí)現(xiàn)應(yīng)用程序與頁(yè)面顯示的分離化
應(yīng)用程序與頁(yè)面顯示的分離化可以使 Web 頁(yè)面的設(shè)計(jì)者和管理人員能夠互不影響地編輯和使用 JSP 頁(yè)面,而不影響其內(nèi)容的生成。
Web 頁(yè)面的開(kāi)發(fā)人員可以利用 HTML 或 XML 標(biāo)記來(lái)設(shè)計(jì)和格式化最終頁(yè)面,而利用 JSP 標(biāo)記或 Scriptlet 來(lái)生成頁(yè)面上的動(dòng)態(tài)內(nèi)容。生成的內(nèi)容被封裝在標(biāo)記和 JavaBean 組件中,并將它們捆綁在 Scriptlet中,使得所有的腳本程序都運(yùn)行在服務(wù)器端。
通常,在服務(wù)器端由 JSP 引擎解釋 JSP 標(biāo)記和 Scriptlet,生成所請(qǐng)求的內(nèi)容,同時(shí),將結(jié)果以 HTML 或者 XML 頁(yè)面的形式發(fā)送回瀏覽器。這樣做,不但可以對(duì)程序代碼進(jìn)行保密,又可以保證任何基于 HTML 的 Web 瀏覽器的跨平臺(tái)使用。
與 Servlet 相比,JSP 可以提供所有 Servlet 的功能,比使用 println 編寫(xiě)和修改 HTML 更方便。
提示:
JSP 還可以更明確地進(jìn)行分工,Web 頁(yè)面的設(shè)計(jì)人員編寫(xiě) HTML 時(shí),只需要留出地方讓 Servlet 程序員插入動(dòng)態(tài)部分就可以了。
在編寫(xiě) JSP 程序時(shí),要了解它的執(zhí)行順序,JSP 的執(zhí)行流程如圖 1 所示。首先,客戶端向 Web 服務(wù)器提出請(qǐng)求,然后 JSP 引擎負(fù)責(zé)將頁(yè)面轉(zhuǎn)化為 Servlet,此 Servlet 經(jīng)過(guò)虛擬機(jī)編譯生成類文件,然后再把類文件加載到內(nèi)存中執(zhí)行。最后,由服務(wù)器將處理結(jié)果返回給客戶端。
圖1 JSP的執(zhí)行流程
提示:
JSP 頁(yè)面代碼會(huì)被編譯成 Servlet 代碼,執(zhí)行效率沒(méi)有 Servlet 快,但并不是每一次都需要編譯 JSP 頁(yè)面。當(dāng) JSP 第一次被編譯成類文件后,重復(fù)調(diào)用該 JSP 頁(yè)面時(shí),若 JSP 引擎發(fā)現(xiàn)該 JSP 頁(yè)面沒(méi)有被改動(dòng)過(guò),那么會(huì)直接使用編譯后的類文件而不會(huì)再次編譯成新的 Servlet。當(dāng)然,如果頁(yè)面被修改后,則需要重新加載和編譯。