JSP筆記

1. JSP的基本原理:

JSP本質是Servlet,當用戶向指定Servlet發送請求時,Servlet利用輸出流動態生成HTML頁面,包括每一個靜態的HTML標籤和所有在HTML頁面中出現的內容。

JSP在標準的HTML頁面中嵌入Java代碼,其靜態的部無須Java程序控制,只有那些需要從數據庫讀取或需要動態生成的頁面內容,才使用Java腳本控制。

JSP頁面的內容可分成以下兩部分:

  • 靜態部分:標準的HTML標籤、靜態的頁面內容,這些內容與靜態HTML頁面相同。
  • 動態部分:受Java程序控制的內容,這些內容由Java程序來動態生成


                               JSP頁面工作原理圖

根據上面的JSP頁面工作原理,可以得到以下4個結論:

  • JSP文件必須在JSP服務器內運行
  • JSP文件必須生成Servlet才能運行
  • 每個JSP頁面的第一個訪問者速度很慢,因爲必須等待JSP編譯成Servlet
  • JSP頁面的訪問者無須安裝任何客戶端,甚至不需要可以運行Java的運行環境,因爲JSP碳輸送到客戶端的是標準HTML頁面

2.JSP註釋

<%--註釋內容--%>

JSP的註釋是無法通過源代碼查看到的,不會被髮送到客戶端

3. JSP聲明

<!聲明部分>
JSP頁面的聲明部分將轉換成對應Servlet的成員變量或成員方法(全局變量)

4. JSP表達式

<%=表達式%>
輸出表達式語法後不能有(分號);

5. JSP腳本

<%Java代碼%>

JSP腳本部分聲明的變量是局部變量,不能使用private、public等訪問控制符修飾,不可以使用static修飾

6.JSP的3個編譯指令

指令標籤不會產生任何內容輸出到網頁中,主要用於整個JSP頁面的相關信息

  • page:該指令是針對當前頁面的指令,通常位於JSP頁面的頂端,一個JSP頁面可以有多條page指令
  • include:用於指定包含另一個頁面(靜態)
  • taglib:用於定義和訪問自定義標籤

使用編譯指令的語法格式如下:

<%@編譯指令名 屬性名="屬性值"...%>

6.1 page指令

page指令各屬性的意義:

  • language:聲明當前JSP頁面使用的腳本語言的種類,默認爲Java語言

  • extends:指定JSP頁面編譯所產生的Java類所繼承的父類,或所實現的接口

  • import:用來導入包。默認導入的包有:java.lang.*、javax.servlet.*、java.servlet.jsp.*、java.servlet.http.*。

  • sesseion:設定這個JSP頁面是否需要HTTP Session。

  • buffer:指定輸出緩衝區的大小。輸出緩衝區的JSP內置對象:out用於緩存JSP頁面對客戶瀏覽器的輸出,默認值爲8KB,可以設置爲none,也可以設置爲其他值,單位爲KB

  • autoFlush:當前輸出緩衝區即將溢出時,是否需要強制輸出緩衝區的內容。

  • info:設置該JSP程序的信息,也可以看做其說明,可以通過Servlet.getSessionInfo()方法獲取該值。

  • errorPage:指定錯誤處理頁面。

  • isErrorPage:設置本JSP頁面是否爲錯誤處理程序。

  • contentType:用於設定生成網頁的文件格式和編碼字符集,即MIME類型的頁面字符集類型,默認的MIME類型是text/html;默認的字符集類型爲ISO-8859-1。

  • pageEncoding:指定生成網頁的編碼字符集。

6.2 include指令

include用於文件包含。被包含的文件中的所有內容都被原樣包含到該JSP頁面中,如果被包含文件中有代碼,將不被執行。

incluse編譯指令的語法如下:

<%@include file="relativeURLSpec"%>

6.3 taglib指令

該指令用於加載用戶自定義標籤,其語法格式如下:

<%@taglib prefix="fix" uri="tagUriorDir"%>

prefix屬性:用於設置加載自定義標籤的前輟

uri屬性:用於指定自定義標籤的描述文件位置

7. JSP的7個動作指令

動作指令與編譯指令的區別:

