程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> jsp-->第一節課總結

jsp-->第一節課總結

編輯:關於JSP

JSP技術
JSP起源
在很多動態網頁中,絕大部分內容都是固定不變的,只有局部內容需要動態產生和改變。
如果使用Servlet程序來輸出只有局部內容需要動態改變的網頁,其中所有的靜態內容也需要程序員用Java程序代碼產生,整個Servlet程序的代碼將非常臃腫,編寫和維護都將非常困難。 
對大量靜態內容的美工設計和相關HTML語句的編寫,並不是程序員所要做的工作,程序員對此也不一定在行。網頁美工設計和制作人員不懂Java編程,更是無法來完成這樣的工作。
為了彌補Servlet的缺陷,SUN公司在Servlet的基礎上推出了JSP(Java 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源程序編譯成Servlet的class類文件,然後再由WEB容器(Servlet引擎)像調用普通Servlet程序一樣的方式來裝載和解釋執行這個由JSP頁面翻譯成的Servlet程序。www.2cto.com
Tomcat 5.x把為JSP頁面創建的Servlet源文件和class類文件放置在“<TOMCAT_HOME>\work\Catalina\<主機名>\<應用程序名>\”目錄中,Tomcat將JSP頁面翻譯成的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頁面翻譯成的Servlet是HttpServlet的一個孫子類。HttpJspBase類實現了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase類是抽象的。
SUN公司為JSP的WEB容器開發商和JSP頁面開發人員提供了一套專門應用於開發JSP程序的Java類,這套Java類被稱為JSP API。HttpJspPage接口和JspPage接口屬於JSP API,在HttpJspPage接口中只定義了一個_jspService方法,但它繼承了JspPage接口,JspPage接口中定義了兩個方法:jspInit()和jspDestroy()。
HttpJspBase的init方法調用了jspInit和_jspInit方法,destroy方法內部調用了jspDestroy和_jspDestroy方法,service方法內部調用了_jspService方法。在HttpJspBase中實現的init、service和destroy方法都被聲明成了final類型。 
JSP頁面中的位於<% %>外面的每行和緊臨<%%>兩邊的每段文本被轉換成以這些文本作為參數的一條條out.write語句,JSP腳本片斷(位於<%%>內的一段java代碼)中的java代碼被原封不動地搬移進了_jspService方法中的相應位置處,JSP表達式(位於<%=和%>之中的內容)則是被轉換成以其中的變量或表達式作為參數的out.print語句。
JSP的執行過程
JSP的執行過程主要可以分為以下幾點:
客戶端發出請求。
Web容器將JSP轉譯成Servlet源代碼。
Web容器將產生的源代碼進行編譯。
Web容器加載編譯後的代碼並執行。
把執行結果響應至客戶端。

 


 
 
JSP隱式對象
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException
{
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
...
...
Throwable exception =
org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved