官术网_书友最值得收藏!

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 "); %>。

主站蜘蛛池模板: 吕梁市| 清水河县| 鹰潭市| 怀远县| 临泽县| 闽清县| 绥江县| 海兴县| 大田县| 衡南县| 托克逊县| 同德县| 湾仔区| 镇远县| 布尔津县| 双柏县| 惠安县| 承德市| 莫力| 南雄市| 嘉鱼县| 滨海县| 舒城县| 外汇| 神木县| 榆林市| 鄄城县| 阜平县| 佛冈县| 永春县| 雷山县| 宝鸡市| 固镇县| 绥宁县| 泸西县| 尚义县| 靖江市| 双江| 义马市| 河津市| 凤冈县|