3. JSP語法:
3.1 JSP的結構:
一個JSP文件一般是由五部分組成:
(1) 普通的HTML標記符。
(2) JSP標籤。
(3) 變量和方法聲明。
(4) Java程序片。
(5) Java表達式。
其中後三條被成爲JSP的腳本部分。
3.2 JSP的語法:
3.2.1 變量的聲明:
(1)在“<%!和%>”之間聲明變量或方法。其中變量和方法可以是Java中的任何變量。其作用範圍是整個JSP文件。當多個用戶訪問這個頁面時,他們將共享這些變量,任何對變量的修改都會直接影響到其他用戶。這些變量只有服務器關閉時纔會釋放。
例如這個例子就是利用此方法聲明的變量,實現了訪問網頁計數功能:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGCOLOR=cyan><FONT size=1>
<%!int i=0;
%>
<%i++;
%>
<P>您是第
<%=i%>
個訪問本站的客戶。
</BODY>
</HTML>
另外,如果用這個方法來聲明方法,則其中方法是在整個JSP頁面有效,但在該方法中聲明的變量爲局部的,只在該法中有效調用完畢時即釋放。而用戶往往會調用方法來修改某個變量或直接修改變量,所以,在應用這種方法聲明變量時當你要試圖修改某個數據,儘量加上關鍵字synchronized以實現同步鎖定,防止同時修改變量。
利用該方法聲明的類,也是在JSP頁面內有效,可以在其範圍內使用該類的對象,具體方法和前面的一樣。
(2)在“<%和%>”之間聲明變量和方法。爲局部變量和方法,可以簡單的理解爲非共享變量,即每個客戶都有自己的變量,他們的操作不會影響到其他人,程序執行完內存自動釋放。大多的Java程序片是放在這裏的。
(3)筆者的簡易,儘量不要在JSP中過多使用前兩種方式來進行動態操作,應該儘量使用JavaBean來操作,儘量做到靜態頁面和動態頁面相分離,這也是爲什麼要用JSP替代Servlet的優點。
3.2.2 JSP中的註釋:
(1) HTML註釋:”<!--和-->”之間的爲註釋。
(2)JSP註釋:在”<%-- 和 --%>”之間的爲註釋。
3.2.3 JSP中的指令標籤:
3.2.3.1 page指令標籤
(1)page 指令用來指定整個頁面的一些屬性和這些屬性的值。
指令格式: <%@ page 屬性1=”屬性1的值” 屬性2=”屬性2的值”…%>
例如:<%@ page contentType="text/html; charset=gb2312" %> 可以指定頁面顯示漢語。
(2) import 指令可以指定多個值,爲導入JAVA類庫。
例如:<%@ import="java.sql.*",”java.awt.*” %>
(3) language屬性: 默認爲JAVA,目前也只支持JAVA
例如: <%@ page language=”java”%>
(4) contentType屬性:用來指定JSP頁面的編碼,默認屬性爲”text/html;
charset=ISO-8859-1”
(5) session 用於設置是否要使用內置的session對象。默認爲true。
(6) buffer 內置輸出流對象負責將服務器的某些信息或運行結果發送到客戶端顯示可以不設置,默認爲8kb。
(7) 指定out的緩衝區被填滿時,緩衝區是否自動判斷。默認爲true。
(8) isThreadSafe 屬性用來設置頁面是否可多線程訪問。默認爲true。
(9) info屬性爲JSP頁面準備一個字符串,屬性值爲字符串。
例:<%@ page info=”we are students”%> 可用getServletInfo();獲得。
一個綜合應用:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
其中errorPage是發生錯誤後應該轉到的異常處理的頁面
3.2.3.2 include指令標籤
(1)<%@ include file=”filename”%> 要注意在引用的文件中含有類似 page的contentType屬性設置,則此文件不要設置,否則會報錯。
(2)可作爲動作標籤,其格式爲:<jsp:include page=”fileName”/> 功能:可動態包含一個文件,即在執行時纔對這個文件進行包含,並且可以隨時修改包含文件,改後相應結果即發生變化,而靜態的引用只能重新編譯。
3.2.3.3 其他標籤:
(1) param標籤:以“名字-值”對應的形式爲其他標籤提供附加信息。這個標籤與jsp:include、jsp:forward、jsp:plugin標籤一起使用。
格式爲:<jsp:param name=”名字”, value=”指定給param的值”>
該標籤主要功能是和include標籤連用,可以達到給加載文件傳遞參數的作用。
例:
tom.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<% String str=request.getParameter("computer"); //獲取值。
int n=Integer.parseInt(str);
int sum=0;
for(int i=1;i<=n;i++)
{ sum=sum+i;
}
%>
<P>
從1到<%=n%>的連續和是:
<BR>
<%=sum%>
</BODY>
</HTML>
Mc1035.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<P>動態加載文件並傳遞參數效果:
<jsp:include page="tom.jsp">
<jsp:param name="computer" value="300" />
</jsp:include>
</BODY>
</HTML>
這樣在引用tom.jsp的同時就把參數computer的值傳了過去,要注意名稱要與tom.jsp裏的request.getParameter("computer");的一直。
(2)plugin動作標籤:用來保證客戶可以執行applet小程序。該標籤只是JSP頁面加載Java plugin,該插件負責客戶下載,並使用該插件來運行Java applet。
例:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<jsp:plugin type="applet" code="B.class" jreversion="1.2" width="200" height="260" >
<jsp:fallback>
Plugin tag OBJECT or EMBED not supported by browser.
</jsp:fallback>
</jsp:plugin>
</body></html>
當客戶訪問上述JSP頁面時,將導致登陸Sun公司下載Java plugin。並執行B.class。
筆者認爲現在很少有人用applet程序了,大多用JS