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