JSP - 語法



在本章中,我們將討論 JSP 中的語法。我們將瞭解與 JSP 開發相關的基本簡單語法(即元素)的使用。

JSP 元素

JSP 元素描述如下:

指令碼片段

指令碼片段可以包含任意數量的 JAVA 語言語句、變數或方法宣告,或在頁面指令碼語言中有效的表示式。

以下是指令碼片段的語法:

<% code fragment %>

您可以將上述語法的 XML 等效形式編寫如下:

<jsp:scriptlet>
   code fragment
</jsp:scriptlet>

您編寫的任何文字、HTML 標籤或 JSP 元素都必須位於指令碼片段之外。以下是 JSP 的簡單且第一個示例:

<html>
   <head><title>Hello World</title></head>
   
   <body>
      Hello World!<br/>
      <%
         out.println("Your IP address is " + request.getRemoteAddr());
      %>
   </body>
</html>

注意 - 假設 Apache Tomcat 安裝在 C:\apache-tomcat-7.0.2 中,並且您的環境已根據環境設定教程進行設定。

讓我們將上述程式碼儲存在 JSP 檔案 hello.jsp 中,並將此檔案放在 C:\apache-tomcat7.0.2\webapps\ROOT 目錄中。使用 URL https://:8080/hello.jsp 瀏覽它。上述程式碼將生成以下結果:

Hello World

JSP 宣告

宣告宣告一個或多個變數或方法,您可以在 JSP 檔案中稍後在 Java 程式碼中使用這些變數或方法。您必須在 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 檔案中表達式出現的位置插入的指令碼語言表示式。

由於表示式的值被轉換為字串,因此您可以在一行文字中使用表示式,無論它是否在 JSP 檔案中用 HTML 標記。

表示式元素可以包含根據 Java 語言規範有效的任何表示式,但您不能使用分號來結束表示式。

以下是 JSP 表示式的語法:

<%= expression %>

您可以將上述語法的 XML 等效形式編寫如下:

<jsp:expression>
   expression
</jsp:expression>

以下示例顯示了一個 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-2010 21:24:25

JSP 註釋

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 指令

JSP 指令影響 servlet 類的整體結構。它通常具有以下形式:

<%@ directive attribute="value" %>

指令標籤有三種類型:

序號 指令和描述
1

<%@ page ... %>

定義頁面相關的屬性,例如指令碼語言、錯誤頁面和緩衝要求。

2

<%@ include ... %>

在翻譯階段包含一個檔案。

3

<%@ taglib ... %>

宣告一個標籤庫,其中包含在頁面中使用的自定義操作

我們將在單獨的章節中解釋 JSP 指令 JSP - 指令

JSP 動作

JSP 動作使用 XML 語法中的構造來控制 servlet 引擎的行為。您可以動態插入檔案、重用 JavaBean 元件、將使用者轉發到另一個頁面或為 Java 外掛生成 HTML。

Action 元素只有一個語法,因為它符合 XML 標準:

<jsp:action_name attribute="value" />

Action 元素基本上是預定義的函式。下表列出了可用的 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 隱式物件

JSP 支援九個自動定義的變數,也稱為隱式物件。這些變數是:

序號 物件和描述
1

request

這是與請求關聯的 HttpServletRequest 物件。

2

response

這是與對客戶端的響應關聯的 HttpServletResponse 物件。

3

out

這是用於向客戶端傳送輸出的 PrintWriter 物件。

4

session

這是與請求關聯的 HttpSession 物件。

5

application

這是與應用程式上下文關聯的 ServletContext 物件。

6

config

這是與頁面關聯的 ServletConfig 物件。

7

pageContext

這封裝了伺服器特定功能的使用,例如更高效能的 JspWriters

8

page

這只是 this 的同義詞,用於呼叫已翻譯的 servlet 類定義的方法。

9

Exception

Exception 物件允許指定 JSP 訪問異常資料。

我們將在單獨的章節中解釋 JSP 隱式物件 JSP - 隱式物件

控制流語句

您可以在 JSP 程式設計中使用 Java 的所有 API 和構建塊,包括決策語句、迴圈等。

決策語句

if...else 塊的開始方式類似於普通的指令碼片段,但指令碼片段在每一行都用包含在指令碼片段標籤之間的 HTML 文字關閉。

<%! int day = 3; %> 
<html> 
   <head><title>IF...ELSE Example</title></head> 
   
   <body>
      <% if (day == 1 || day == 7) { %>
         <p> Today is weekend</p>
      <% } else { %>
         <p> Today is not weekend</p>
      <% } %>
   </body> 
</html> 

上述程式碼將生成以下結果:

Today is not weekend

現在看看以下使用 out.println() 和在指令碼片段內編寫的略有不同的 switch...case 塊:

<%! 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 Wednesday.

迴圈語句

您還可以在 Java 中使用三種基本型別的迴圈塊:for、while 和 do…while 塊在您的 JSP 程式設計中。

讓我們看看以下 for 迴圈示例:

<%! int fontSize; %> 
<html> 
   <head><title>FOR LOOP Example</title></head> 
   
   <body>
      <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
         <font color = "green" size = "<%= fontSize %>">
            JSP Tutorial
      </font><br />
      <%}%>
   </body> 
</html> 

上述程式碼將生成以下結果:


   JSP Tutorial

JSP Tutorial
JSP Tutorial

以上示例可以使用 while 迴圈編寫如下:

<%! int fontSize; %> 
<html> 
   <head><title>WHILE LOOP Example</title></head> 
   
   <body>
      <%while ( fontSize <= 3){ %>
         <font color = "green" size = "<%= fontSize %>">
            JSP Tutorial
         </font><br />
         <%fontSize++;%>
      <%}%>
   </body> 
</html> 

上述程式碼將生成以下結果:


   JSP Tutorial



   JSP Tutorial



   JSP Tutorial

JSP 運算子

JSP 支援 Java 支援的所有邏輯和算術運算子。下表列出了所有運算子,其中優先順序最高的運算子位於表頂部,優先順序最低的運算子位於底部。

在一個表示式中,優先順序較高的運算子將首先被評估。

類別 運算子 結合性
字尾 () [] . (點運算子) 從左到右
一元 ++ - - ! ~ 從右到左
乘法 * / % 從左到右
加法 + - 從左到右
移位 >> >>> << 從左到右
關係 > >= < <= 從左到右
相等 == != 從左到右
按位與 & 從左到右
按位異或 ^ 從左到右
按位或 | 從左到右
邏輯與 && 從左到右
邏輯或 || 從左到右
條件 ?: 從右到左
賦值 = += -= *= /= %= >>= <<= &= ^= |= 從右到左
逗號 , 從左到右

JSP 字面量

JSP 表示式語言定義以下字面量:

  • 布林值 - true 和 false

  • 整數 - 如 Java 中所示

  • 浮點數 - 如 Java 中所示

  • 字串 - 使用單引號和雙引號;" 被轉義為 \,' 被轉義為 \,\ 被轉義為 \\。

  • - null

廣告