鍍金池/ 教程/ Java/ JSP - 體系結(jié)構(gòu)
JSP - 異常處理
JSP - 標(biāo)準(zhǔn)標(biāo)簽庫(kù)
JSP - 操作
JSP - 語(yǔ)法
JSP - 概述
JSP - 過(guò)濾器
JSP - 文件上傳
JSP - 指令
JSP - 訪問(wèn)數(shù)據(jù)庫(kù)
JSP - 國(guó)際化
JSP - 隱式對(duì)象
JSP - 面試問(wèn)題
JSP - 體系結(jié)構(gòu)
JSP - 發(fā)送電子郵件
JSP - 客戶端請(qǐng)求
JSP - 服務(wù)器響應(yīng)
JSP - 表達(dá)式語(yǔ)言
JSP - 自定義標(biāo)簽
JSP - HTTP 狀態(tài)碼
JSP - 調(diào)試
JSP - XML 數(shù)據(jù)
JSP - 有用的資源
JSP - 處理日期
JSP - 生命周期
JSP - 會(huì)話跟蹤
JSP - JavaBeans
JSP - 自動(dòng)刷新
JSP - 頁(yè)面重定向
JSP - 點(diǎn)擊計(jì)數(shù)器
JSP - 安全性
JSP - Cookies 處理
JSP - 環(huán)境配置
JSP - 表單處理

JSP - 體系結(jié)構(gòu)

Web 服務(wù)器需要一個(gè) JSP 引擎,即處理 JSP 頁(yè)面的容器。JSP 容器負(fù)責(zé)為 JSP 頁(yè)面攔截請(qǐng)求。本教程使用了 Apache,Apache 已經(jīng)內(nèi)置了 JSP 容器來(lái)支持 JSP 頁(yè)面開(kāi)發(fā)。

JSP 容器適用于 Web 服務(wù)器,來(lái)提供 JSP 運(yùn)行時(shí)環(huán)境和其他服務(wù)的需求。它知道如何理解 JSP 的部分特殊元素。

以下圖表顯示了 JSP 容器的位置以及在一個(gè) Web 應(yīng)用程序中的 JSP 文件。

http://wiki.jikexueyuan.com/project/jsp/images/arch1.jpg" alt="arch1" />

JSP 處理

下面的步驟解釋了 web 服務(wù)器如何使用 JSP 創(chuàng)建 web 頁(yè)面:

  • 作為正常的頁(yè)面,你的瀏覽器發(fā)送一個(gè) HTTP 請(qǐng)求到 web 服務(wù)器。

  • web 服務(wù)器承認(rèn)一個(gè) JSP 頁(yè)面的 HTTP 請(qǐng)求,并將其轉(zhuǎn)發(fā)給一個(gè) JSP 引擎。這是通過(guò)使用 URL 或 JSP 頁(yè)面實(shí)現(xiàn)的,該 JSP 頁(yè)面是以.jsp結(jié)尾而不是以 .Html 結(jié)尾的。

  • JSP 引擎從磁盤(pán)加載 JSP 頁(yè)面并將其轉(zhuǎn)換為一個(gè) servlet 的內(nèi)容。這種轉(zhuǎn)換是非常簡(jiǎn)單的,所有模板文本轉(zhuǎn)換為 println()語(yǔ)句,所有 JSP 元素轉(zhuǎn)換為 Java 代碼實(shí)現(xiàn)頁(yè)面的相應(yīng)的動(dòng)態(tài)行為。

  • JSP 引擎編譯 servlet 到一個(gè)可執(zhí)行的類(lèi)中,并將原始請(qǐng)求轉(zhuǎn)發(fā)給一個(gè) servlet 引擎。

  • 調(diào)用 servlet 引擎的 web 服務(wù)器的一部分加載 Servlet 類(lèi)并執(zhí)行它。執(zhí)行期間,Servlet 產(chǎn)生一個(gè) HTML 格式的輸出,servlet 引擎將該輸出傳遞到 HTTP 響應(yīng)內(nèi)的 web 服務(wù)器中。

  • web 服務(wù)器將 HTTP 響應(yīng)以靜態(tài) HTML 內(nèi)容的形式轉(zhuǎn)發(fā)到你的瀏覽器中。

  • 最后 web 瀏覽器處理 HTTP 響應(yīng)中的動(dòng)態(tài)生成的 HTML 頁(yè)面,就好像它是一個(gè)靜態(tài)頁(yè)面。

上述所有步驟如下圖所示:

http://wiki.jikexueyuan.com/project/jsp/images/arch2.jpg" alt="architecture2" />

通常,JSP 引擎檢查 JSP 文件的 servlet 是否已存在,JSP 的修改日期是否比 servlet 的過(guò)時(shí)。如果 JSP 的修改日期比其生成的 servlet 的修改日期過(guò)時(shí),那么 JSP 容器假設(shè) JSP 修改日期沒(méi)有改變,且生成的 servlet 的修改日期仍然與 JSP 的內(nèi)容相匹配。與其他腳本語(yǔ)言(比如 PHP)相比,這個(gè)過(guò)程更有效率,因此更加快速。

所以在某種程度上來(lái)說(shuō),一個(gè) JSP 頁(yè)面只是用另一種方式來(lái)寫(xiě) servlet,而不需要成為一個(gè) Java 編程奇才。除了翻譯階段,處理 JSP 頁(yè)面完全就像處理一個(gè)普通的 servlet 一樣。