編譯指令是通知Servlet引擎的處理消息,而動作指令是運行時的動作。編譯指令在JSP編譯成Servlet時起作用,而動作指令通常可替換成JSP腳本,它只是JSP腳本的標準化寫法。

JSP動作指令主要有如下7個:

  • jsp:forward:執行頁面轉向,將請求的處理轉發到下一個頁面。請求依然是一次請求,所以請求參數、請求屬性不會丟失。

  • jsp:param:用於傳遞參數,必須與其他支持參數的標籤一起使用。

  • jsp:include:用於動態引入一個JSP頁面。

  • jsp:plugin:用於下載JavaBean或Applet到客戶端。

  • jsp:useBean:創建一個JavaBean的實例。

  • jsp:setProperty:設置JavaBean實例的屬性值。

  • jsp:getProperty:輸出JavaBean實例的屬性值。

7.1 forward指令

格式如下:

<jsp:forward page="relativrURL|<%=expression%>"/>


<jsp:forward page="relativrURL|<%=expression%>">  
    <jsp:param name="" value=""/>
</jsp:forward>


7.2 include指令

格式如下:
<jsp:include page="relativrURL|<%=expression%>" flush="true"/>

<jsp:include page="relativrURL|<%=expression%>" flush="true">
    <jsp:param name="" value=""/>
</jsp:include>


flush屬性:指定輸出緩存是否轉移到導入文件中。

7.3 useBean、setProperty、getProperty指令

useBean的語法格式如下:

<jsp:useBean id="name" class="classname" scope="page|request|session|application"/>

setProperty的語法格式如下:

<jsp:setProperty name="BeanName" property="propertyName" value="value"/>
getProperty的語法格式如下:

<jsp:getProperty name="BeanName" property="property"/>

7.4 param指令

語法格式如下:

<jsp:param name="paramName" value="paramValue"/>
該指令與以下三個指令結合使用:

  • jsp:include
  • jsp:forward
  • jsp:plugin

8. JSP腳本中的9個內置對象(都是Servelt API接口的實例)

9個內置對象依次如下:

  • application:javax.servlet.ServletContext的實例,該實例代表JSP所屬的Web應用本身,可用於JSP頁面或者在Servlet之間交換信息。

  • config:javax.servlet.ServletConfig的實例,該實例代表該JSP的配置信息。

  • exception:java.lang.Throwable的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page的isErrorPage屬性爲true時,該對象纔可以使用。

  • out:java.servlet.jsp.JspWriter的實例,該實例代表JSP表面的輸出流,用於輸出內容,形成HTML頁面。

  • page:代表該頁面本身,通常沒有太大用處。也就是Servlet中的this,其類型就是生成的Servlet類,能用page的地方就可以用this。

  • pageContext:javax.servlet.jsp.PageContext的實例,該對象代表JSP頁面上下文,使用該對象可以訪問頁面中的共享數據。常用的方法有getServletContext()和getServeltConfig()等。

  • request:javax.servlet.http.HttpServletRequest的實例,該對象封裝了一次請求,客戶端的請求參數都被封裝在該對象裏。這是一常用的對象,獲取客戶端請求參數必須使用該對象

  • response:javax.servlet.http.HttpServletResponse的實例,代表服務器對客戶端的響應。

  • session:javax.servlet.http.HttpSession的實例,該對象代表一次會話。當客戶端瀏覽器與站點建立連接時,會話開始;當客戶端關閉瀏覽器時,會話結束。

application、session、request、page範圍區別:

  • application:對於整個Web應用有效,一是JSP、Servlet將數據放入application中,該數據將可以被該應用下其他所有JSP、Servlet訪問。

  • session:僅對一次會話有效,一是JSP、Servlet將數據放入session中,該數據將可以被本次會話其他所有JSP、Servlet訪問。

  • request:僅對本次請求有效,一是JSP、Servlet將數據放入request中,該數據將可以被該請求下其他所有JSP、Servlet訪問。

  • page:僅對當前頁面有效,一是JSP、Servlet將數據放入page中,該數據將只可以被當前頁面的JSP腳本、聲明部分訪問。





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