天天看點

《Servlet和JSP學習指南》一3.5 腳本元素

第二種jsp句法元素是腳本元素,它将java代碼合并成一個jsp頁面。腳本元素有3種類型:scriptlet、聲明及表達式,這些都将在接下來的小節中讨論。

scriptlet是一個java代碼塊,它以<%開頭,以%>結束。例如,代碼清單3-6中的scriptlettest.jsp頁面就是使用了scriptlet。

《Servlet和JSP學習指南》一3.5 腳本元素
《Servlet和JSP學習指南》一3.5 腳本元素

上述jsp頁面中有兩個scriptlet。注意,在一個scriptlet中定義的變量,對于它後面的其他scriptlet是可見的。

一個scriptlet中的首行代碼可以與<%标簽放在同一行,%>标簽可以與最後一行代碼放在同一行。但是這樣會破壞頁面的可讀性。

表達式(expression)的運算結果會被填入隐式對象out的print方法中。表達式以<%開頭,并以%>結束。例如,以下粗體部分就是一個表達式:

《Servlet和JSP學習指南》一3.5 腳本元素

注意,表達式的後面不需要用分号。

對于這個表達式,jsp容器會先運算java.util.calendar.getinstance().gettime(),然後将結果傳給out.print()。它與下面這個scriptlet的結果是一樣的:

《Servlet和JSP學習指南》一3.5 腳本元素

可以聲明(declaration)能夠在jsp頁面中使用的變量和方法。聲明要用<%!和%>包起來。如代碼清單3-7中declarationtst.jsp頁面展示的jsp頁面,就聲明了一個名為gettodaysdate的方法。

《Servlet和JSP學習指南》一3.5 腳本元素
《Servlet和JSP學習指南》一3.5 腳本元素

聲明可以放在jsp頁面中的任何位置,并且同一個頁面中可以有多個聲明。

我們可以利用聲明覆寫實作類中的init和destroy方法。覆寫init,要聲明一個jspinit方法;覆寫destroy,要聲明一個jspdestroy方法。這兩個方法詳解如下:

jspinit。該方法與javax.servlet.servlet中的init方法類似。jsp頁面被初始化時,就會調用jspinit。與init方法不同的是,jspinit不帶參數。你仍然可以通過隐式對象config來獲得servletconfig對象。

jspdestroy。該方法與servlet中的destroy方法相似,當jsp頁面要被銷毀時,就會調用它。

代碼清單3-8中的lifecycle.jsp頁面,示範了覆寫jspinit和jspdestroy的方法。

《Servlet和JSP學習指南》一3.5 腳本元素

lifecycle.jsp頁面将被轉換成如下這樣的servlet:

《Servlet和JSP學習指南》一3.5 腳本元素
《Servlet和JSP學習指南》一3.5 腳本元素
《Servlet和JSP學習指南》一3.5 腳本元素
《Servlet和JSP學習指南》一3.5 腳本元素

注意到上述servlet中的jspinit和jspdestroy方法了嗎?

利用以下url可以調用lifecycle.jsp:

《Servlet和JSP學習指南》一3.5 腳本元素

當第一次調用這個jsp頁面時,會在控制台上看到“jspinit...”,當關閉servlet/jsp容器時,則會看到“jspdestroy...”。

随着jsp 2.0中expression language的發展,建議做法是利用el來通路伺服器端的對象,而不是在jsp頁面中編寫java代碼。為此,原本開啟的jsp 2.0腳本元素,可以通過在部署描述符的中定義一個scripting-invalid元素,将它關閉,如下所示:

《Servlet和JSP學習指南》一3.5 腳本元素