在 JSP 頁面中可以聲明變量、方法和類,其聲明格式如下:
<%!聲明變量、方法和類的代碼%>
特別要注意,在“<%“與“!”之間不要有空格。聲明的語法與在 Java 語言中聲明變量和方法時的語法是一樣的。
在“<%!”和“%>”標記之間聲明變量,即在“<%!”和“%>”之間放置 Java 的變量聲明語句。變量的類型可以是 Java 語言允許的任何數據類型。我們將這些變量稱為 JSP 頁面的成員變量。
【例1】聲明變量:
<%!
int x,y=100,z;
String tom=null,jery="Love JSP";
Date date;
%>
這里,“<%!”和“%>”之間聲明的變量在整個 JSP 頁面內都有效,因為 JSP 引擎將 JSP 頁面轉譯成 Java 文件時,將這些變量作為類的成員變量,這些變量的內存空間直到服務器關閉才被釋放。
當多個客戶請求一個 JSP 頁面時,JSP 引擎為每個客戶啟動一個線程,這些線程由 JSP 引擎服務器來管理。這些線程共享 JSP 頁面的成員變量,因此任何一個用戶對 JSP 頁面成員變量操作的結果,都會影響到其他用戶。
在“<%!”和“%>”標記之間聲明的方法,在整個 JSP 頁面有效,但是,方法內定義的變量只在方法內有效。
【例2】聲明方法:
<%@ page contentType="text/html; charset=utf-8" %>
<%!
int num = 0; //聲明一個計數變量
synchronized void add()
{
//該方法實現訪問次數的累加操作
num++;
}
%>
<% add(); %>
<html>
<body><center>您是第<%=num%>位訪問該頁面的游客!</center></body>
</html>
運行結果如圖 1 所示。
圖1 使用方法的聲明
示例中聲明了一個 num 變量和 add() 方法。add() 方法對 num 變量進行累加操作,synchronized 修飾符可以使多個同時訪問 add() 方法的線程排隊調用。
當第一個用戶訪問該頁面后,變量 num 被初始化,服務器執行 小腳本程序,從而 add() 方法被調用,num 變為 1。當第二個用戶訪問時,變量 num 不再被重新初始化,而使用前一個用戶訪問后的 num 值,之后調用 add() 方法,num 值變為 2。
可以在“<%!”和“%>”之間聲明一個類。該類在 JSP 頁面內有效,即在 JSP 頁面的 Java 程序段部分可以使用該類創建對象。下例中,定義了一個 Circle 類,該類的對象負責求圓的面積。當客戶向服務器提交圓的半徑后,該對象計算圓的面積。
【例3】使用類的聲明:
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title></title>
</head>
<body>
<p>
<font size="4">請輸入圓的半徑:<br></font>
</p>
<form action="" method="get" name="form" id="form">
<font size="4"><input type="text" name="cat" value="1"> <input type="submit" value="送出" name="submit"></font>
</form><%!
public class Circle
{
double r;
Circle(double r)
{
this.r = r;
}
double 求面積()
{
return Math.PI*r*r;
}
}
%><%
String str = request.getParameter("cat");
double r;
if(str != null)
{
r = Double.parseDouble(str);
}
else
{
r = 1;
}
Circle circle = new Circle(r);
%>
<p>
<font size="4">圓的面積是:<%=circle.求面積()%></font>
</p>
</body>
</html>
運行結果如圖 2 所示。
圖2 使用類聲明