- JSP應用與開發(fā)技術(第3版)
- 馬建紅 李學相 韓穎 王瑞娟 張晗
- 2392字
- 2020-06-30 17:13:22
3.2 JSP的腳本元素
JSP語句中的JSP腳本元素(Scripting Elements)用來插入一些Java語言程序代碼,這些Java語言的程序代碼將出現(xiàn)在由當前JSP頁面生成的Servlet中,用來實現(xiàn)一些功能。它包括隱藏注釋、HTML注釋、聲明、腳本代碼和表達式等內容。
3.2.1 隱藏注釋
JSP語句中的隱藏注釋(Hidden Comment)鑲嵌在JSP程序的源代碼中,使用隱藏注釋的目的并不是提醒用戶,而是為了:
使程序設計人員和開發(fā)人員閱讀程序方便,增強程序的可讀性。
在增強程序可讀性的同時,又顧及程序系統(tǒng)的安全性。如果用戶通過Web瀏覽器查看該JSP頁面,將看不到隱藏注釋的內容。
隱藏注釋寫在JSP程序代碼中,但不發(fā)送到客戶端。
JSP語法格式如下:
<%-- comment --%>
或
<%-- 注釋 --%>
隱藏注釋標記的字符在JSP編譯時會被忽略,它在希望隱藏或者注釋JSP程序時是非常有用的。JSP編譯器不會對<%--和--%>之間的語句進行編譯,且該語句也不會顯示在客戶端的瀏覽器中。
【例3-2】隱藏注釋(hidden-comment.jsp)。
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>隱藏注釋示例</title>
</head>
<body>
<h1>隱藏注釋測試</h1>
<%-- 這行注釋將不顯示在客戶端的瀏覽器上 --%>
</body>
</html>
將此程序執(zhí)行后,在瀏覽器上顯示如圖3-2所示的結果。查看源文件,注釋的語句沒有顯示出來。
圖3-2 hidden-comment.jsp頁面運行結果
3.2.2 HTML注釋
HTML注釋又稱為顯式注釋,用戶能夠在客戶端看到注釋內容。HTML注釋形式如下:
<!-- 注釋語句[<%=表達式%>] -->
例如:
<!-- HTML注釋,用戶將會看到本段注釋內容-->
【例3-3】HTML注釋(html-notes.jsp)。
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>HTML注釋</title>
</head>
<body>
<!-- This file displays the user login screen -->
未顯示上一行的注釋。
</body>
</html>
JSP語法中的HTML注釋和HTML語言本身十分相似,它們都可以通過在某一JSP頁面中右擊,然后在彈出的快捷菜單中選擇“查看源文件”命令查看其代碼。
將此程序執(zhí)行后,可在瀏覽器上顯示如圖3-3所示的結果。查看源文件,注釋的語句會顯示出來。
圖3-3 html-notes.jsp頁面運行結果
【例3-4】比較兩種注釋方式(comparison-notes.jsp)。
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>要多加練習</title>
</head>
<body>
<!--This page was loaded on <%= (new java.util.Date()).toLocaleString() %> -->
在源文件中包括當前時間。
<%=(new java.util.Date()).toLocaleString()%>
</body>
</html>
將此程序執(zhí)行后,可在瀏覽器上顯示如圖3-4所示的結果。查看源文件,HTML注釋中的時間會計算出結果并顯示出來。
圖3-4 comparison-notes.jsp頁面運行結果
由于Scriptlets包含Java代碼,所以Java中的注釋規(guī)則在Scriptlets中也適用。常用的Java注釋使用“//”表示單行注釋,使用“/* */”表示多行注釋。例如:
也可以這樣:
3.2.3 聲明
JSP中的聲明(Declaration)用來定義一個或多個合法的變量(包括普通變量和類變量)和方法,并不輸出任何的文本到輸出流,聲明的變量和方法將在JSP頁面初始化時被初始化。
JSP聲明的語法格式如下:
<%! declaration; [ declaration; ] ... %>
或
<%! 聲明; [聲明; ] ... %>
例如:
<%! int a=1; %>
<%! int b; %>
<%! String s="test"; %>
JSP語法中的聲明語句用來聲明將要在JSP中使用的變量和方法。變量和方法必須要聲明,否則就會出錯。可以一次聲明多個變量和方法,只要以“;”結尾即可,而且必須保證這些聲明在Java中是合法的。
在聲明方法或變量時,應注意以下方面:
聲明必須以“;”結尾,在這一點上與JSP語法中的Scriptlet語句有同樣的規(guī)則,但是JSP語法中的表達式不能以“;”結尾。
可以直接使用在<%@ page %>中被包含進來的已經聲明的變量和方法,不需要對它們重新進行聲明。
一個聲明僅在一個頁面中有效,對于一些在每個頁面都用得到的聲明,最好把它們寫成一個單獨的文件,然后用<%@ include %>或<jsp:include >語句把該文件及文件中的各個元素包含進來。
由于聲明不會有任何輸出,因此它們往往和JSP表達式或Scriptlet結合在一起使用。
例如下面代碼定義了變量a和變量b:
<%!
int a= 2;
int b= 3;
%>
輸出a與b的乘積為:
<%= a*b %>
JSP的變量可以分為局部變量和全局變量,在JSP中聲明變量時,要注意變量的定義域。
在程序片段中聲明的變量,即在<%…%>中聲明的變量是JSP的局部變量,它們對外部函數是不可見的。
在<%!…%>中聲明的變量是全局變量,這種變量在整個JSP頁面內都有效。因為JSP引擎將JSP頁面編譯成Java文件時,將這些變量作為類的成員變量,這些變量的內存空間直到服務器關閉后才釋放。
在<%!…%>中聲明的方法在整個JSP頁面內有效,但是在該方法內定義的變量只在該方法內有效。
【例3-5】比較局部變量和全局變量的不同之處(welcome.jsp)。
執(zhí)行此程序,并且不斷地刷新頁面,可以看到全局變量Num隨著刷新不斷增大,而局部變量count始終是1,可在瀏覽器上顯示如圖3-5所示的結果。
圖3-5 welcome.jsp頁面運行結果
【例3-6】方法的聲明(dec-method.jsp)。
在這個實例中聲明計算圓的面積和周長的兩種方法,根據從表單提交圓的半徑調用這兩種方法進行計算。
在表單中輸入半徑的值,單擊“開始計算”按鈕,程序執(zhí)行顯示結果,如圖3-6和圖3-7所示。
圖3-6 輸入半徑為3
圖3-7 dec-method.jsp頁面計算并顯示結果
3.2.4 腳本代碼
JSP中的腳本代碼(Scriptlets)是一段Java程序代碼,這些代碼在請求處理時在服務器端按順序執(zhí)行,腳本代碼中如果使用了out對象,則會在客戶端顯示輸出內容。
腳本代碼的語法格式如下:
<% code fragment %>
或
<% 代碼 %>
一個Scriptlet能夠包含多個JSP語句、方法、變量、表達式。有了Scriptlet,用戶可以進行以下操作:
聲明將要用到的變量。
編寫JSP表達式。
使用任何隱含的對象和任何用<jsp:useBean>聲明過的對象。
編寫JSP語句(如果使用Java語言,這些語句必須遵從Java Language Specification,即Java語言規(guī)范)。
填寫任何文本和HTML標記,注意JSP元素必須在Scriptlet之外。
當JSP收到客戶的請求時,Scriptlet就會被執(zhí)行,如果Scriptlet有顯示的內容,這些顯示的內容就可以存放在out對象中。
<%
String t = "test";
out.println(t);
%>
Scriptlet中的代碼將被照搬到Servlet內,而Scriptlet前面和后面的靜態(tài)HTML代碼將被轉換成println語句。這就意味著,Scriptlet內的Java語句并非一定要完整,沒有關閉的塊將影響Scriptlet外的靜態(tài)HTML。
【例3-7】程序scriptlets.jsp混合了靜態(tài)HTML代碼和Scriptlet,程序運行結果如圖3-8所示。
圖3-8 scriptlets.jsp頁面運行結果
注意
? 如果要在Scriptlet內部使用字符“%>”,必須寫成“%\>”。
? 腳本段內不能定義方法,與聲明不同,這是因為JSP引擎會把腳本段內的代碼放到Servlet的方法內,而方法是不能被嵌套定義的。
3.2.5 表達式
JSP能夠計算表達式(Expression),并向JSP頁面輸出表達式的運算結果。其語法格式如下:
<%= expression %>
或
<%= 表達式 %>
表達式元素表示的是一個在Java腳本語言中被定義的Java表達式,在運行后被自動轉換成字符串,然后插入到表達式所在JSP文件的位置顯示。表達式在運行時進行計算(頁面被請求時),因此可以訪問和請求有關的全部信息。例如:
<%= new java.util.Date() %>//輸出系統(tǒng)當前時間
<%= "Hello" %> //輸出Hello
<%= 1+3+5 %> //輸出9
在JSP頁面中使用表達式時應注意以下兩點:
不能用分號(;)作為表達式的結束符,這一點與Scriptlet不同,同樣的表達式用在Scriptlet中時,就需要以分號來作為一個Scriptlet語句的結尾。
有時表達式也能作為其他JSP元素的屬性值,一個表達式能夠變得很復雜,它可能由一個或者多個表達式組成,這些表達式的順序是從左到右。
注意
? JSP的表達式中沒有分號,除非在加引號的字符串部分才使用分號。
? 表達式實際上是被轉換成out.println()方法中的內容。如<%= "hello world "%>相當于JSP頁面中的<%out.println("hello world "); %>。
- PyTorch自然語言處理入門與實戰(zhàn)
- Quarkus實踐指南:構建新一代的Kubernetes原生Java微服務
- Spring+Spring MVC+MyBatis整合開發(fā)實戰(zhàn)
- Java EE 7 Performance Tuning and Optimization
- RabbitMQ Essentials
- 劍指大數據:企業(yè)級數據倉庫項目實戰(zhàn)(在線教育版)
- Apache Camel Developer's Cookbook
- 微課學人工智能Python編程
- C編程技巧:117個問題解決方案示例
- Building Slack Bots
- Ubuntu Server Cookbook
- 絕密原型檔案:看看專業(yè)產品經理的原型是什么樣
- Learning SaltStack(Second Edition)
- Web 2.0策略指南
- 網頁設計理論與實踐