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