JSP及其相關技術

1.JSP註解

<!--   --> html註解,瀏覽器可見

<%--  -- %> jsp註解,瀏覽器不可見

2.JSP指令

jsp 指令用來向JSP引擎提供編譯信息,所有的jsp指令都只在當前整個頁面中有效。jsp指令有3類

(1).page指令稱爲頁面指令,用來定義jsp頁面的全局屬性,該配置會作用於整個jsp頁面。page指令用來指定所使用的腳本語言、導入指定的類及軟件包等

page指令共包含13個屬性,分別如下:language,extends , import,session , buffer , autoFlush , isThreadSafe , info , ErrorPage , isErrorPage ,

contentType , pageEncoding.

(2).include指令:是文件加載指令,用於在jsp文件中插入一個包含文本或代碼的文件,它把文件插入後與原來的jsp文件合併成一個新的jsp文件。如果被插入的文件發生了變化,則包含這個文件的jsp文件需要重新編譯。編譯之後會生成一個class文件。include指令只有file一個屬性,指定被插入文件的位置,一般不使用 " / "開頭,而使用相對路徑。   被包含的文件可以是 .html文件,txt文檔,jsp文件

(3).taglib指令 用來應用標籤庫並設置標籤庫的前綴。taglib指令有兩個屬性,uri屬性來制定標籤文件或庫存放的位置,prefix屬性用來指定標籤庫所使用的前綴

jsp指令使用格式  <%@  指令    屬性=“ ”   %>

3.JSP腳本元素

jsp聲明語句 <%!  變量或方法定義 %> java變量的聲明,變量的類型可以是java語言中所提供的任意數據類型,使用jsp聲明語句聲明的變量將來會轉換成Servlet類中的成員變量,這些變量在整個JSP頁面內都有效,因此也被被稱爲JSP頁面的成員變量。其中聲明的方法將來也會轉換成Servlet類中的成員方法。

jsp表達式  <%= 表達式 %> ,這個表達式必須能夠求值,並且計算結果會以字符串形式發送到客戶端顯示出來。jsp表達式的值會作爲HTML頁面的內容

JSP Scriptlet是一段java代碼。當需要使用java實現一些複雜操作或控制時,jsp表達式往往不能滿足要求,此時就需要用到jsp Scriptlet.在jsp Scriptlet中聲明的變量是局部變量。

4.JSP動作元素

jsp動過元素用來控制jsp的行爲,執行一些常用的jsp頁面動作。通過動作元素可以實現使用多行java代碼能夠實現的效果。如動態插入文件,重用javaBean組件

<jsp:include >動作元素 既可以包含靜態文件,也可以包含動態文件,所謂動態包含某個文件,值的是當jsp頁面運行時纔會載入該文件。如果包含的是jsp文件,則jsp編譯器要先執行該文件,再將執行結果發送到客戶端並顯示出來。而include指令只是簡單地將文件內容加入到jsp文件中,從而將兩個文件合併成一個,被包含的文件不會被jsp編譯器執行。<jsp:include>動過元素包含兩個屬性:page屬性:指定被包含文件的url地址,是一個相對路徑。flush屬性:指定當緩衝區滿時,是否清空。默認值是false。

語法格式:<jsp:inlcue page=" "></jsp:include>

<jsp:forward>動作元素用於頁面重定向它的作用是停止當前jsp頁面的執行,而將客戶端請求交給另一個jsp頁面。要注意轉發和重定向的區別,轉發是在服務器端進行的,不會引起客戶端的二次請求,因此瀏覽器的地址欄不會發生任何變化,效率也比重定向要高。<jsp:forward>動作元素只包含一個page屬性,page屬性指定文件的URL。

<jsp:forward page=" "></jsp:forward>

<jsp:param>動作元素是一種提供參數的附屬動作元素,它以“名-值”對的形式爲其他動作元素提供附加信息。一般與<jsp:inlcude><jap:forward>一起使用。

當<jsp:include>與<jsp:param>一起使用時,可以在加載文件的過程中同時向該文件提供信息,再被加載的文件中用request.getParameter("名");的方式獲取值。

語法格式<jsp:param  name="參數名字" value="指定給param的參數值"> ,<jsp:include><jsp:param /></jsp:include>

<jsp:param>與<jsp:forward>一起使用時類似

<jsp:plugin>動作元素 可以將服務器端的javaBean或applet下載到客戶端執行。屬性有很多

