你寫的JSP最終會變成一個servlet在Web應用中運行。它與其他servlet非常相似,只不過這個servlet類會由容器爲你編寫。
容器拿到你在JSP中寫的代碼,把這些代碼轉換爲一個servlet類源文件,然後再把這個源文件編譯爲Java Servlet類。
下面代碼是一個Web應用:
先寫一個普通計數器類:Counter.java
package foo;
public class Counter{
private static int count;
public static synchronized int getCount(){
count++;
return count;
}
}
再寫JSP頁面:BasicCounter.jsp
<html>
<body>
The page count is:
<%
out.println(Counter.getCount());
%>
</body>
</html>
運行頁面報500,因爲Counter類在foo包中,但是JSP不知道。
解決方法:導包
<%@ page import="foo.*" %>
或在代碼中使用完全限定類名
out.println(foo.Counter.getCount());
Java代碼放在帶百分號的尖括號中間:<%和%>
指令會爲元素開始記號再增加一個字符:@,以<%@開始的JSP代碼,應該知道這是一個JSP指令。
上面的JSP代碼還是有out.println()語句。引入JSP,部分原因就是爲了避免大量的println()語句出現,有JSP表達式元素,表達式元素會自動打印放在標記之間的內容。
<%= Counter.getCount()%>//裏面不加;
和
<%
out.println(Counter.getCount());
%>
作用相同
因爲:容器拿到你在<%=和%>之間鍵入的所有內容,會把它作爲參數傳遞給打印語句。上面的表達式會轉換成下面這行代碼:
out.println(Counter.getCount());
你如果放上分號,就成爲下面這樣,就是錯誤的:
out.println(Counter.getCount(););