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 檔頭部添加以下代碼:
<%@ 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>IT研修(xuhuhu.com)</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>IT研修(xuhuhu.com)</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>IT研修(xuhuhu.com)</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支持九個自動定義的變數,江湖人稱隱含對象。這九個隱含對象的簡介見下表:
對象 | 描述 |
---|---|
request | HttpServletRequest類的實例 |
response | HttpServletResponse類的實例 |
out | PrintWriter類的實例,用於把結果輸出至網頁上 |
session | HttpSession類的實例 |
application | ServletContext類的實例,與應用上下文有關 |
config | ServletConfig類的實例 |
pageContext | PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問 |
page | 類似於Java類中的this關鍵字 |
Exception | Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象 |
控制流語句
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>IT研修(xuhuhu.com)</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>IT研修(xuhuhu.com)</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迴圈的例子,以下輸出的不同字體大小的"IT研修":
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>IT研修(xuhuhu.com)</title> </head> <body> <h3>For 迴圈實例</h3> <%for ( fontSize = 1; fontSize <= 3; fontSize++){ %> <font color="green" size="<%= fontSize %>"> IT研修 </font><br /> <%}%> </body> </html>
運行後得到以下結果:
將上例改用 while 迴圈來寫:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%! int fontSize=0; %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>IT研修(xuhuhu.com)</title> </head> <body> <h3>While 迴圈實例</h3> <%while ( fontSize <= 3){ %> <font color="green" size="<%= fontSize %>"> IT研修 </font><br /> <%fontSize++;%> <%}%> </body> </html>流覽器訪問,輸出結果為(fontSize 初始化為0,所以多輸出了一行):
JSP支持所有Java邏輯和算術運算符。
下表羅列出了JSP常見運算符,優先順序從高到底:
類別 | 操作符 | 結合性 |
---|---|---|
尾碼 | () [] . (點運算符) | 左到右 |
一元 | ++ - - ! ~ | 右到左 |
可乘性 | * / % | 左到右 |
可加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
關係 | > >= < <= | 左到右 |
相等/不等 | == != | 左到右 |
位與 | & | 左到右 |
位異或 | ^ | 左到右 |
位或 | | | 左到右 |
邏輯與 | && | 左到右 |
邏輯或 | || | 左到右 |
條件判斷 | ?: | 右到左 |
賦值 | = += -= *= /= %= >>= <<= &= ^= |= | 右到左 |
逗號 | , | 左到右 |
JSP 字面量
JSP語言定義了以下幾個字面量:
- 布爾值(boolean):true 和 false;
- 整型(int):與 Java 中的一樣;
- 浮點型(float):與 Java 中的一樣;
- 字串(string):以單引號或雙引號開始和結束;
- Null:null。