JSP頁(yè)面基本組成
在 HTML 頁(yè)面文件中加入 Java 程序段和 JSP 標(biāo)簽,即可構(gòu)成一個(gè) JSP 頁(yè)文件,JSP 頁(yè)面由 5 種元素組合而成。
1.普通的 HTML 標(biāo)記符。
2.JSP 標(biāo)簽,如指令標(biāo)簽、動(dòng)作標(biāo)簽。
3.變量和方法的聲明。
4.Java 程序段。
5.Java 表達(dá)式。
當(dāng)服務(wù)器上的 JSP 頁(yè)面被第一次請(qǐng)求執(zhí)行時(shí),服務(wù)器上的 JSP 引擎首先將 JSP 頁(yè)面文件轉(zhuǎn)譯成 Java 文件,再將 Java 文件編譯,生成字節(jié)碼文件,然后通過(guò)執(zhí)行字節(jié)碼文件響應(yīng)客戶的請(qǐng)求,這個(gè)字節(jié)碼文件的任務(wù)如下。
• 把 JSP 頁(yè)面中普通的 HTML 標(biāo)記符號(hào)交給客戶的瀏覽器執(zhí)行并顯示。
• JSP 標(biāo)簽、數(shù)據(jù)和方法聲明、Java 程序段由服務(wù)器負(fù)責(zé)執(zhí)行,將需要顯示的結(jié)果發(fā)送給客戶的瀏覽器。
• Java 表達(dá)式由服務(wù)器負(fù)責(zé)計(jì)算,并將結(jié)果轉(zhuǎn)化為字符串,然后交給客戶的瀏覽器負(fù)責(zé)顯示。
Java Server Pages(JSP)能夠分離頁(yè)面的靜態(tài) HTML 和動(dòng)態(tài)部分。HTML 可以用任何通常使用的 Web 制作工具編寫,編寫方式也和原來(lái)的一樣;動(dòng)態(tài)部分的代碼放入特殊標(biāo)記之內(nèi),大部分以“<%”開始,以“%>”結(jié)束。
例如,下面是一個(gè) JSP 頁(yè)面的片斷,如果用http://host/test.jsp?title=Core+Web+Programming 這個(gè) URL 打開該頁(yè)面,則結(jié)果顯示 “Thanks for ordering Core Web Programming”。 test.jsp 源程序如下:
Thanks for ordering
<i><%= request.getParameter("title") %></i>
JSP 頁(yè)面文件通常以 .jsp 為擴(kuò)展名,而且可以安裝到任何能夠存放普通 Web 頁(yè)面的地方。雖然從代碼編寫來(lái)看,JSP 頁(yè)面更像普通 Web 頁(yè)面而不像 Servlet,但實(shí)際上,JSP 最終會(huì)被轉(zhuǎn)換成正規(guī)的 Servlet,靜態(tài) HTML 直接輸出到和 Servlet service 方法關(guān)聯(lián)的輸出流。
JSP 到 Servlet 的轉(zhuǎn)換過(guò)程一般在出現(xiàn)第一次頁(yè)面請(qǐng)求時(shí)進(jìn)行。因此,如果希望第一個(gè)用戶不會(huì)由于 JSP 頁(yè)面轉(zhuǎn)換成 Servlet 而等待太長(zhǎng)的時(shí)間,并且希望確保 Servlet 已經(jīng)正確地編譯并裝載,你可以在安裝 JSP 頁(yè)面之后自己請(qǐng)求這個(gè)頁(yè)面,這樣 JSP 頁(yè)面就轉(zhuǎn)換成 Servlet 了。
另外也請(qǐng)注意,許多 Web 服務(wù)器允許定義別名,所以一個(gè)看起來(lái)指向 HTML 文件的 URL 實(shí)際上可能指向 Servlet 或 JSP 頁(yè)面。
除了普通 HTML 代碼之外,嵌入 JSP 頁(yè)面的其他成分主要有三種:腳本元素(Scripting Element)、指令(Directive)和動(dòng)作(Action)。
腳本元素用來(lái)嵌入 Java 代碼,這些 Java 代碼將成為轉(zhuǎn)換得到的 Servlet 的一部分;JSP 指令用來(lái)從整體上控制 Servlet 的結(jié)構(gòu);動(dòng)作用來(lái)引入現(xiàn)有的組件或者控制 JSP 引擎的行為。為了簡(jiǎn)化腳本元素,JSP 定義了一組可以直接使用的變量(預(yù)定義變量)。