Java開發之掌握JSP技術

千鋒武漢發表於2021-04-22

   一、Java初級開發之jsp概述

  1.關於jsp

  JavaServer Pages簡稱jsp,從“server”這個詞可以看出,這其實也是一門java服務端技術,其實可以簡單的把jsp認為是servlet,一點錯也沒有。Jsp的實質,就是客戶端需要的資源是透過jsp技術動態生成的。

  2.jsp的技術原理

  1)當客戶端在訪問一個jsp資源時,伺服器上有相應的servlet來負責jsp資源,那麼該servlet將會把jsp頁面翻譯成一個servlet,然後執行該servlet的service方法。

  2)伺服器將jsp翻譯成java程式(就是一個Servlet),然後執行該Servlet的service方法,在方法內部動態地向客戶端寫html程式碼。

  因此jsp就是一個servlet,也就是jsp頁面將被翻譯成servlet

  3.jsp與servlet的選擇

  jsp就是servlet,那麼如果碰到需要寫繁多的html程式碼,建議使用jsp,如果需要寫繁多的java程式碼,建議使用servlet。

   二、JSP技術詳解

  1.JSP指令碼

   就是怎樣在jsp頁面中使用java程式碼,使用了指令碼的地方,就不會作為輸出流的內容,而是作為java程式碼來執行。使用方式有三種:

  1) <% java程式碼 %>

  jav程式碼會被作為程式的一部分來執行,而不會被翻譯成out.write(),這是常用的。

  2) <% java程式碼 %>

  會被翻譯成 out.print(java程式碼)

  3) <% java程式碼 %>

  宣告成員變數。

  4)jsp的註釋方式

  · html的註釋:

  使用者看得到,程式設計師也看得到

  · java的註釋:// 單行註釋 /多行註釋/

  使用者看不到,但是會被翻譯

  · jsp的註釋:

  使用者看不到,不會被翻譯,只有程式設計師在寫jsp頁面時才看得到。

  2.三大指令

  1)page指令

  page指令是用於告訴伺服器該如何翻譯此jsp頁面。透過page指令的屬性來指明翻譯的效果。

  · language: 指的是jsp頁面支援哪種語言,只支援java,所以該屬性可以省略

  · pageEncoding和contentType寫一個就行,建議使用pageEncoding,更加簡單

  · session:預設值是true,預設情況下伺服器會為該頁面開闢一個session空間

  · import:用於匯入該頁面中的java類需要用到的包

  · errorPage:當發生錯誤時跳轉到的資源,注意,該地址是一個伺服器地址。

  · isErrorPage:預設值是false。當在web.xml中配置錯誤頁面時,需要將該jsp頁面的isErrorPage設為true.

  404

  /error.jsp

  

  總結:一般情況下,page指令就這麼寫即可:

  2)include指令:靜態包含,file屬性使用的是伺服器地址。

  include指令是用於在一個jsp頁面中包含另一個jsp頁面,兩個頁面組合成一個頁面傳送給客戶端。

  所謂的靜態包含,在翻譯時是把被包含的jsp頁面寫給客戶端。那麼此時客戶端拿到的是兩套html標籤。

  3)taglib指令:標籤庫

  taglib指令用於引入第三方標籤庫,透過taglib指令中的prefix指明字首,透過字首來使用第三方標籤庫中的標籤

  3.四大域物件 (jsp有四個,servlet有三個(request,session,servletContext))

  1) pageContext

  (1)pageContext作為域物件

  · 描述當前page的上下文。那麼pageContext物件是一個域物件,所謂域物件,就是提供了一個區域,用來儲存資料。因此當前的page就能向pageContext物件中儲存資料.

  pageContext域物件的作用範圍:當前page(頁面)

  setAttribute(String key,Object value);

  getAttribute(String key);

  removeAttribute(String key);

  · 向其他域物件中運算元據.

  pageContext.setAttribute(String key,Object value, int scope);向其他域物件中存值

  pageContext.getAttribute(String key, int scope);向其他域物件中取值

  pageContext.removeAttribute(String key, int scope);向其他域物件中移除值

  int scope來自於PageContext類的常量

  REQUEST_SCOPE: 表示request域

  SESSION_SCOPE: 表示session域

  APPLICATION_SCOPE: 表示application域

  · findAttribute(String key):Object :這是透過鍵,向所有域中搜尋資料。

  搜尋的順序:

  pageContext->request->session->application

  (2)可以透過pageContext物件來獲取其他八個內建物件

  透過pageContext的get*()來獲得。

  2)request

  作用範圍:一次請求

  3)session

  作用範圍:一次會話

  4)application

  作用範圍:當前web應用

  4.九大內建物件

  所謂的內建物件,即在jsp頁面的指令碼中能直接使用的java物件。

  · out: 輸出流

  當透過out的write()寫內容時,實際是往out的緩衝區(預設大小是8kb)中去寫,有兩種情況導致緩衝區的內容會沖刷進底層的輸出流中

  1)out物件被銷燬

  2)out的緩衝區不夠用了。其實我們可以設定out緩衝區的大小。如果緩衝區是0kb,那麼out就把內容直接寫到response緩衝區中。

  · page:this,表示當前的Servlet物件

  · pageContext:重點,表示當前page的上下文物件,也是一個域物件

  · session:當jsp頁面的page指令的session屬性為true時,才會有session物件

  · request:

  · response

  · exception 當jsp頁面的page指令的isErrorPage屬性為true時,才會有exception物件

  · application: 實際就是ServletContext物件

  · config:實際就是ServletConfig物件

  5.Jsp標籤

  1) jsp:include

  動態包含:在一個頁面中包含另一個頁面的內容

  和靜態的區別:

   靜態包含會在翻譯的過程中直接翻譯被包含的頁面,被包含的頁面不會產生java檔案。

   而動態包含會在翻譯的過程中只翻譯自己頁面的內容,被包含的頁面的翻譯交給相應的類來完成,被包含的頁面會產生java檔案,實際開發中更加常用動態包含。

  2)jsp:forward

  請求轉發,與servlet中的請求轉發的效果一致。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2769238/,如需轉載,請註明出處,否則將追究法律責任。

相關文章