<jsp:useBean>動作元素 用來裝載一個將在jsp頁面中使用的javaBean。

語法格式:<jsp:useBean id=" " class="  " scope=" "> id:指定javaBean的實例名,class:指定javaBean的全限定名,scope:指定引入的javaBean的作用域,默認當前頁

<jsp:setProperty>動作元素,獲取到Bean實例之後,便可以利用<jsp:setProperty>動作元素來設置或修改Bean中的屬性值。

語法格式<jsp:setProperty name=" " property=" " value=" "> name:要進行設置javaBean的實例名,property:要設置的javaBean實例中屬性名,value:要設置的屬性的值。

<jsp:getProperty>動作元素  用來提取指定Bean屬性的值,並將其轉換成字符串,然後輸出。

語法格式:<jsp:getProperty name=" " property=" "> name:指定要輸出的javaBean的實例名。property:指定需要輸出的javaBean實例中的屬性名。

javaBean類中沒有屬性也是完全可以的,但必須有操作屬性的getter 和 setter 方法。<jsp:setPorperty>和<jsp:getProperty>根本上是通過setter和getter方法來完成賦值和取值操作的。

5.JSP內置對象   爲了簡化Web應用程序的開發,在JSP中定義了一些有JSP容器實現和管理的內置對象,這些對象可以直接在JSP頁面中使用,而不需要jsp頁面編寫者對它們進行實例化。這九個內置對象都是Servlet API接口的實例

4中屬性的作用範圍:page , request , session , application

page 範圍:指所設置的屬性僅在當前頁面內有效,使用pageContext的setAttribute()方法可以設置屬性,使用pageContext的getAttribute()方法可以獲得屬性

request 範圍:值屬性僅在一次請求的範圍內有效。

session 範圍:指的是屬性僅在瀏覽器與服務器進行一次會話的範圍內有效。

application 範圍:值屬性在整個Web應用中都有效,直到服務器停止後才失效。

 request請求對象 類型                        javax.servlet.ServletRequest                             作用域Request 

 response響應對象類型                     javax.servlet.SrvletResponse                              作用域Page  

pageContext頁面上下文對象類型      javax.servlet.jsp.PageContext                             作用域Page   

session會話對象類型                        javax.servlet.http.HttpSession                              作用域Session 

application運用程序對象類型            javax.servlet.ServletContext                                 作用域Application 

 out輸出對象類型                              javax.servlet.jsp.JspWriter                                     作用域Page 

 config配置對象類型                         javax.servlet.ServletConfig                                    作用域Page 

 page頁面對象類型                           javax.lang.Object                                                    作用域Page  

 exception例外對象類型                   javax.lang.Throwable                                              作用域page

request 對象  :用於獲取客戶端信息,例如我們在表單中填寫的信息等,實際上,JSP容器會將客戶端的請求信息封裝在request對象中。在客戶端發出請求時會創建request對象,在請求之後會銷燬request對象。

request 對象中包含的主要方法如下:

Object  getAttribute(String name):獲取指定的屬性值。 void  setAttribute(String name,Object value):將指定請求參數名設置爲 value

String getParameter( String name):獲取請求參數名爲name的參數值。 Enumeration getParameterNames():獲取所有請求參數的名字集合

String [ ] getParameterValues(String name):獲得name請求參數的參數值(複選框)。Map getParameterMap():獲取所有請求參數名和請求參數值 所組成的Map對象

    void setCharacterEncoding(String encoding):設置編碼格式。request.getRequestDispather().forward(request,response):請求轉發,地址不變,轉發後請求對象會保存

當利用request.getParameter()方法得到 from元素的時候,默認的情況下其字符編碼爲 ISO-8859-1,有時這種編碼不能正確地顯示漢子,需要使用request對象的setCharacterEncoding()方法來設置編碼格式。可以設置成 utf-8 或 gb-2312

response對象 : 包含了從JSP頁面返回客戶端的所有信息,其作用域是它所在的頁面。response對象時javax.servlet.ServletResponse類的一個實例,它封裝由JSP產生的響應,並返回客戶端以響應請求。

response對象經常用於設置HTTP標題、添加Cookie、設置響應內容的類型和裝填、發送HTTP重定向 和 編碼URL

response對象的常用方法如下:

void addCookie(Cookie cookie):添加一個Cookie對象,用於在客戶端保存特定的信息。

