# 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聲明
一個聲明語句可以聲明一個或多個變量、方法,供后面的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>
```
程序示例:
```
<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-2013 21:24:25
```
## JSP注釋
JSP注釋主要有兩個作用:為代碼作注釋以及將某段代碼注釋掉。
JSP注釋的語法格式:
```
<%-- 這里可以填寫 JSP 注釋 --%>
```
程序示例:
```
<html>
<head><title>A Comment Test</title></head>
<body>
<h2>A Test of Comments</h2>
<%-- 該部分注釋在網頁中不會被顯示--%>
</body>
</html>
```
運行后得到以下結果:
```
A Test of Comments
```
不同情況下使用注釋的語法規則:
| **語法** | 描述 |
| --- | --- |
| <%-- 注釋 --%> | 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塊,請看下面這個例子:
```
<%! 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
```
現在來看看switch…case塊,與if…else塊有很大的不同,它使用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 Wednesday.
```
循環語句
在JSP程序中可以使用Java的三個基本循環類型:for,while,和 do…while。
讓我們來看看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常量
JSP語言定義了以下幾個常量:
* Boolean:true and false
* Integer:與Java中的一樣
* Floating point:與Java中的一樣
* String:以單引號或雙引號開始和結束。 " 被轉義成 \",'被轉義成 \', \ 被轉義成\\
* Null:null
- Java 基礎
- Java 簡介
- Java開發環境配置
- Java基礎語法
- Java對象和類
- Java基本數據類型
- Java變量類型
- Java修飾符
- Java運算符
- Java循環結構 - for, while 及 do...while
- Java分支結構 - if...else/switch
- Java Number類
- Java Character類
- Java String類
- Java StringBuffer和StringBuilder類
- Java 數組
- Java 日期時間
- Java正則表達式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 異常處理
- Java 面向對象
- Java 繼承
- Java 重寫(Override)與重載(Overload)
- Java 多態
- Java 抽象類
- Java 接口
- Java 包(package)
- Java 高級教程
- Java 數據結構
- Java Enumeration接口
- Java Bitset類
- Java Vector 類
- Java Stack 類
- Java Dictionary 類
- Java Hashtable 接口
- Java Properties 接口
- Java 集合框架
- Java 泛型
- Java序列化
- Java 網絡編程
- Java 發送郵件
- Java 多線程編程
- Java Applet基礎
- Java 文檔注釋
- Servlet 教程
- Servlet 簡介
- Servlet 環境設置
- Servlet 生命周期
- Servlet 實例
- Servlet 表單數據
- Servlet 客戶端 HTTP 請求
- Servlet 服務器 HTTP 響應
- Servlet HTTP 狀態碼
- Servlet 編寫過濾器
- Servlet 異常處理
- Servlet Cookies 處理
- Servlet Session 跟蹤
- Servlet 數據庫訪問
- Servlet 文件上傳
- Servlet 處理日期
- Servlet 網頁重定向
- Servlet 點擊計數器
- Servlet 自動刷新頁面
- Servlet 發送電子郵件
- Servlet 包
- Servlet 調試
- Servlet 國際化
- JSP 基礎
- JSP 簡介
- JSP 開發環境搭建
- JSP 結構
- JSP 生命周期
- JSP 語法
- JSP 指令
- JSP 動作元素
- JSP 動作元素
- JSP 隱含對象
- JSP 客戶端請求
- JSP 服務器響應
- JSP HTTP 狀態碼
- JSP 表單處理
- JSP 過濾器
- JSP Cookies 處理
- JSP Session
- JSP 文件上傳
- JSP 日期處理
- JSP 頁面重定向
- JSP 點擊量統計
- JSP 自動刷新
- JSP 發送郵件
- JSP 高級教程
- JSP 標準標簽庫(JSTL)
- JSP 連接數據庫
- JSP XML 數據處理
- JSP JavaBean
- JSP 自定義標簽
- JSP 表達式語言
- JSP 異常處理
- JSP 調試
- JSP 國際化
- 免責聲明