第四章 JSP語法詳解
1. (p67)JSP將動態部分用特殊的標記嵌入,這些標記通常以“<%”開始,並以“%>”結束。
2. (p67)三類主要的JSP元素:
——Scripting elements:可以定義最終轉換爲Servlet的部分
——Directives:可以控制這個Servlet的整體結構
——Actions:可以指定可重用的已有組件,另外還可以控制JSP引擎的運行
3. (p68)一般的註釋:<!--comment-->
隱藏的註釋:<%--comment--%>
用隱藏註釋標記的字符會在JSP編譯時被忽略。JSP編譯器不會對<%--and--%>之間的語句進行編譯,它不會顯示在客戶的瀏覽器中,也不會出現在源代碼中。
4. (p68)聲明變量和方法:<%! declaration; [declaration]%>
一般情況下,一個聲明的有效範圍是本頁面。但是,如果JSP源文件用<jsp:include>指令或include指令包含一些靜態文件,聲明的有效範圍將會擴大,也就是說:聲明在該靜態文件中也有效。但是如果JSP源文件中用<jsp:include>指令包含進來一個動態文件,主JSP文件中的聲明在該動態文件中將不起作用。
5. (p69)表達式:<%=expression %>
表達式用於求值,然後其值轉化爲字符串,而且插入在JSP文件中顯示該表達式的地方。而且可以在文本中使用表達式。表達式標籤能包含符合JAVA語言規範的任何有效表達式,但是要注意:不能使用分號作爲表達式的結尾,然而,在腳本段<%……%>標籤中,表達式要求以分號作爲結尾。
例子1:
<%! String s = new String("hello"); %>
<font color="blue"><%=s%></font>
例子2:
隨機顯示一個數字:
<font color="blue"><%=java.lang.Math.random()%></font>
6. (p70)Page指令用來定義JSP文件中的全局屬性。在一個JSP頁面中,可以定義一個或多個Page指令。但是,除了import屬性以外的其他幾種屬性,只能定義一次。<%@page%>指令作用於整個JSP頁面,同樣包括靜態的包含文件。但是不能作用於動態的包含文件。
<% page attribute="value"...%>
屬性:
1)<%@ page language="java"%>
指定文件中所使用的腳本語言,目前僅java爲有效值和默認值。該指令作用於整個文件,當多次使用該指令時,只有第一次使用是有效的。
2)<%@ page import="java.io.*,java.util.*" %>
指定導入的Java軟件包名或者類名列表,該列表用逗號分隔,在JSP文件中,可以多次使用該指令來導入不同的軟件包。
3)<%@ page content-type="text/html;charset=GB2312" %>
指定響應結果的MIME類型,默認的MIME類型是text/html。默認字符編碼爲ISO-8859-1。當多次使用該指令時,只有第一次使用是有效的。
4)<%@ page session="true" %>
指定JSP頁是否使用Session,默認爲true。如果它爲false,就不能使用session對象,以及定義scope=session的<jsp:useBean>元素,這樣的使用會導致錯誤。
5)<%@ page buffer="none | 8kb | sizekb" %>
Buffer的大小被out對象用於緩存處理執行後的JSP對客戶瀏覽器的輸出。
6)<%@ page autoFlush="true | false" %>
用來設置當buffer溢出時,是否需要強制輸出。如果其值定義爲true,則輸出正常;如果它被設置爲false,當buffer溢出時,就會導致一些意外錯誤的發生。如果把buffer設置爲none,那麼就不能把autoFlush設置爲false。默認是true。
7)<%@ page isThreadSafe="true | false" %>
用來設置JSP文件是否支持多線程使用。如果設置爲true,那麼一個JSP能夠同時處理多個用戶的請求;相反,如果設置爲false,一個JSP只能一次處理一個請求。默認值爲true。
8)<%@ page info="text" %>
在JSP被執行時,用來描述當前JSP文件的相關信息。可以通過Servlet.getServletInfo()方法取得。
9)<%@ page errorPage="relativeURL" %>
設置處理異常事件的JSP文件。當發生異常時,就跳轉到relativeURL指定的界面上。
10)<%@ isErrorPage="true | false" %>
設置此頁是否爲出錯頁,如果被設置爲true,則可以使用exception對象。默認爲false。
11)<%@ extends="package.class" %>
表明JSP編譯時需要加入的Java class的全名,但是需要慎重使用,會限制JSP的編譯能力。
18. (p72)在JSP文件中用Include指令包含一個靜態的文件,同時解析這個文件中的JSP語句:<%@ include file="path" %>
Include命令將在JSP編譯時插入一個包含文本或代碼的文件。當使用include時,這個包含的過程是靜態的。這個被包含的文件所執行的結果將會插入到JSP文件中放<%@include %>的地方。
19. (p77)<jsp:include>標籤允許包含動態文件和靜態文件。如果文件是靜態文件,那麼把包含的文件內容加到jsp文件中,這個被包含文件不會被JSP編譯器執行。相反,如果這個被包含文件是動態的文件,那麼這個被包含文件將會被JSP編譯器執行。
20. (p78)<jsp:forward>標籤重定向到一個HTML文件、JSP文件,或者一個程序段。該標籤從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象。<jsp:forward>標籤以下的代碼,將不能執行。可以使用<jsp:param>標籤向目標文件傳遞參數和值,注意如果使用了<jsp:param>標籤,那麼目標文件必須是一個動態的文件。
21. (p80)<jsp:useBean>標籤用來在JSP頁面中創建一個Bean實例並指定它的名字以及作用範圍。至於如何理解,請參考下面兩個帖子:
http://turingbook.group.javaeye.com/group/blog/577256
http://www.wang48.com/jishubaodianview/?jsd_id=201
22. (p81)<jsp:getProperty name="name" property="propertyName" /> 將獲得Bean的屬性值,並將之轉換爲一個字符串,然後顯示在JSP頁面中。注意事項:
1)在使用<jsp:getProperty>之前,必須用<jsp:useBean>創建它。
2)不能使用<jsp:getProperty>來檢索一個已經被索引了的屬性。
3)能否和JavaBeans組件一起使用<jsp:getProperty>,但是不能與EJB一起使用。
23. (p85)<jsp:plugin>元素用於在瀏覽器中播放或顯示一個對象(典型的就是Applet和Bean),而這種顯示需要有瀏覽器的java插件。
24. 本章最後的例子沒有看