JSP基礎語法


在本章中,我們將了解和學習JSP語法。並了解JSP開發涉及的簡單語法(即元素)的基本用法。

為了方便演示,使用Eclipse建立一個動態Web專案:jspsyntax,用於執行以下涉及到的範例程式碼。

JSP的元素

JSP的元素如下所述:

1.小指令碼

小指令碼(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>

執行上面範例程式碼,得到以下結果 -

2.JSP宣告

宣告一個或多個變數或方法,可以在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); %>

3.JSP表示式

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

4.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 \" 靜態的單引號"字面值。

5.JSP指令

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

<%@ directive attribute="value" %>

有三種型別的指令標籤 -

編號 指令 描述
1 <%@ page ... %> 定義頁面相關屬性,如指令碼語言,錯誤頁面和緩衝要求等。
2 <%@ include ... %> 在編譯階段包括檔案。
3 <%@ taglib ... %> 宣告頁面中使用包含自定義操作的標籤庫

我們將在另一章專門介紹JSP指令 - JSP指令

6.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外掛建立OBJECTEMBED標記的特定於瀏覽器的程式碼。
7 jsp:element 動態定義XML元素。
8 jsp:attribute 定義動態定義的XML元素屬性。
9 jsp:body 定義動態定義的XML元素的正文。
10 jsp:text 用於在JSP頁面和文件中編寫模板文字。

我們將在單獨的章節解釋JSP動作 - JSP動作

7.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隱式物件

8.控制流程語句

在JSP程式設計中使用Java的所有API和構建塊,包括決策語句,迴圈等。如:if,if..else等語句。

9.決策語句

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.

10.迴圈語句

在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>

上述程式碼將產生以下結果 -

11.JSP運算子

JSP支援Java支援的所有邏輯和算術運算子。下表列出了所有具有最高優先順序的運算子放在表格的頂部,優先順序較低的運算子放在底部。

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

分類 運算子 關聯性
字尾 () [] . 左到右
一元運算子 ++ -- ! ~ 右到左
乘法 * / % 左到右
加法 + -
位移 >> >>> << 左到右
關係 > >= < <= 左到右
等於 == != 左到右
按位元與 & 左到右
按位元互斥或 ^ 左到右
按位元或 左到右
邏輯與 &&
邏輯或 左到右
條件 ?: 右到左
分配 = += -= *= /= %= >>= <<= &= ^= 右到左
逗號 , 左到右

12.JSP文字

JSP表示式語言定義了以下文字 -

  • 布林 - truefalse
  • 整數 - 與Java中的一樣。
  • 浮點 - 與Java中的一樣。
  • 字串 - 帶單引號和雙引號; "被跳脫為\"'被跳脫為\'\被跳脫為\\
  • - null