JSP 語法


本小節將會簡單介紹JSP開發中的基礎語法。


腳本程式

腳本程式可以包含任意量的Java語句、變數、方法或表達式,只要它們在腳本語言中是有效的。

腳本程式的語法格式:

<% 代码片段 %>

或者,您也可以編寫與其等價的XML語句,就像下面一樣:

<jsp:scriptlet>
   代码片段
</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目錄下且運作環境已經正確設定。

將上述程式碼儲存在hello.jsp中,然後將它放置在C:\apache-tomcat-7.0.2\webapps\ROOT目錄下,開啟瀏覽器並在網址列中輸入http:/ /localhost:8080/hello.jsp。運行後得到以下結果:

jsp_hello_world.jpg

中文編碼問題

如果我們要在頁面正常顯示中文,我們需要在JSP 檔案頭部加入以下程式碼: <>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

解析來我們將上述程式修改為:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>

這樣中文就可以正常顯示了。


        JSP宣告

一個宣告語句可以宣告一個或多個變數、方法,供後面的Java程式碼使用。在JSP檔案中,您必須先聲明這些變數和方法然後才能使用它們。

JSP聲明的語法格式:

<%! declaration; [ declaration; ]+ ... %>

或者,您也可以編寫與其等價的XML語句,就像下面這樣:

<jsp:declaration>
   代码片段
</jsp:declaration>

程式範例:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %>

        JSP表達式

一個JSP表達式中包含的腳本語言表達式,先轉換成String,再插入到表達式出現的地方。

由於表達式的值會轉換成String,所以您可以在一個文字行中使用表達式而不用去管它是否是HTML標籤。

表達式元素中可以包含任何符合Java語言規範的表達式,但不能使用分號來結束表達式。

JSP表達式的語法格式:

<%= 表达式 %>

同樣,您也可以編寫與之等價的XML語句:

<jsp:expression>
   表达式
</jsp:expression>

程式範例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html>

運行後得到以下結果:

今天的日期是: 2016-6-25 13:40:07

        JSP註解

JSP註解主要有兩個作用:為程式碼作註解以及將某段程式碼註解掉。

JSP註解的語法格式:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<%-- 该部分注释在网页中不会被显示--%> 
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html>

運行後得到以下結果:

今天的日期是: 2016-6-25 13:41:26

不同情況下使用註解的語法規則:

文法 說明
                    <%-- 註 --%>                    JSP註釋,註釋內容不會寄至瀏覽器甚至不會被編譯
                    <!-- 註 -->                    HTML註釋,透過瀏覽器檢視網頁原始碼時可看見註解內容
                    <\%                    代表靜態 <%常數
                    %\>                    代表靜態 %> 常數
                    \'                    屬性中所使用的單引號
                    \"                    屬性中使用的雙引號

        JSP指令

JSP指令用來設定與整個JSP頁面相關的屬性。

JSP指令語法格式:

<%@ directive attribute="value" %>

這裡有三種指令標籤:

指令說明
                    <%@ page ... %>                    定義頁面的依賴屬性,例如腳本語言、error頁面、快取需求等等
                    <%@ include ... %>                    包含其他文件
                    <%@ taglib ... %>                    引入標籤庫的定義,可以是自訂標籤
#

        JSP行為

JSP行為標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重複使用JavaBean元件,引導使用者到另一個頁面,為Java插件產生相關的HTML等等。

行為標籤只有一種語法格式,它嚴格遵守XML標準:

<jsp:action_name attribute="value" />

行為標籤基本上是一些預先就定義好的函數,下表羅列出了一些可用的JSP行為標籤::

語法
#                    jsp:include                    用於在目前頁面中包含靜態或動態資源
                    jsp:useBean                    尋找並初始化一個JavaBean元件
                    jsp:setProperty                    設定 JavaBean元件的值
                    jsp:getProperty                    將 JavaBean元件的值插入 output中
                    jsp:forward                    從一個JSP檔案傳遞一個包含使用者請求的request物件
                    jsp:plugin                    用於在產生的HTML頁面中包含Applet和JavaBean物件
                    jsp:element                    動態建立一個XML元素
                    jsp:attribute                    定義動態建立的XML元素的屬性
                    jsp:body                    定義動態建立的XML元素的主體
                    jsp:text                    用於封裝模板資料

        JSP隱含物件

JSP支援九個自動定義的變量,江湖人稱隱含物件。這九個隱含物件的簡介請參閱下表:

HttpServletRequest類別的實例HttpServletResponse類別的實例PrintWriter類別的實例,用來把結果輸出至網頁上##                    session類別的實例                    application類別的實例,與應用情境有關                    config類別的實例                    pageContext類別的實例,提供JSP頁面所有物件以及命名空間的存取                   page                    類似Java類別中的this關鍵字                    Exception類別的對象,代表發生錯誤的JSP頁面中對應的例外物件
物件##描述
                    request
                    response
                    out
HttpSession
ServletContext
ServletConfig
PageContext
Exception
###

        控制流程語句

JSP提供對Java語言的全面支援。您可以在JSP程式中使用Java API甚至建立Java程式碼區塊,包括判斷語句和循環語句等等。

        判斷語句

If…else區塊,請看下面這個範例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%! int day = 3; %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<h3>IF...ELSE 实例</h3>
<% if (day == 1 | day == 7) { %>
      <p>今天是周末</p>
<% } else { %>
      <p>今天不是周末</p>
<% } %>
</body> 
</html>

運行後得到以下結果:

IF...ELSE 实例
今天不是周末

現在來看看switch…case區塊,與if …else區塊有很大的不同,它使用out.println(),並且整個都裝在腳本程式的標籤中,就像下面這樣:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%! int day = 3; %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<h3>SWITCH...CASE 实例</h3>
<% 
switch(day) {
case 0:
   out.println("星期天");
   break;
case 1:
   out.println("星期一");
   break;
case 2:
   out.println("星期二");
   break;
case 3:
   out.println("星期三");
   break;
case 4:
   out.println("星期四");
   break;
case 5:
   out.println("星期五");
   break;
default:
   out.println("星期六");
}
%>
</body> 
</html>

瀏覽器訪問,運行後得出以下結果:

SWITCH...CASE 实例

星期三

循環語句

在JSP程式中可以使用Java的三個基本迴圈型別:for,while,和do…while。

讓我們來看看for迴圈的例子,以下輸出的不同字體大小的"php中文網":

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%! int fontSize; %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<h3>For 循环实例</h3>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
   <font color="green" size="<%= fontSize %>">
    php中文网
   </font><br />
<%}%>
</body> 
</html>

運行後得到以下結果:

7B4B85CF-FE4B-43CB-AAFF-F8594AD4342C.jpg

#將上例改用while循環來寫:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%! int fontSize; %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<h3>While 循环实例</h3>
<%while ( fontSize <= 3){ %>
   <font color="green" size="<%= fontSize %>">
    php中文网
   </font><br />
<%fontSize++;%>
<%}%>
</body> 
</html>
瀏覽器訪問,輸出結果為(fontSize 初始化為0,所以多輸出了一行):

7B4B85CF-FE4B-43CB-AAFF-F8594AD4342C.jpg

JSP運算子

JSP支援所有Java邏輯和算術運算子。

下表羅列出了JSP常見運算符,優先順序從高到底:

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

        JSP 字面量

JSP語言定義了以下幾個字面量:

  •                 布林值(boolean):true 與 false;

  •                 整數(int):與 Java 中的相同;

  •                 浮點型(float):與 Java 中的相同;

  •                 字串(string):以單引號或雙引號開始和結束;

  •                 Null:null。