JSP 知識點


JSP 知識點可以用“23379”來概括,即兩種註釋,三種指令,三個腳本元素,七個動作,九個內置對象。具體如下:

兩種註釋: 一種是HTML的註釋,用於描述JSP頁面執行後的結果頁面的功能:<!--   -->:可以在客戶端顯示,查看HTML文件時可以顯示
一種是JSP本身的,用來描述JSP代碼的:<%--   --%>:只在源代碼中顯示,在客戶端不可以顯示

三種指令

age指令:描述了和頁面相關的指示信息。在一個頁面中,page指令可以出現多次,但是每一種屬性只能出現一次(除了import屬性),重複的屬性設置將覆蓋先前的設置。
<%@page language=" "  session="true|false"  erroPage=" "  isErrorPage="
import=" "...%>
在一個JSP文件中可以定義多個page指令,但不可以多次指定同一屬性,除了import屬性。
記住:在JSP中缺省導入的包有java.lang javax.servlet javax.servlet.http javax.servlet.jsp.
session屬性的缺省值是true,如果指定session="false",則session隱含變量未定義,使用時將引起錯誤。


include指令:用來包含另一個文件
<%@include file=" "%>  :將指定的JSP程序或者HTML文件包含近來

taglib指令:用來指示這個JSP頁面所使用的標籤庫
<%@ taglib uri=" " prefix=" " %>

三個腳本元素

聲明:頁面範圍的變量和方法的聲明,被聲明的變量和方法將在JSP頁面初始化時初始化。
<%! ...%>
實際上,聲明變量和方法的語句完全可以放在腳本中<%   ... %>,兩者的區別是在生成的servlet中寫入代碼的位置,放在<%! ...%>中的聲明語句在編譯爲Servlet的時候將作爲類的成員(在_jspService()方法之外)而存在,而放在<%   ... %>中的聲明將放在_jspService()方法內部被聲明。因此在聲明中聲明的變量是全局的,在腳本中聲明的變量是局部的。因此在聲明中聲明的變量對腳本,表達式,HTML都是可見的,但在腳本中聲明的變量僅在腳本範圍內可見。在聲明中可以:
變量聲明:小心變量的寫權限,因爲servlet默認是多線程的。
方法定義:因爲生成的代碼不在_jspService()方法中,所以它沒有權限訪問內置對象,如果要  使用它們,必須將之顯式傳遞到方法中。
內部類定義:內部類式解決類型安全方式中的方案之一

腳本(Scriptlet):嵌入頁面內的JAVA程序片段
<%   ... %>
在腳本中使用的式JAVA中的語法。
Scriptlet代碼成了Servlet中_jspService()方法的一部分
而上面聲明中的代碼是在_jspService()方法之外(作爲類的成員)與生成的源文件合成一體。
注意Scriptlet,表達式,HTML代碼全部集成到_jspService()方法中。

表達式:把表達式變成String類型以便於包含在頁面的輸出中
<%=...%>
注意表達式一定要有一個可以輸出的值纔可以。

七個動作

動作可以影響輸出的文本流,使用編輯建立對象。
id屬性和scope屬性式每一個JSP動作都具有的屬性,其中id表示一個動作的名稱,而scope表示一個動作的作用域。
scope作用域的取值有:
page:由javax.servlet.jsp.PageContext得到在用戶請求次頁面過程中有效
request:由ServletRequest.getAttribute(name)得到在用戶的整個請求過程中有效
session:由HttpSession.getValut(name)得到在用戶的整個會話期有效
application:由ServletContext.getAttribute(name)得到在WEB應用程序執行期間有效

<jsp:useBean> </jsp:useBean>  :是JSP中最重要的一個動作,它可以動態使用JavaBeans組件來擴充JSP的功能。
<jsp:setProperty> </jsp:setProperty> :用於向一個JavaBean的屬性賦值。注意在這個動作中使用到的name屬性的值將是一個前面已經使用<jsp:useBean> 動作引入的JavaBean的名字。
<jsp:getProperty> </jsp:getProperty> :用於從一個JavaBean中得到某個屬性的值,無論原來這個屬性是什麼類型的,都將被轉換成一個String類型的值。

<jsp:include page=" "> </jsp:include>:用於引入一個靜態或動態的頁面到JSP文件中,該動作可以包含一個或幾個<jsp:param> 子動作用於向要引入的頁面傳遞參數。

