JSP語法
以下內容引用自http://wiki.jikexueyuan.com/project/jsp/syntax.html:
一、Scriptlet
Scriptlet可以包含任意數量的JAVA語言語句,變量或方法聲明,或者在頁面的腳本語言中有效的表達式。
下面是Scriptlet 的語法:
<% code fragment %>
可以編寫相當於上述語法的XML,如下所示:
<jsp:scriptlet> code fragment </jsp:scriptlet>
任何文本、HTML標簽或編寫的JSP元素必須在Scriptlet之外。下面是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-tomcat-7.0.2\webapps\ROOT中,並試圖通 http://localhost:8080/hello.jsp
二、JSP聲明
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>
四、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>
在一些情況下,有少量的特殊結構可以用來插入註釋或字符,否則會被特殊對待。這裏有一個總結:
語法 | 目的 |
---|---|
<%-- comment --%> | JSP註釋。JSP引擎會忽略。 |
<!-- comment --> | HTML註釋。瀏覽器會忽略。 |
<\% | 代表靜態,相當於轉義字符 |
%\> | 代表靜態,相當於轉義字符 |
\‘ | 單引號屬性,使用單引號。 |
\" | 雙引號屬性,使用雙引號。 |
五、JSP指令
JSP指令影響Servlet類的總體結構。它通常具有以下形式:
<%@ directive attribute="value" %>
有三種指令標簽:
指令 | 描述 |
---|---|
<%@ page ... %> | 定義page-dependent屬性,比如腳本語言,錯誤頁面和緩沖要求。 |
<%@ 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的屬性嵌入到輸出中 |
jsp:forward | 將請求轉發給一個新頁面 |
jsp:plugin | 生成瀏覽器-特定代碼,為Java插件創建OBJECT或EMBED標簽 |
jsp:element | 動態的定義XML元素 |
jsp:attribute | 定義了動態定義的XML元素的屬性 |
jsp:body | 定義了動態定義XM L元素的body |
jsp:text | 用於在JSP頁面和文檔中編寫模板 |
七、JSP隱式對象
JSP支持9個自動定義的變量,這也稱為隱式對象。這些變量是:
對象 | 描述 |
---|---|
request | 這是與請求關聯的HttpServletRequest對象。 |
response | 這是與客戶端響應關聯的HttpServletResponse對象。 |
out | 這是用於向客戶端發送輸出的PrintWriter對象。 |
session | 這是與請求關聯的HttpSession對象。 |
application | 這是與應用程序上下文關聯的ServletContext對象。 |
config | 這是與頁面關聯的ServletConfig對象。 |
pageContext | 這個封裝特使用特定服務器的特性,如更高的性能jspwriter。 |
page | 這是this的一個簡單的同義詞,是用來調用由轉換的servlet類定義的方法。 |
Exception | Exception對象允許指定的JSP訪問異常數據。 |
八、控制流語句
JSP提供了強有力的Java工具來嵌入到Web應用程序中。可以在JSP編程中使用所有的API和Jave構建塊,包括決策語句、循環等。
九、決策的語句
if…else塊像普通的Scriptlet一樣開始,但Scriptlet結束於包含在Scriptlet標簽間的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
現在看看下面的switch…case塊,使用out.println()語句和內部Scriptletas編寫,與上述例子有一點區別:
<%! 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中使用循環塊的三種基本類型來實現JSP編程: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支持的邏輯和算術運算符。下表列出了所有運算符的優先級,從上到下,優先級依次降低。
在一個表達式,優先級越高的運算符會越先計算。
類型 | 運算符 | 結合性 |
---|---|---|
後綴運算符 | () [] . (dot operator) | 從左到右 |
一目運算符 | ++ - - ! ~ | 從右到左 |
倍數運算符 | * / % | 從左到右 |
加法運算符 | + - | 從左到右 |
位移運算符 | >> >>> << | 從左到右 |
代數運算符 | > >= < <= | 從左到右 |
賦值運算符 | == != | 從左到右 |
按位與運算符 | & | 從左到右 |
按位異或運算符 | ^ | 從左到右 |
按位或運算符 | | | 從左到右 |
邏輯與運算符 | && | 從左到右 |
邏輯或運算符 | || | 從左到右 |
條件運算符 | ?: | 從右到左 |
賦值運算符 | = += -= *= /= %= >>= <<= &= ^= |= | 從右到左 |
逗號運算符 | , | 從左到右 |
十二、JSP文字
JSP表達式語言定義了以下文字:
-
Boolean: true and false
-
Integer: 與Java相同
-
Floating point: 與Java相同
-
String: 帶有單引號和雙引號;’’轉義為\’’,’轉義為\’,\轉義為\。
- Null: null
測試工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test1/
JSP語法