在本章中,我們將了解和學習JSP語法。並了解JSP開發涉及的簡單語法(即元素)的基本用法。
為了方便演示,使用Eclipse建立一個動態Web專案:jspsyntax,用於執行以下涉及到的範例程式碼。
JSP的元素如下所述:
小指令碼(scriptlet)可以將任何數量的小指令碼包含在頁面中,小指令碼是有效的JAVA語言語句,變數或方法宣告或表示式。
以下是小指令碼的語法 -
<% code fragment %>
可以將上述語法編寫為XML的形式,效果相同,如下所示:
<jsp:scriptlet>
code fragment
</jsp:scriptlet>
編寫的任何文字,HTML標籤或JSP元素必須在scriptlet之外。 以下是JSP的簡單和第一個例子 -
檔案:helloworld.jsp -
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
Hello World!
<br />
<%
out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>
執行上面範例程式碼,得到以下結果 -
宣告一個或多個變數或方法,可以在Java程式碼中編寫,之後在JSP檔案中使用。 在JSP檔案中使用該變數或方法之前,必須先宣告變數或方法。
以下是JSP宣告的語法 -
<%! declaration; [ declaration; ]+ ... %>
可以將上述語法編寫為XML的形式,效果相同,如下所示:
<jsp:declaration>
code fragment
</jsp:declaration>
以下是JSP宣告的範例 -
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
JSP表示式元素包含一個指令碼語言表示式,它被評估求值,轉換為一個字串,並插入到表示式顯示在JSP檔案中的指定輸出位置。
因為表示式的值被轉換為字串,所以可以在JSP檔案中使用文字行內的表示式,無論是否使用HTML標記HTML。
表示式元素可以包含根據Java語言規範有效的任何表示式,但不能使用分號來結束表示式。
以下是JSP表示式的語法 -
<%= expression %>
可以將上述語法編寫為XML的形式,效果相同,如下所示:
<jsp:expression>
expression
</jsp:expression>
以下範例顯示了JSP表示式 -
檔案:express.jsp -
<html>
<head><title>A Comment Test</title></head>
<body>
<p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
</body>
</html>
上述程式碼將產生以下結果 -
Today's date: 11-Sep-2017 21:24:25
JSP注釋標記JSP容器應忽略的文字或語句。當您想要隱藏或註釋掉JSP頁面的一部分時,JSP註釋很有用。
以下是JSP註釋的語法 -
<%-- This is JSP comment --%>
以下範例顯示了JSP注釋 -
<html>
<head><title>A Comment Test</title></head>
<body>
<h2>A Test of Comments</h2>
<%-- This comment will not be visible in the page source --%>
</body>
</html>
上述程式碼將產生以下結果 -
A Test of Comments
可以使用少量特殊結構,在各種情況下可以插入特別處理的註釋或字元。下面是一個總結 -
編號 | 語法 | 說明 |
---|---|---|
1 | <%-- comment --%> |
JSP註釋,它會被JSP引擎忽略。 |
2 | <!-- comment --> |
HTML註釋,它會被瀏覽器忽略。 |
3 | <\% |
表示靜態的<% 字面值。 |
4 | %\> |
表示靜態的%> 字面值。 |
5 | \' |
表示靜態的單引號' 字面值。 |
6 | \" |
靜態的單引號" 字面值。 |
JSP指令影響servlet類的整體結構。它通常具有以下形式 -
<%@ directive attribute="value" %>
有三種型別的指令標籤 -
編號 | 指令 | 描述 |
---|---|---|
1 | <%@ page ... %> |
定義頁面相關屬性,如指令碼語言,錯誤頁面和緩衝要求等。 |
2 | <%@ include ... %> |
在編譯階段包括檔案。 |
3 | <%@ taglib ... %> |
宣告頁面中使用包含自定義操作的標籤庫 |
我們將在另一章專門介紹JSP指令 - JSP指令
JSP動作使用XML語法中的結構來控制servlet引擎的行為。可以動態插入檔案,重新使用JavaBeans元件,將使用者轉發到另一個頁面,或為Java外掛生成HTML。
只有一個用於動作元素語法,因為它符合XML標準 -
<jsp:action_name attribute="value" />
動作元素基本上是預定義的功能,下表列出了可用的JSP動作 -
編號 | 動作 | 描述 |
---|---|---|
1 | jsp:include |
在請求頁面時包含一個檔案。 |
2 | jsp:useBean |
查詢或範例化一個JavaBean。 |
3 | jsp:setProperty |
設定JavaBean屬性的值。 |
4 | jsp:getProperty |
將JavaBean屬性的值輸出。 |
5 | jsp:forward |
將請求者轉發到新頁面。 |
6 | jsp:plugin |
生成針對Java外掛建立OBJECT 或EMBED 標記的特定於瀏覽器的程式碼。 |
7 | jsp:element |
動態定義XML元素。 |
8 | jsp:attribute |
定義動態定義的XML元素屬性。 |
9 | jsp:body |
定義動態定義的XML元素的正文。 |
10 | jsp:text |
用於在JSP頁面和文件中編寫模板文字。 |
我們將在單獨的章節解釋JSP動作 - JSP動作
JSP支援九個自動定義的變數,也稱為隱式物件。這些變數是 -
編號 | 物件 | 描述 |
---|---|---|
1 | request |
這是與請求相關聯的HttpServletRequest 物件。 |
2 | response |
這是與用戶端的響應關聯的HttpServletResponse 物件。 |
3 | out |
這是用於將輸出傳送到用戶端的PrintWriter 物件。 |
4 | session |
這是與請求相關聯的HttpSession 物件。 |
5 | application |
這是與應用程式上下文相關聯的ServletContext 物件。 |
6 | config |
這是與該頁面相關聯的ServletConfig 物件。 |
7 | pageContext |
它封裝了使用伺服器特定的功能,如更高效能的JspWriter 物件。 |
8 | page |
這只是一個同義詞,用於呼叫由編譯的servlet類定義的方法。 |
9 | Exception |
異常物件允許指定的JSP存取異常資料。 |
我們將在單獨的章節講解JSP隱式物件 - JSP隱式物件。
在JSP程式設計中使用Java的所有API和構建塊,包括決策語句,迴圈等。如:if
,if..else
等語句。
if...else
塊開始像一個普通的小指令碼,但是小指令碼在每一行都會被閉合,並且包含小指令碼標籤在HTML文字中。參考以下範例程式碼 -
檔案:ifelse.jsp -
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>IF...Else範例</title>
</head>
<body>
<%!int day = 3;%>
<%
if (day == 1 | day == 7) {
%>
<p>今天是週末,不用上班,Oyes ~</p>
<%
} else {
%>
<p>今天是工作日,乖乖去上班 ~</p>
<%
}
%>
</body>
</html>
上述程式碼將產生以下結果 -
現在看看下面的switch...case
塊,對於不同選項匹配使用out.println()
輸出不同結果 -
<%! int day = 3; %>
<html>
<head><title>SWITCH...CASE Example</title></head>
<body>
<%
switch(day) {
case 0:
out.println("It\'s Sunday.");
break;
case 1:
out.println("It\'s Monday.");
break;
case 2:
out.println("It\'s Tuesday.");
break;
case 3:
out.println("It\'s Wednesday.");
break;
case 4:
out.println("It\'s Thursday.");
break;
case 5:
out.println("It\'s Friday.");
break;
default:
out.println("It's Saturday.");
}
%>
</body>
</html>
上述程式碼將產生以下結果 -
It's Saturday.
在Java中使用三種基本型別的迴圈塊:for
, while
以及 do…while
均可在JSP程式設計中使用。
下面來看看for
迴圈語句的範例 -
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>For迴圈語句範例</title>
</head>
<body>
<%!int fontSize;%>
<%
for (fontSize = 1; fontSize <= 5; fontSize++) {
%>
<font color="green" size="<%=fontSize%>"> JSP教學 </font>
<br />
<%
}
%>
</body>
</html>
上述程式碼將產生以下結果 -
以上範例可以使用while
迴圈編寫,程式碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>While迴圈語句範例</title>
</head>
<body>
<%!int fontSize;%>
<%
while (fontSize <= 5) {
%>
<font color="green" size="<%=fontSize%>"> JSP教學 </font>
<br />
<%
fontSize++;
%>
<%
}
%>
</body>
</html>
上述程式碼將產生以下結果 -
JSP支援Java支援的所有邏輯和算術運算子。下表列出了所有具有最高優先順序的運算子放在表格的頂部,優先順序較低的運算子放在底部。
在一個表示式中,將首先評估計算較高優先順序的運算子。
分類 | 運算子 | 關聯性 |
---|---|---|
字尾 | () [] . |
左到右 |
一元運算子 | ++ -- ! ~ |
右到左 |
乘法 | * / % |
左到右 |
加法 | + - |
|
位移 | >> >>> << |
左到右 |
關係 | > >= < <= |
左到右 |
等於 | == != |
左到右 |
按位元與 | & |
左到右 |
按位元互斥或 | ^ |
左到右 |
按位元或 | ![]() |
左到右 |
邏輯與 | && |
|
邏輯或 | ![]() |
左到右 |
條件 | ?: |
右到左 |
分配 | = += -= *= /= %= >>= <<= &= ^= |
右到左 |
逗號 | , |
左到右 |
JSP表示式語言定義了以下文字 -
true
和false
"
被跳脫為\"
,'
被跳脫為\'
,\
被跳脫為\\
。null