<jsp:forward page=" "> </jsp:forward>:用於引導客戶端的請求到另一個頁面或者是另一個Servlet中去。該動作可以包含一個或幾個<jsp:param> 子動作用於向要引入的頁面傳遞參數。
當<jsp:forward>動作發生的時候,如果已經有文本被寫入輸入流而且頁面沒有設置緩衝,那麼將拋出IllegalStateException異常。

<jsp:param name=" " value=" "/>:常常是作爲<jsp:include >,<jsp:forward>,<jsp:plugin> 的子動作使用。

<jsp:plugin type="applet|javabean">  </jsp:plugin>:用的較少,它提供了一種在JSP文件種嵌入客戶端運行的JAVA程序(如:APPLET,JAVABENA)的方法。

九個內置對象

內置對象(又叫隱含對象,有9個內置對象):不需要預先聲明就可以在腳本代碼和表達式中隨意使用

out:javax.servlet.jsp.JspWriter類型,代表輸出流的對象。作用域爲page(頁面執行期)

request:javax.servlet.ServletRequest的子類型,此對象封裝了由WEB瀏覽器或其它客戶端生成地HTTP請求的細節(參數,屬性,頭標和數據)。作用域爲request(用戶請求期)。
方法由:
java.lang.String getHeader(java.lang.String name)
 java.util.Enumeration getHeaderNames()
 HttpSession getSession()
java.lang.String getParameter(java.lang.String name)
 java.util.Enumeration getParameterNames()
void setCharacterEncoding(java.lang.String env)
java.lang.Object getAttribute(java.lang.String name)
java.util.Enumeration getAttributeNames()
void removeAttribute(java.lang.String name)

response:javax.servlet.ServletResponse 的子類型,此對象封裝了返回到HTTP客戶端的輸出,向頁面作者提供設置響應頭標和狀態碼的方式。經常用來設置HTTP標題,添加cookie,設置響應內容的類型和狀態,發送HTTP重定向和編碼URL。作用域爲page(頁面執行期)。
方法有:
void sendRedirect(java.lang.String location)
 boolean isCommitted()
 void setStatus(int sc)
 void setHeader(java.lang.String name, java.lang.String value)
void addHeader(java.lang.String name, java.lang.String value)
 
pageContext:javax.servlet.jsp.PageContext(抽象類)類型,作用域爲page(頁面執行期)。此對象提供所有四個作用域層次的屬性查詢和修改能力,它也提供了轉發請求到其它資源和包含其他資源的方法:
該對象的方法都是抽象方法

session:javax.servlet.http.HttpSession 類型,主要用於跟蹤對話。作用域session(會話期—)。HttpSession是一個類似哈希表的與單一WEB瀏覽器會話相關的對象,它存在於 HTTP請求之間,可以存儲任何類型的命名對象。
如果不需要在請求之間跟蹤會話對象,可以通過在page指令中指定session="false"
方法有:
java.lang.Object getAttribute(java.lang.String name)
java.util.Enumeration getAttributeNames()
void setAttribute(java.lang.String name, java.lang.Object value)
 long getCreationTime()
 java.lang.String getId()
需要記住的是pageContext對象也可以與session.getAttribute(),session.setAttribute()一樣的方式取得並設置會話屬性。

application:javax.servlet.ServletContext 類型,servlet的環境通過調用getServletConfig().getContext()方法獲得。作用域是application(整個程序運行期)。它提供了關於服務器版本,應用級初始化參數和應用內資源絕對路徑,註冊信息的方式
方法有:
java.lang.String getRealPath(java.lang.String path) :獲取應用內資源絕對路徑
 java.lang.String getServerInfo()  :獲取服務器信息
java.lang.String getInitParameter(java.lang.String name) :獲取應用級初始化參數
 java.util.Enumeration getInitParameterNames()
java.lang.Object getAttribute(java.lang.String name)
void setAttribute(java.lang.String name, java.lang.Object object)  //這兩個方法同seesion中的方法有一樣的作用,只不過它跟蹤的會話信息的範圍更大了,是整個application.在實際應用中,根據需要選擇使用哪個進行跟蹤會話。

config:javax.servlet.ServletConfig,作用域爲page(頁面執行期)

exception:java.lang.Throwable, 通過JSP錯誤頁面中一個catch塊已經益出但沒有捕獲的java.lang.Throwable的任意實例,傳向了errorPage的URI。作用域爲page(頁面執行期)。注意exception只有在page指令中具有屬性isErrorPage="true"時纔有效。

page:java.lang.Object類型,指向頁面自身的方式。作用域爲page(頁面執行期)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章