JSP起源、JSP的運行原理、JSP的執行過程

JSP起源

在很多動態網頁中,絕大部分內容都是固定不變的,只有局部內容需要動態產生和改變。 

如果使用Servlet程序來輸出只有局部內容需要動態改變的網頁,其中所有的靜態內容也需要程序員用Java程序代碼產生,整個Servlet程序的代碼將非常臃腫,編寫和維護都將非常困難。  

對大量靜態內容的美工設計和相關HTML語句的編寫,並不是程序員所要做的工作,程序員對此也不一定在行。網頁美工設計和製作人員不懂Java編程,更是無法來完成這樣的工作。 

爲了彌補Servlet的缺陷,SUN公司在Servlet的基礎上推出了JSPJava Server Pages)技術作爲解決方案。 

JSP是簡化Servlet編寫的一種技術,它將Java代碼和HTML語句混合在同一個文件中編寫,只對網頁中的要動態產生的內容採用Java代碼來編寫,而對固定不變的靜態內容採用普通靜態HTML頁面的方式編寫。

建立對JSP的直觀認識 

JSP頁面是由HTML語句和嵌套在其中的Java代碼組成的一個普通文本文件,JSP 頁面的文件擴展名必須爲.jsp

JSP頁面中編寫的Java代碼需要嵌套在<%%>中,嵌套在<%%>之間的Java代碼被稱之爲腳本片段(Scriptlets),沒有嵌套在<%%>之間的內容被稱之爲JSP的模版元素。

JSP中的Java代碼可以使用out.println語句將其他Java程序代碼產生的結果字符串輸出給客戶端,也可以使用System.out.println語句將它們打印到命令行窗口。 

JSP文件就像普通的HTML文件一樣,它們可以放置在WEB應用程序中的除了WEB-INF及其子目錄外的其他任何目錄中,JSP頁面的訪問路徑與普通HTML頁面的訪問路徑形式也完全一樣。

JSP

JSP全稱是Java Server Pages,它和servle技術一樣,都是SUN公司定義的一種用於開發動態web資源的技術。

JSP這門技術的最大的特點在於,寫jsp就像在寫html,但它相比html而言,html只能爲用戶提供靜態內容,而Jsp技術允許在頁面中嵌套java代碼,爲用戶提供動態數據。

Jsp快速入門:在jsp頁面中輸出當前時間。

不管是JSP還是Servlet,雖然都可以用於開發動態web資源。但由於這2門技術各自的特點,在長期的軟件實踐中,人們逐漸把servlet作爲web應用中的控制器組件來使用,而把JSP技術作爲數據顯示模板來使用。

其原因爲,程序的數據通常要美化後再輸出:

jsp既用java代碼產生動態數據,又做美化會導致頁面難以維護。

servlet既產生數據,又在裏面嵌套html代碼美化數據,同樣也會導致程序可讀性差,難以維護。

因此最好的辦法就是根據這兩門技術的特點,讓它們各自負責各的,servlet只負責響應請求產生數據,並把數據通過轉發技術帶給jsp,數據的顯示jsp來做。

JSP的運行原理

WEB容器(Servlet引擎)接收到以.jsp爲擴展名的URL的訪問請求時,它將把該訪問請求交給JSP引擎去處理。Tomcat中的JSP引擎就是一個Servlet程序,它負責解釋和執行JSP頁面。

每個JSP 頁面在第一次被訪問時,JSP引擎將它翻譯成一個Servlet源程序,接着再把這個Servlet源程序編譯成Servletclass類文件,然後再由WEB容器(Servlet引擎)像調用普通Servlet程序一樣的方式來裝載和解釋執行這個由JSP頁面翻譯成的Servlet程序。 

Tomcat 5.x把爲JSP頁面創建的Servlet源文件和class類文件放置在“<TOMCAT_HOME>\work\Catalina\<主機名>\<應用程序名>\”目錄中,TomcatJSP頁面翻譯成的Servlet的包名爲org.apache.jsp.<JSP頁面在WEB應用程序內的目錄名

JSP規範也沒有明確要求JSP中的腳本程序代碼必須採用Java語言,JSP中的腳本程序代碼可以採用Java語言之外的其他腳本語言來編寫,但是,JSP頁面最終必須轉換成Java Servlet程序。 

可以在WEB應用程序正式發佈之前,將其中的所有JSP頁面預先編譯成Servlet程序。

分析JSP所生成的Servlet代碼

JSP頁面翻譯成的Servlet繼承了org.apache.jasper.runtime.HttpJspBase類,HttpJspBase類是HttpServlet的一個子類,因此JSP頁面翻譯成的ServletHttpServlet的一個孫子類。HttpJspBase類實現了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase類是抽象的。 

SUN公司爲JSPWEB容器開發商和JSP頁面開發人員提供了一套專門應用於開發JSP程序的Java類,這套Java類被稱爲JSP APIHttpJspPage接口和JspPage接口屬於JSP API,在HttpJspPage接口中只定義了一個_jspService方法,但它繼承了JspPage接口,JspPage接口中定義了兩個方法:jspInit()jspDestroy()

HttpJspBaseinit方法調用了jspInit_jspInit方法,destroy方法內部調用了jspDestroy_jspDestroy方法,service方法內部調用了_jspService方法。在HttpJspBase中實現的initservicedestroy方法都被聲明成了final類型。  

JSP頁面中的位於<% %>外面的每行和緊臨<%%>兩邊的每段文本被轉換成以這些文本作爲參數的一條條out.write語句,JSP腳本片斷(位於<%%>內的一段java代碼)中的java代碼被原封不動地搬移進了_jspService方法中的相應位置處,JSP表達式(位於<%=%>之中的內容)則是被轉換成以其中的變量或表達式作爲參數的out.print語句。 

JSP的執行過程

JSP的執行過程主要可以分爲以下幾點:

客戶端發出請求。

Web容器將JSP轉譯成Servlet源代碼。

Web容器將產生的源代碼進行編譯。

Web容器加載編譯後的代碼並執行。

把執行結果響應至客戶端。

過程介紹

客戶端發出請求,請求爲JSP,web容器就會找出相應的servlet進行處理

將servlet轉成字節碼文件

將字節碼文件加載到web容器裏

這時會在web容器裏建立實例

進行初始化

通過service接受請求

然後web容器會自動產生兩個對象servlet和service最後進行銷燬

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

發佈了6 篇原創文章 · 獲贊 9 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章