jsp中三種指令碼元素:
運算式格式<%= expression %>java運算式,計算運算式並輸出其結果。
計算Java運算式得到的結果被轉換成字串,然後插入到頁面。計算在運行時進行(頁面被請求時),因此可以訪問和請求有關的全部資訊。例如,下面的代碼顯示頁面被請求的日期/時間:
Current time: <%= new java.util.Date() %>
為簡化這些運算式,JSP預定義了一組可以直接使用的物件變數。對於JSP運算式來說,最重要的幾個對象及其類型如下:
request:HttpServletRequest;
response:HttpServletResponse;
session:和request關聯的HttpSession
out:PrintWriter(帶緩衝的版本,JspWriter),用來把輸出發送到用戶端
下面是一個例子:
Your hostname: <%= request.getRemoteHost() %>
Scriptlet格式<% code %>把代碼插入到Servlet的_jspService方法。對應Servlet類中_jspService(HttpServletRequest, HttpServletResponse)方法中的程式碼片段。
和JSP運算式一樣,Scriptlet也可以訪問所有預定義的變數。例如,如果你要向結果頁面輸出內容,可以使用out變數:
<%
String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData);
%>
注意Scriptlet中的代碼將被照搬到Servlet內,而Scriptlet前面和後面的靜態HTML(模板文本)將被轉換成println語句。這就意味著,Scriptlet內的Java語句並非一定要是完整的,沒有關閉的塊將影響Scriptlet外的靜態HTML。例如,下面的JSP片斷混合了模板文本和Scriptlet:
<%
if (Math.random() < 0.5) {
%>
Have a <B>nice</B> day!
<%
} else {
%>
Have a <B>lousy</B> day!
<%
}
%>
上述JSP代碼將被轉換成如下Servlet代碼:
if (Math.random() < 0.5) {<br /> out.println("Have a <B>nice</B> day!");<br />} else {<br /> out.println("Have a <B>lousy</B> day!");<br />}<br />
聲明格式<%! code %>把聲明加入到Servlet類(在任何方法之外)。
由於聲明不會有任何輸出,因此它們往往和JSP運算式或Scriptlet結合在一起使用。例如,下面的JSP代碼片斷輸出自從伺服器啟動(或Servlet類被改動並重新裝載以來)當前頁面被請求的次數:
<%! private int accessCount = 0; %>
自從伺服器啟動以來頁面訪問次數為:
<%= ++accessCount %>