輕量級JavaEE企業應用實戰(三)

JSP的基本原理

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

JSP通過在標準的和TML頁面中潛入JAVA代碼,其靜態部分無需Java程序控制,只有那些需要從數據庫讀取或需要動態生成的界面內容,才使用Java腳本控制

組成:

靜態部分:標準的和TML標籤、靜態的界面內容

動態部分:受Java程序控制的內容,由Java程序來動態生成

 

每個JSP頁面就是Servlet一個實例,JSP界面由系統編譯成Servlet,Servlet再相應用戶的請求。

證據:在Tomcat啓動後,可以在work\Catalina\localhost\應用名\org\apache\jsp目錄下找到,test_jsp.java和test_jsp.class

 

進入源代碼

可以看到其中包含了init初始化方法、destory銷燬方法和_jspService響應方法

其中定義了PageContext pagecontext、HttpSession session、ServletContext application、ServletConfig config、JspWriter out、Object page等JSP內置對象

當然還有參數中的HttpServletRequest request和HttpServletResponse對象, 除此對象exception有被throw,IOException、ServletException;

 

從客戶端訪問到返回結果流程:

Client訪問JSP---》如果是第一次,則JSP編譯爲Servlet;如果JSP界面對應的Servlet已經存在,則根據請求動態生成HTML界面---》返回標準的HTML界面

 

根據JSP的工作原理,可以得出結論

1.JSP文件必須在JSP服務器內部運行

2.JSP必須生成Servlet才能執行

3.每個JSP頁面的第一個訪問者速度會很慢,因爲需要等待JSP編譯成Sevlet

4.JSP界面的訪問者無需安裝任何客戶端,甚至不需要可以運行Java的運行環境,因爲JSP頁面輸送到客戶端的是標準HTML界面

 

JSP聲明

語法:<%聲明部分%>

從JSP對應Servlet源文件可以看出:聲明部分的代碼被轉換成對應Servlet的成員變量或方法

由此可知:JSP聲明部分定義的變量和方法可以使用private、public等控制符修飾,也可以用static,將其變成屬性和李誒方法。但不可使用abstract修飾

聲明部分的方法,因爲還湊餉方法導致JSP對應的Servlet變成抽象類,無法實例化

 

JSP腳本中可以防止任何可執行的語句,所以可以充分利用Java語言的功能,例如連接數據庫和執行數據庫操作

 

JSP的三個編譯指令

page:針對當前界面的指令

include:指定包含另一個界面

taglib:定義和訪問自定義標籤

 

page指令屬性

language:當前JSP界面使用的腳本語言的種類,該屬性通常是JAVA,默認也是JAVA,所以無需設置

extends:在JSP界面編譯所產生的JAVA類所集成的弗雷,或所實現的接口

import:導入包;默認導入包:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*

session:設定這個JSP頁面是否需要HTTP Session

buffer:指定輸出緩衝區的大小。輸出緩衝區的JSP內部對象:

    out用於緩存JSP頁面對客戶瀏覽器的輸出,默認值是8KB,可以設置爲none,也可以設置爲其他值,單位是KB

autoFlush:當輸出緩衝區即將溢出時,是否需要強制輸出緩衝區內容。爲true,則正常輸出;false,則拋出異常

info:設置該JSP程序的信息,也可以看作說明,可以通過Servlet.getServletInfo()方法獲取該值;在JSP中,直接調用getServletInfo();

errorPage:指定錯誤處理頁面。如果頁面產生了異常或錯誤,沒有對應處理碼,則跳轉到指定JSP

isErrorPage:設置本JSP界面是否爲錯誤處理程序。如果本身是錯誤處理界面,無需指定errorPage屬性

contentType:用於設定生成網頁的文件格式和編碼字符集

pageEncoding:指定網頁的編碼字符集

 

errorPage實際上是JSP的異常處理機制,JSP腳本不要求強制處理異常,即使該異常是checked異常

體外話:開發者都應該取消Internet選項---》高級---》顯式友好HTTP錯誤信息

 

include指令

include指令可以將一個外部文件潛入到當前JSP文件,同時解析這個界面的JSP語句

靜態的include指令,會把目標頁面的其他編譯指令也包含進來,融合成一個頁面,因此被包含的頁面甚至不需要是一個完整頁面

靜態指令:<%include file="scriptlet.jsp" %>

動態include指令則不會,如果被潛入的JSP經常改變,則使用<jsp:include>指令,這是動態的

注意:靜態include命令將目標頁面的其他編譯指令包含進來時,如果指令衝突,那麼頁面會報錯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章