網(wǎng)絡(luò)服務(wù)器需要一個(gè) JSP 引擎,也就是一個(gè)容器來(lái)處理 JSP 頁(yè)面。容器負(fù)責(zé)截獲對(duì) JSP 頁(yè)面的請(qǐng)求。本教程使用內(nèi)嵌 JSP 容器的 Apache 來(lái)支持 JSP 開發(fā)。
JSP 容器與 Web 服務(wù)器協(xié)同合作,為JSP的正常運(yùn)行提供必要的運(yùn)行環(huán)境和其他服務(wù),并且能夠正確識(shí)別專屬于 JSP 網(wǎng)頁(yè)的特殊元素。
下圖顯示了 JSP 容器和 JSP 文件在 Web 應(yīng)用中所處的位置。
以下步驟表明了 Web 服務(wù)器是如何使用JSP來(lái)創(chuàng)建網(wǎng)頁(yè)的:
就像其他普通的網(wǎng)頁(yè)一樣,您的瀏覽器發(fā)送一個(gè) HTTP 請(qǐng)求給服務(wù)器。
Web 服務(wù)器識(shí)別出這是一個(gè)對(duì) JSP 網(wǎng)頁(yè)的請(qǐng)求,并且將該請(qǐng)求傳遞給 JSP 引擎。通過使用 URL或者 .jsp 文件來(lái)完成。
JSP 引擎從磁盤中載入 JSP 文件,然后將它們轉(zhuǎn)化為 Servlet。這種轉(zhuǎn)化只是簡(jiǎn)單地將所有模板文本改用 println() 語(yǔ)句,并且將所有的 JSP 元素轉(zhuǎn)化成 Java 代碼。
JSP 引擎將 Servlet 編譯成可執(zhí)行類,并且將原始請(qǐng)求傳遞給 Servlet 引擎。
Web 服務(wù)器的某組件將會(huì)調(diào)用 Servlet 引擎,然后載入并執(zhí)行 Servlet 類。在執(zhí)行過程中,Servlet 產(chǎn)生 HTML 格式的輸出并將其內(nèi)嵌于 HTTP response 中上交給 Web 服務(wù)器。
Web 服務(wù)器以靜態(tài) HTML 網(wǎng)頁(yè)的形式將 HTTP response 返回到您的瀏覽器中。
最終,Web 瀏覽器處理 HTTP response 中動(dòng)態(tài)產(chǎn)生的HTML網(wǎng)頁(yè),就好像在處理靜態(tài)網(wǎng)頁(yè)一樣。
以上提及到的步驟可以用下圖來(lái)表示:
一般情況下,JSP 引擎會(huì)檢查 JSP 文件對(duì)應(yīng)的 Servlet 是否已經(jīng)存在,并且檢查 JSP 文件的修改日期是否早于 Servlet。如果 JSP 文件的修改日期早于對(duì)應(yīng)的 Servlet,那么容器就可以確定 JSP 文件沒有被修改過并且 Servlet 有效。這使得整個(gè)流程與其他腳本語(yǔ)言(比如 PHP)相比要高效快捷一些。
總的來(lái)說(shuō),JSP 網(wǎng)頁(yè)就是用另一種方式來(lái)編寫 Servlet 而不用成為 Java 編程高手。除了解釋階段外,JSP 網(wǎng)頁(yè)幾乎可以被當(dāng)成一個(gè)普通的 Servlet 來(lái)對(duì)待。