JSP簡介2

分析JSP所生成的Servlet代碼
lJSP頁面翻譯成的Servlet繼承了org.apache.jasper.runtime.HttpJspBase類,HttpJspBase類是HttpServlet的一個子類,因此JSP頁面翻譯成的Servlet是HttpServlet的一個孫子類。HttpJspBase類實現了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase類是抽象的。
lSUN公司爲JSP的WEB容器開發商和JSP頁面開發人員提供了一套專門應用於開發JSP程序的Java類,這套Java類被稱爲JSP API。HttpJspPage接口和JspPage接口屬於JSP API,在HttpJspPage接口中只定義了一個_jspService方法,但它繼承了JspPage接口,JspPage接口中定義了兩個方法:jspInit()和jspDestroy()。
lHttpJspBase的init方法調用了jspInit和_jspInit方法,destroy方法內部調用了jspDestroy和_jspDestroy方法,service方法內部調用了_jspService方法。在HttpJspBase中實現的init、service和destroy方法都被聲明成了final類型。  
lJSP頁面中的位於<% %>外面的每行和緊臨<%%>兩邊的每段文本被轉換成以這些文本作爲參數的一條條out.write語句,JSP腳本片斷(位於<%%>內的一段java代碼)中的java代碼被原封不動地搬移進了_jspService方法中的相應位置處,JSP表達式(位於<%=和%>之中的內容)則是被轉換成以其中的變量或表達式作爲參數的out.print語句。
l
JSP隱式對象
public void _jspService(HttpServletRequest request,
HttpServletResponseresponse)
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);
}
JSP與JavaScript的綜合應用
lJavaScript是由瀏覽器解釋執行的程序代碼,它是網頁內容的一部分,主要用於在網頁上產生動態的顯示效果和實現與用戶的交互功能。
lJSP程序則是由WEB服務器解釋執行的程序代碼,它用於產生供瀏覽器顯示的網頁內容。
l由於JavaScript代碼屬於網頁的內容部分,所以,JavaScript代碼也可以通過JSP頁面輸出。
lJavaScript和JSP的關係猶如HTML代碼和JSP的關係,即JavaScript代碼是JSP程序輸出的一段可以被瀏覽器解釋執行的特殊文本內容。
JSP與Servlet的應用比較
lJSP是一種以產生網頁顯示內容爲中心的WEB開發技術,它可以直接使用模版元素來產生網頁文檔的內容。
lJSP頁面的源文件要比Servlet源文件簡單,並且JSP頁面的開發過程要比Servlet的開發過程簡單得多。 Session技術是一種將會話狀態保存在服務器端的技術 ,它可以比喻成是醫院發放給病人的病歷卡和醫院爲每個病人保留的病歷檔案的結合方式。
lJSP引擎可以對JSP頁面的修改進行檢測,並自動重新翻譯和編譯修改過的JSP文件。
l在JSP中使用JavaBean和自定義標籤,可以分離用於表現外觀的HTML文本內容和用於處理業務邏輯的Java代碼。
lJSP技術是建立在Servlet技術基礎之上的,所有的JSP頁面最終都要被轉換成Servlet來運行,要想深入掌握JSP,必須先對Servlet有比較充分的理解。
l在大型WEB應用程序的開發中,Servlet與JSP經常要混合使用,各司其職,Servlet通常用作控制組件,並處理一些複雜的後臺業務,JSP則作爲顯示組件。
l一次響應過程可以劃分成幾個功能模塊來協同完成,首先由Servlet完成流程控制和業務處理,並將結果數據存儲在request或session域中,然後將請求轉發(forward)到JSP頁面,再由JSP頁面從request或session域中取出結果數據並完成響應內容的輸出。通過這種方式實現業務邏輯與顯示內容的分離,從而將應用程序開發者和網頁作者的工作分離。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章