JSP 語法詳解(轉)[@more@]HTML 注釋 在客戶端顯示一個注釋. JSP 語法<!-- comment [ <%= expression %> ] --> 例子 1<!-- This file displays the user login screen --> 在客戶端的HTML源代碼中產生和上面一樣的數據: <!-- This file displays the user login screen --> 例子 2<!-- This page was loaded on <%= (new java.util.Date()).toLocaleString() %> --> 在客戶端的HTML源代碼中顯示為: <!-- This page was loaded on January 1, 2000 --> 描述這種注釋和HTML中很像,也就是它可以在"查看源代碼"中看到. 唯一有些不同的就是,你可以在這個注釋中用表達式(例子2所示).這個表達示是不定的,由頁面不同而不同,你能夠使用各種表達式,只要是合法的就行。更多的請看表達式隱藏注釋 寫在JSP程序中,但不是發給客戶。 JSP 語法<%-- comment --%> 例子:CODE:<%@ page language="java" %> A Comment Test
A Test of Comments
<%-- This comment will not be visible in the page source --%> 描述用隱藏注釋標記的字符會在JSP編譯時被忽略掉。這個注釋在你希望隱藏或注釋你的JSP程序時是很有用的。JSP編譯器不是會對<%--and--%>之間的語句進行編譯的,它不會顯示在客戶的瀏覽器中,也不會在源代碼中看到 聲明 在JSP程序中聲明合法的變量和方法 JSP 語法<%! declaration; [ declaration; ]+ ... %> 例子<%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %> 描述聲明你將要在JSP程序中用到的變量和方法。你也必須這樣做,不然會出錯. 你可以一次性聲明多個變量和方法,只要以";"結尾就行,當然這些聲明在Java中要是合法的。 當你聲明方法或變量時,請注意以下的一些規則: 聲明必須以";"結尾(Scriptlet有同樣的規則,但是 表達式就不同了). 你可以直接使用在<% @ page %>中被包含進來的已經聲明的變量和方法,不需要對它們重新進行聲明. 一個聲明僅在一個頁面中有效。如果你想每個頁面都用到一些聲明,最好把它們寫成一個單獨的文件,然后用<%@ include %>或元素包含進來。 表達式 包含一個符合JSP語法的表達式 JSP 語法<%= expression %> 例子<%= map.size() %> <%= numguess.getHint() %>. 描述表達式元素表示的是一個在腳本語言中被定義的表達式,在運行后被自動轉化為字符串,然后插入到這個表達示在JSP文件的位置顯示。因為這個表達式的值已經被轉化為字符串,所以你能在一行文本中插入這個表達式(形式和ASP完全一樣). 當你在JSP中使用表達式時請記住以下幾點: 你不能用一個分號(";")來作為表達式的結束符.但是同樣的表達式用在scriptlet中就需要以分號來結尾了!查看Scriptlet 這個表達式元素能夠包括任何在Java Language Specification中有效的表達式. 有時候表達式也能做為其它JSP元素的屬性值.一個表達式能夠變得很復雜,它可能由一個或多個表達式組成,這些表達式的順序是從左到右。 [/b]Scriptlet [/b]包含一個有效的程序段. JSP 語法<% code fragment %> 例子<% String name = null; if (request.getParameter("name") == null) { %> <%@ include file="error.html" %> <% } else { foo.setName(request.getParameter("name")); if (foo.getName().equalsIgnoreCase("integra")) name = "acura"; if (name.equalsIgnoreCase( "acura" )) { %> 描述一個scriptlet能夠包含多個jsp語句,方法,變量,表達式 因為scriptlet,我們便能做以下的事: 聲明將要用到的變量或方法(參考 聲明). 編寫JSP表達式(參考 表達式). 使用任何隱含的對象和任何用聲明過的對象 編寫JSP語句 (如果你在使用Java語言,這些語句必須遵從Java Language Specification,). 任何文本,HTML標記,JSP元素必須在scriptlet之外 當JSP收到客戶的請求時,scriptlet就會被執行,如果scriptlet有顯示的內容,這些顯示的內容就被存在out對象中。 Include 指令在JSP中包含一個靜態的文件,同時解析這個文件中的JSP語句. JSP 語法<%@ include file="relativeURL" %> 例子include.jsp: CODE: An Include Test The current date and time are <%@ include file="date.jsp" %> date.jsp:CODE:<%@ page import="java.util.*" %> <%= (new java.util.Date() ).toLocaleString() %> Displays in the page: The current date and time are Aug 30, 1999 2:38:40 描述< %@include %>指令將會在JSP編譯時插入一個包含文本或代碼的文件,當你使用<%@ include %>指命時,這個包含的過程就當是靜態的。靜態的包含就是指這個被包含的文件將會被插入到JSP文件中去,這個包含的文件可以是JSP文件,HTML文件,文本文件。如果包含的是JSP文件,這個包含的JSP的文件中代碼將會被執行。 如果你僅僅只是用include 來包含一個靜態文件。那么這個包含的文件所執行的結果將會插入到JSP文件中放<% @ include %>的地方。一旦包含文件被執行,那么主JSP文件的過程將會被恢復,繼續執行下一行. 這個被包含文件可以是html文件,jsp文件,文本文件,或者只是一段Java代碼,但是你得注意在這個包含文件中不能使用, ,,標記,因為這將會影響在原JSP文件中同樣的標記 ,這樣做有時會導致錯誤. 有一些<%@ include %>指命的行為是以特殊的JSP編譯條件為基礎,比如: 這個被包含的文件必須對所有客戶都有開放且必須f有效,或者它有安全限制 如果這個包含文件被改變,包含此文件的JSP文件將被重新編譯 屬性:file="relativeURL"這個包含文件的路徑名一般來說是指相對路徑,不需要什么端口,協議,和域名,如下: "error.jsp""templates/onlinestore.html""/beans/calendar.jsp" 如果這個路徑以"/"開頭,那么這個路徑主要是參照JSP應用的上下關系路徑,如果路徑是以文件名或目錄名開頭,那么這個路徑就是正在使用的JSP文件的當前路徑.Page 指令定義JSP文件中的全局屬性. JSP 語法<%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true | false" ] %> 例子<%@ page import="java.util.*, java.lang.*" %> <%@ page buffer="5kb" autoFlush="false" %> <%@ page errorPage="error.jsp" %> 描述<%@ page %>指令作用于整個JSP頁面,同樣包括靜態的包含文件。但是<% @ page %>指令不能作用于動態的包含文件,比如 你可以在一個頁面中用上多個<% @ page %>指令,但是其中的屬性只能用一次,不過也有個例外,那就是import屬性。因為import屬性和Java中的import語句差不多(參照Java Language),所以你就能多用此屬性幾次了. 無論你把<% @ page %>指令放在JSP的文件的哪個地方,它的作用范圍都是整個JSP頁面。不過,為了JSP程序的可讀性,以及好的編程習慣,最好還是把它放在JSP文件的頂部. 屬性language="java"聲明腳本語言的種類,暫時只能用"java" extends="package.class"標明JSP編譯時需要加入的Java Class的全名,但是得慎重的使用它,它會限制JSP的編譯能力. import="{package.class | package.* }, ..."需要導入的Java包的列表,這些包就作用于程序段,表達式,以及聲明。 下面的包在JSP編譯時已經導入了,所以你就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.* session="true | false"設定客戶是否需要HTTP Session.(學過ASP的人,應該對它不陌生)如果它為true,那么Session是有用的。 如果它有false,那么你就不能使用session對象,以及定義了scope=session的元素。這樣的使用會導致錯誤. 缺省值是true. buffer="none | 8kb | sizekb"buffer的大小被out對象用于處理執行后的JSP對客戶瀏覽器的輸出。缺省值是8kb autoFlush="true | false"設置如果buffer溢出,是否需要強制輸出,如果其值被定義為true(缺省值),輸出正常,如果它被設置為false,如果這個buffer溢出,就會導致一個意外錯誤的發生.如果你把buffer設置為none,那么你就不能把autoFlush設置為false. isThreadSafe="true | false"設置Jsp文件是否能多線程使用。缺省值是true,也就是說,JSP能夠同時處理多個用戶的請求,如果設置為false,一個jsp只能一次處理一個請求 info="text"一個文本在執行JSP將會被逐字加入JSP中,你能夠使用Servlet.getServletInfo方法取回。 errorPage="relativeURL"設置處理異常事件的JSP文件。 isErrorPage="true | false"設置此頁是否為出錯頁,如果被設置為true,你就能使用exception對象. contentType="mimeType [ ;charset=characterSet ]" | "text/html;charset=ISO-8859-1"設置MIME類型 。缺省MIME 類型是: text/html, 缺省字符集為 ISO-8859-1.重定向一個HTML文件,JSP文件,或者是一個程序段. JSP 語法"} /> or "} > value="{parameterValue | <%= expression %>}" />+ 例子 描述標簽從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象.標簽以下的代碼,將不能執行. 你能夠向目標文件傳送參數和值,在這個例子中我們傳遞的參數名為username,值為scott,如果你使用了標簽的話,目標文件必須是一個動態的文件,能夠處理參數. 如果你使用了非緩沖輸出的話,那么使用時就要小心。如果在你使用之前,jsp文件已經有了數據,那么文件執行就會出錯. 屬性page="{relativeURL | <%= expression %>}"這里是一個表達式或是一個字符串用于說明你將要定向的文件或URL.這個文件可以是JSP,程序段,或者其它能夠處理request對象的文件(如asp,cgi,php). +向一個動態文件發送一個或多個參數,這個文件一定是動態文件. 如果你想傳遞多個參數,你可以在一個JSP文件中使用多個。name指定參數名,value指定參數值.獲取Bean的屬性值,用于顯示在頁面中 JSP 語法 例子