378
一,JSP簡介
JSP是建立在Servlet規範提供的功能之上的動態網頁技術。
1,Servlet和JSP:servlet是含有HTML的Java代碼,JSP是含有Java代碼的HTML.
Servlet在伺服器上執行和解釋瀏覽器的請求,承擔用戶端和應用程式之間的中介層角色,把動態內容混合到靜態內容中產生HTML.
JSP在HTML中嵌入Java指令碼代碼和JSP標記,將靜態(HTML)和動態(java代碼)內容分離,實現內容和表示的分離。
2,Servlet的不足:對錶示(顯示)的處理不足。
a,Servlet中HTML的編寫和維護都比較困難。
b,不能使用標準的HTML工具。
c,非java開發人員難以處理HTML。
3,JSP的好處:便利性,生產效率和可維護性
JSP最終會轉換成Servlet,JSP頁面上能夠執行的任務都可以用Servlet完成,但底層的等同性不代表Servlet和JSP頁面對所有的情況都適用。
問題不在於技術,而在於便利性,生產效率和可維護性的不同。
a,JSP中的HTML可維護性好。
b,可以使用網站開發工具。
c,便於團隊開發,將靜態HTML和動態內容進行弱分離和強分離,提高生產效率。
二,JSP運行機制簡介
1,JSP的生命週期
轉換階段
(1),用戶端發送對JSP頁面的請求,
(2),JSP容器(WEB容器)檢查JSP頁面的文法,將JSP頁面轉譯為Servlet源檔案(java檔案)。
該類必須實現javax.servlet.jsp.JspPage介面。
而HttJspPage是應用於HTTP協議的請求和響應的JspPage擴充介面。
org.apache.jasper.runtime.HttpJspBase是Tomcat對HttJspPage介面的實作類別。
源檔案放在Tomcat的/work/Catalina/localhost目錄下的相應的項目目錄下.
執行階段
(3),Servlet容器載入(編譯成class檔案)Servlet源檔案,
(4),建立一個Servlet執行個體,將Servlet載入到伺服器記憶體中來處理請求。
(5),初始化JSP頁面,調用_jspInit方法。
(6),由容器自動定義調用_jspService方法,產生響應內容。
(7),銷毀JSP頁面,_jspDestroy。
2,第一次載入JSP頁面和JSP頁面被修改的情況
只有在第一次載入JSP頁面和JSP頁面被修改的時候,“JSP容器將JSP頁面轉換為Servlet源檔案”。
對於以後的請求,JSP容器會檢查JSP頁面是否被修改。該JSP頁面被修改後,JSP容器轉譯該JSP頁面更新Servlet源檔案。
3,之後的請求只會“由容器自動調用_jspService方法,產生響應內容”。
4,伺服器重啟後,容器從執行階段開始“建立一個Servlet執行個體,將Servlet載入到伺服器記憶體中來處理請求”。
三,JSP文法簡介
一個JSP頁面由元素和模板資料群組成。
元素是必須由JSP容器進行處理,而模板資料是JSP容器不處理的,將原封不動直接傳遞給用戶端。
1,模板資料的構成:
靜態內容:一般由HTML構成。
注釋:
2,元素的構成:
指令(directive): page指令,include指令,tiglib指令。
指令碼: 運算式,Scriptlet,聲明;
動作:
* <jsp:userBean>,<jsp:setProperty>和<jsp:getProperty>以及<jsp:param>
* <jsp:include>和<jsp:forward>
* 其他與定義jsp文檔有關動作。
四,JSP隱含對象
1,輸入輸出對象 : HttpServletRequest的request, HttpServletResponse的response, JspWriter的out;
2,範圍通訊對象 : HttpSession的session, ServletContext的application, PageContext的pageContext;
3,servlet對象 : Object的page, ServletConfig的config;
4,錯誤對象 : Throwable的exception;