void addHeader(String name,String value):添加HTTP頭信息,該Header信息將被髮送到客戶端

void containsHeader(String name):用於判斷指定名字的HTTP文件頭是否存在。

void sendError(int):向客戶端發送錯誤的狀態嗎

void sendRedirect(String url):重定向JSP文件。

response的一個主要應用是重定向,可通過response的sendRedirect(String url)方法實現重定向。例如當用戶輸入的表單信息不完整時,就應該再次被引導到該表單的輸入頁面

。response對象實現的重定向和<jsp:forward>動作元素的最大區別在於<jsp:forward>只能在本網站內跳轉,而response。sendRedirect則可以跳轉到任何一個地址的頁面。

out對象 :  out內置對象是一個緩衝的輸出流,用來向客戶端返回信息。它是javax.servlet.JspWriter 的一個實例。由於向客戶端輸出是要先進行連接,所以總是採用緩衝輸出的方式,因此out是緩衝輸出流。

out對象常用方法如下:

public abstract void clear() 清除緩衝區中的內容,但不把數據輸出到客戶端。

public abstract void clearBuffer() 清除緩衝區中的內容,同時將數據輸出到客戶端

void close() 關閉緩衝區並輸出緩衝區中的數據          void flush() 輸出緩衝區裏的數據          int  getBufferSize() 獲取緩衝區的大小        int getRemaining()獲取剩餘緩衝區的大小        boolean isAutoFlush()緩衝區是否進行自動清除         void newLine() 輸出一個換行符      void print(String str) 向客戶端輸出數據   void println(String str)輸出並換行

session對象:session對象是會話對象,用來記錄每個客戶端的訪問狀態。  所謂會話指的是從一個客戶打開瀏覽器與服務器建立連接,到這個客戶關閉瀏覽器與服務器斷開連接的過程。當一個客戶訪問服務器時,可能會在這個服務器的多個頁面之間反覆連接,不斷刷新一個頁面或向一個頁面提交信息等,有了session對象,服務器就可以知道這是同一個客戶完成的動作。

session 對象的常用方法:

Object getAttribute(String name):獲取session範圍內name屬性的值。

void setAttribute(String name,Object value):設置session範圍內name屬性的屬性值爲value,並存儲到session中。       

session對象的結構類似於散列表,通過調用setAttribute方法,可以將參數Object指定的對象obj添加到session對象中,併爲添加的對象指定一個索引關鍵字,如果添加的兩個對象的關鍵字相同,則先前的對象被清除(或覆蓋)。

void removeAttribute(String name) :刪除session範圍內name屬性

Enumeration getAttributeNames():獲取所有session對象中存放的屬性名稱。

long getCreateTime():返回session被創建的時間

String getId(): 返回session 創建時由JSP容器所設定的唯一標識。

long getLasAccessedTime() 返回用戶最後一次通過session發送請求的時間的時間,單位爲毫秒

int getMaxInactiveInterval():返回session的失效時間,即兩次請求間間隔多長時間該session就被撤銷,單位爲秒

boolean isNew():判斷是否爲新的session

void invalidate():清空session的內容

application對象 :session對象用於獲取和設置Servlet的相關信息,它的生命週期是從服務器啓動到服務器關閉位置。application中封裝了JSP所在的Web應用中的信息。

如:application對象下設置屬性可以統計當前訪問網站的總人數

application對象的常用方法:setAttribute(),getAttribute()

pageContext對象:pageContext對象是一個比較特殊的,使用它不僅可以設置page範圍內的屬性,還可以其他範圍內的屬性。通過pageContext 還可以訪問本頁面中的其他對象,如前面介紹的request,response,out等對象。實際JSP開發過程中pageContext對象並不常用。

page對象

config對象

exception對象:exception對象是java.lang.Throwable類的對象,用來處理頁面的錯誤和異常。在使用JSP進行開發時,習慣的做法是在一個頁面中使用page指令的errorPage屬性,讓該屬性指向一個專門用於異常處理的頁面。如果在JSP頁面中又未捕獲的異常,則會生成exception對象,然後將該exception對象傳遞到page指令中設置的異常處理頁面中,在異常處理頁面中對exception對象進行處理。 在異常處理頁面中需要將其page指令的isErrorPage屬性設置爲true纔可以使用exception對象。

exception對象的常用方法如下:

String getMessage():返回exception對象的異常信息

