(JavaEE-08)JSP九大隱式對象

JSP運行原理

  • 每一個JSP 頁面在第一次被訪問時,WEB容器都會把請求交給JSP引擎(即一個Java程序)去處理。JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet) ,而後按照servlet的調用方式進行調用web

  • 因爲JSP第一次訪問時會翻譯成servlet,因此第一次訪問一般會比較慢,但第二次訪問,JSP引擎若是發現JSP沒有變化,就再也不翻譯,而是直接調用,因此程序的執行效率不會受到影響緩存

  • JSP引擎在調用JSP對應的_jspServlet時,會傳遞或建立9個與web開發相關的對象供_jspServlet使用。JSP技術的 設計者爲便於開發人員在編寫JSP頁面時得到這些web對象的引用,特地定義了9個相應的變量,開發人員在JSP頁面中經過這些變量就能夠快速得到這9大 對象的引用session

  • 這9個對象分別是哪些,以及做用也是筆試常常考察的知識點app

JSP九大隱式對象

  • requestjsp

  • response學習

  • configurl

  • applicationspa

  • exception.net

  • session翻譯

  • page

  • out

  • pageContext

JSP九大隱式對象,其中七個已經在Servlet中講解過了,主要學習outpageContext

out

  • out隱式對象用於向客戶端發送文本數據

  • out對象是經過調用pageContext對象的getOut方法返回的,其做用和用法與ServletResponse.getWriter方法返回的PrintWriter對象很是類似

  • JSP頁面中的out隱式對象的類型爲JspWriter,JspWriter至關於一種帶緩存功能的PrintWriter,設置JSP頁面的page指令的buffer屬性能夠調整它的緩存大小,甚相當閉它的緩存

  • 只有向out對象中寫入了內容,且知足以下任何一個條件時,out對象纔去調用ServletResponse.getWriter方法,並經過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中:

    <body><%out.write("hehe");response.getWriter().write("gaga");%></body>

    • 設置page指令的buffer屬性關閉了out對象的緩存功能

    • out對象的緩衝區已滿

    • 整個JSP頁面結束

out緩衝區與response緩衝區

  • 上面的代碼運行後,會首先輸出gaga,而後再輸出hehe。這是由於,隱式對象的緩衝區的內容不會直接回寫到客戶端,並且會跟Response的緩衝區合併在一塊兒(添加到後面),一次回寫到客戶端。

  • 在實際開發中,若是在JSP中須要顯示數據,使用隱式對象,不要使用Response輸出(JSP模版也存在這個問題)。

  • 同時使用out和response.getWriter()輸出數據

  • demo:使用JSP實現文件的下載

pageContext

  • pageContext對象是JSP技術中最重要的一個對象,它表明JSP頁面的運行環境

  • 這個對象不只封裝了對其它8大隱式對象的引用,它自身仍是一個域對象,能夠用來保存數據,而且還能夠經過pageContext操做其它三個域

    • 使用pageContext能夠訪問別的三個域以及8大隱式對象,這種用法主要在自定義標籤技術中使用

    • 經過pageContext對象,能夠直接將數據添加到別的三個域中,也能夠直接從三個域中獲取

    • 使用 findAttribute方法,直接查找各個域中是否有該屬性(EL表達式)

  • 這個對象還封裝了web開發中常常涉及到的一些經常使用操做,例如引入和跳轉其它資源

    • pageContext類中定義了forward方法和include方法來分別簡化和替代RequestDispatcher.forward方法和include方法

    • 方法接收的資源若是以「/」開頭, 「/」表明當前web應用

相關文章
相關標籤/搜索