摘要:Scriptlets(腳本片斷)到現(xiàn)在為止你已經(jīng)學(xué)會(huì)了使用指令來引入任何Java類或Java包,你能定義頁面級(jí)的方法或變量并在頁中使用它們,你還可以使用提供普通web處理功能的隱含變量。還能在JSP頁內(nèi)做些什么就取決于你了,因?yàn)槟憧梢栽趕criptlets(腳本片斷)里編寫任何你想要的Java代碼,如下所示:通過在page指令中使用IMPORT參數(shù),你
到現(xiàn)在為止你已經(jīng)學(xué)會(huì)了使用指令來引入任何Java類或Java包,你能定義頁面級(jí)的方法或變量并在頁中使用它們,你還可以使用提供普通web處理功能的隱含變量。還能在JSP頁內(nèi)做些什么就取決于你了,因?yàn)槟憧梢栽趕criptlets(腳本片斷)里編寫任何你想要的Java代碼,如下所示:<% ...code... %>
通過在page指令中使用IMPORT參數(shù),你可以從腳本片斷內(nèi)調(diào)用所有Java API。因?yàn)槟銓懙乃蠮SP代碼實(shí)際上都被編譯構(gòu)成Java servlet,它本身就是一個(gè)Java類,所以你所用的語言本身就是Java,而不是任何一種修改或整理過的版本。這就像在SSJS中你可以編寫任何代碼一樣。而與SSJS不同,在JSP中你有權(quán)使用整套豐富的Java API,因此幾乎沒有任何局限性。
Implicit Variables(隱含變量)
前面提到過,JSP定義了一些隱含變量(即Java 對(duì)象)供你在表達(dá)式和腳本片斷中使用?!禞SP Specification Version 1.0》的表2-2列出了JSP1.0中可用的隱含變量。這里列出一些常用的對(duì)象:
out對(duì)象,類型為javax.servlet.jsp.JspWriter,提供對(duì)方法(例如print()方法)的訪問,用來在腳本片斷內(nèi)生成輸出結(jié)果。
request對(duì)象直接與Java中的javax.servlet.http.HttpServletRequest類對(duì)應(yīng),具有該類的對(duì)象的一切屬性和方法。舉個(gè)例子,要獲取一個(gè)從HTML表單或URL查詢字串傳入的值,可以調(diào)用request.getParameter()方法,根據(jù)名字獲取參量。
response對(duì)象與Java中的javax.servlet.http.HttpServletResponse類對(duì)應(yīng),提供對(duì)你的網(wǎng)頁產(chǎn)生的HTML響應(yīng)的參數(shù)的訪問權(quán)。因此,要在JSP頁返回的HTML響應(yīng)報(bào)頭中加入一個(gè)值,你就可以調(diào)用the response.setHeader() 方法來實(shí)現(xiàn)。
另一個(gè)簡(jiǎn)單的例子
在下面的例子中,我們來看一看一個(gè)表單和它的JSP表單句柄之間的交互過程。使用前面討論過的腳本元素,我實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的web站點(diǎn)回饋表單(見圖2)和一個(gè)JSP表單句柄用來驗(yàn)證輸入,然后有條件地地生成基于回饋的輸出。
表單句柄將會(huì)檢驗(yàn)名稱和意見欄以確定它們已被填寫,如果其中任何一個(gè)或兩個(gè)是空白的,表單句柄會(huì)生成一條錯(cuò)誤信息;否則它將繼續(xù)查看用戶意見是否與預(yù)先設(shè)定的字串匹配。如果匹配,它就輸出一條專門的信息;否則輸出“thank you”。
例2 <%
// 獲取通過表單提交的數(shù)據(jù)
String name = request.getParameter("name");
String age = request.getParameter("age");
String comment = request.getParameter("comment");
boolean isValid;
isValid = validateInput(name, comment);
// 根據(jù)用戶是否未填寫姓名或意見欄決定輸出內(nèi)容
if (isValid) {
%>
這個(gè)例子假定用戶輸入的意見是“I like cheese."(我喜歡奶酪)在代碼中可以看到,這一響應(yīng)是為填寫這條意見的用戶定制的。表單句柄將會(huì)返回如圖3所示的頁面:
這個(gè)例子非常簡(jiǎn)單易懂。即便你只是一個(gè)JavaScript程序員,你也應(yīng)該可以理解它。我還要指出這個(gè)例子中體現(xiàn)的在JSP規(guī)范中并不很明顯的一些特性。首先,請(qǐng)注意我在聲明部分(<%'...%>中的部分)定義了一些方法,與在Java類中定義方法一模一樣。這是因?yàn)镴SP引擎把這些方法轉(zhuǎn)變?yōu)榈讓拥腏ava servlets,在瀏覽器向網(wǎng)頁發(fā)出請(qǐng)求時(shí)由服務(wù)器來執(zhí)行它們。因此,任何變量和方法的定義都必須遵守標(biāo)準(zhǔn)的Java語法。
還應(yīng)注意到,在我的腳本片斷的代碼中,我把一個(gè)if...else語句分開了,它跨越了兩個(gè)不同的腳本片斷段。這完全是合法的!不僅合法,而且把腳本片斷代碼和靜態(tài)HTML交叉起來是有條件生成HTML的好辦法,就像我在本例中所做到的一樣。
最后,你可以看到我通過調(diào)用request.getParameter()方法取得表單元素的值并把它賦給一個(gè)臨時(shí)變量。這是處理從表單或查詢字串輸入的值的標(biāo)準(zhǔn)方法。
[1] [2]
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題