String getLocalizedMessage():返回本地化語言的異常錯誤

void printStackTrace():打印異常的棧反向跟蹤軌跡

String toString() 返回關於異常的簡單描述。

6.JavaBean的使用

JavaBean是用Java語言描述的軟件組件模型,在實際開發中常用來封裝業務邏輯 和 進行數據庫的相關操作,如連接數據庫、數據處理等。使用javaBean更好地實現了業務邏輯和表現層之間的分離,降低了它們之間的耦合度。

(1).定義JavaBean ,javaBean 是一個特殊的java類,它具有如下幾個語法特徵

a. JavaBean 是一個public類,即JavaBean的類訪問權限必須是public的

b. JavaBean 包含一個無參的構造方法

c. JavaBean中屬性的獲取和設置需要使用標準格式定義的 getXxx()方法 和 setXxx()方法。對於boolean類型的成員變量,即布爾類型的屬性,可以使用isXxx()方法來代替getXxx()方法 和 setXxx()方法。

(2)設置JavaBean的屬性

<jsp:setproperty>動作元素用來設置或修改Bean中的屬性值,在JSP中調用它時有如下形式:

a. <jsp:setProperty  name=“myBean” property="*"/>,    property="*"表示從request對象中將所有與JavaBean屬性名字相同的請求參數傳遞給相應屬性     的setter方法。myBean是javaBean的實例名

b. <jsp:setProperty name="myBean" property="id" /> ,     該形式表示使用request對象中的一個參數值來設置JavaBean實例中的一個屬性值。其中,     property指定了Bean的屬性名,該屬性名應該和request請求參數的名字保持相同。此處表示將request對象中的參數 id 傳入到JavaBean實例myBean中。

c.<jap:setProperty name="myBean" property="id"param="personid"> ,  該形式表示將request對象中的參數 personid 傳入到JavaBean 實例 myBean的屬性 id 中。其中 param 指定使用哪個請求參數來作爲 Bean 屬性的值。要說明的是,此時param指定的 Bean 屬性和 request參數的名字可以不相同。

d.<jsp:setProperty name="myBean" property="id" value="123" /> ,該形式表示向JavaBean實例 myBean 的屬性 id 中傳入指定的值。其中 value 用來指定傳入 Bean 中屬性的值。

  param 屬性表示頁面請求中的參數的名稱,value 屬性則表示給Bean屬性 property 的具體值。在<jap:setProperty>中不能同時使用param 屬性和value屬性! 

(3)JavaBean 的存在範圍

 在JavaBean中也可以設置其存在範圍,它的意義與屬性的存儲範圍相同。page範圍:表示每個JavaBean對象只屬於當前的JSP頁面,只在當前頁面中有效。request,session,application 類似。

7.JSP的運行機制

(1)JSP容器先將該JSP文件轉換成一個Java源文件

(2)如果轉換成功,則JSP容器使用 javac 將生成Java 源文件編譯成相應的字節碼文件 *.class。該 .class 文件就是一個Servlet,Servlet容器會像處理其他的Servlet 一樣來處理它。

(3)由 Servlet 容器加載轉換後的 Servlet 類(.class 文件),創建一個該Servlet 的實例,並執行Servlet 的 jspInit()方法,jspInit()方法在 Servlet 的整個生命週期只會被執行一次。

(4)執行 _jspService()方法來處理客戶端的請求,對於每一個請求,JSP容器都會創建一個新的線程來處理它。如果有多個客戶端同時請求該JSP文件,則JSP容器也會創建多個線程,使得每個客戶端請求都對應一個線程。  第(3)步生成的 Servlet的實例是常住內存的,所以響應速度很快。

(5)如果 .jsp 文件被修改了,則服務器根據設置決定是否對改文件重新編譯,如果需要重新編譯,則使用重新編譯後的結果取代內存中常駐的 Servlet ,並繼續上述處理過程

(6)雖然 jsp 效率很高,但在第一次調用時往往由於裝換 和 編譯 過程而產生一些輕微的延遲。此外,由於系統不足等原因,JSP容器會以某種不確定的方式將 Servlet 從內存中移去。這種情況發生時會首先調用 jspDestroy() 方法。

(7)接着 Servlet 實例便被加入“垃圾收集”處理。

(8)當請求處理完成後,響應對象由JSP容器接收,並將 html 格式的響應信息發送回客戶端。




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