1.1 概述
1.1.1 什麼是 JSP?
1.1.2 JSP 的優勢
與 ASP 相比:html
- 動態部分用 Java 編寫,因此更增強大易用
- 能夠移植到多種不一樣的服務器和操做系統
與 PHP 相比:數據庫
與 Servlet 相比:瀏覽器
與 Javascript 相比:服務器
- 雖然JavaScript能夠在客戶端動態生成HTML,可是很難與服務器交互,所以不能提供複雜的服務,好比訪問數據庫和圖像處理等等。
1.2 工做原理
1.2.1 JSP 和 Servlet的區別
JSP 是一種 Servlet,可是它與 HttpServlet 的工做方式不太同樣:jsp
- HttpServlet 是先編譯後部署:先將源代碼編譯爲 class 文件,而後部署到服務器下
- JSP 是先部署後編譯:先部署代碼,而後編譯爲 class 文件。JSP 會在客戶端第一次請求 JSP 文件時被編譯爲 HttpJspPage 類。該類會被服務器臨時存放在服務器工做目錄裏面。
因爲 JSP 只在客戶端第一次請求時被編譯,因此第一次請求 JSP 時會感受比較慢。
工具
1.2.2 JSP 工做原理
如下步驟代表了Web服務器是如何使用JSP來建立網頁的:
- 就像其餘普通的網頁同樣,您的瀏覽器發送一個HTTP請求給服務器。
- Web服務器識別出這是一個對JSP網頁的請求,而且將該請求傳遞給JSP引擎。經過使用URL或者.jsp文件來完成。
- JSP引擎從磁盤中載入JSP文件,而後將它們轉化爲servlet。這種轉化只是簡單地將全部模板文本改用println()語句,而且將全部的JSP元素轉化成Java代碼。
- JSP引擎將servlet編譯成可執行類,而且將原始請求傳遞給servlet引擎。
- Web服務器的某組件將會調用servlet引擎,而後載入並執行servlet類。在執行過程當中,servlet產生HTML格式的輸出並將其內嵌於HTTP response中上交給Web服務器。
- Web服務器以靜態HTML網頁的形式將HTTP response返回到您的瀏覽器中。
- 最終,Web瀏覽器處理HTTP response中動態產生的HTML網頁,就好像在處理靜態網頁同樣。
以上說起到的步驟能夠用下圖來表示:
1.3 生命週期
JSP 也是一種 Servlet,運行時只有一個實例,它也有生命週期。
spa
如下是JSP生命週期中所走過的幾個階段:
- 編譯階段:servlet容器編譯servlet源文件,生成servlet類
- 初始化階段:加載與JSP對應的servlet類,建立其實例,並調用它的初始化方法
- 執行階段:調用與JSP對應的servlet實例的服務方法
- 銷燬階段:調用與JSP對應的servlet實例的銷燬方法,而後銷燬servlet實例
很明顯,JSP生命週期的四個主要階段和servlet生命週期很是類似,下面給出圖示:
操作系統
例
code
JSP生命週期代碼實例
<%
@ page contentType
=
"
text/html; charset=GB2312
"
%>
<
html
><
head
><
title
>life.jsp
</
title
></
head
><
body
>
<%
!
private
int
initVar
=
0
;
private
int
serviceVar
=
0
;
private
int
destroyVar
=
0
;
%>
<%
!
public
void jspInit(){
initVar
++
;
System.out.println(
"
jspInit(): JSP被初始化了
"
+
initVar
+
"
次
"
);
}
public
void jspDestroy(){
destroyVar
++
;
System.out.println(
"
jspDestroy(): JSP被銷燬了
"
+
destroyVar
+
"
次
"
);
}
%>
<%
serviceVar
++
;
System.out.println(
"
_jspService(): JSP共響應了
"
+
serviceVar
+
"
次請求
"
);
String
content1
=
"
初始化次數 :
"
+
initVar;
String
content2
=
"
響應客戶請求次數 :
"
+
serviceVar;
String
content3
=
"
銷燬次數 :
"
+
destroyVar;
%>
<
h1
>
<%
=
content1
%>
</
h1
>
<
h1
>
<%
=
content2
%>
</
h1
>
<
h1
>
<%
=
content3
%>
</
h1
>
</
body
></
html
>
參考資料
Java Web 整合開發
htm
http://www.w3cschool.cc/jsp/jsp-tutorial.html