目錄
一、JSP運作原理
二、認識九個內建物件
三、內建物件使用說明
3.1、page物件
3.2、out物件
3.7、PageContext引入和跳转到其他资源
首頁 Java java教程 jsp內建物件:pageContext作用域物件的使用

jsp內建物件:pageContext作用域物件的使用

Aug 08, 2018 pm 04:10 PM
java

JSP有哪些內建物件?它們的功能是什麼,本文提到了JSP的九大內建對象,其中對pageContext對像做了詳細的介紹,pageContext對像是JSP技術中最重要的一個對象,它代表JSP頁面的運行環境,這個對像不僅封裝了對其它8大隱式物件的引用,它本身還是一個域物件(容器),可以用來保存資料。透過pageContext還可以獲得其他對象,具體的使用看下文講解。

一、JSP運作原理

  每個JSP 頁面在第一次被存取時,WEB容器都會把請求交給JSP引擎(即一個Java程式)去處理。 JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet) ,然後再依照servlet的呼叫方式來呼叫。
  由於JSP第一次訪問時會翻譯成servlet,所以第一次訪問通常會比較慢,但第二次訪問,JSP引擎如果發現JSP沒有變化,就不再翻譯,而是直接調用,所以程序的執行效率不會受到影響。
  JSP引擎在呼叫JSP對應的_jspServlet時,會傳遞或建立9個與web開發相關的物件供_jspServlet使用。 JSP技術的設計者為便於開發人員在編寫JSP頁面時獲得這些web對象的引用,特意定義了9個相應的變量,開發人員在JSP頁面中通過這些變量就可以快速獲得這9大對象的引用。

二、認識九個內建物件

##6##7##outjavax.servlet.jsp.JspWriter8
NO. #內建物件 類型
1 #pageContext javax.servlet.jsp .PageContext
2 request javax.servlet.http.HttpServletRequest
3 response #javax.servlet.http.HttpServletResponse
#4 session javax.servlet.http.HttpSession
#5 application javax.servlet.ServletContext
#config javax.servlet.ServletConfig
####java.lang.Object####################################################### ##9######exception######java.lang.Throwable#############

 

 

 

 

 

 

 

   

  request,response,session,application,config這些對像在前面都已經作了詳細的介紹,這裡重點介紹一下剩下的pageContext對象,out對象,page對象。

三、內建物件使用說明

3.1、page物件

  page物件表示目前一個JSP#> ,可以理解為一個物件本身,即:把一個JSP當作一個物件來看待。 page物件在開發中幾乎不用,了解一下即可

3.2、out物件

  out物件用於向客戶端傳送文字資料。
  out物件是透過呼叫pageContext物件的getOut方法傳回的,其作用和用法與ServletResponse.getWriter方法傳回的PrintWriter物件非常相似。
  JSP頁面中的out物件的類型為JspWriter,JspWriter相當於一種帶有快取功能的PrintWriter,設定JSP頁面的page指令的buffer屬性可以調整它的快取大小,甚至關閉它的快取。
  只有在out物件中寫入了內容,且滿足以下任何條件時,out物件才去呼叫ServletResponse.getWriter方法,並且透過該方法傳回的PrintWriter物件將out物件的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區:

  • 設定page指令的buffer屬性關閉了out物件的快取功能

  • ##out物件的緩衝區已滿

  • 整個JSP頁面結束

#out物件的工作原理圖

  

jsp內建物件:pageContext作用域物件的使用

  • 3.3、pageContext物件

      pageContext物件是JSP技術中最重要的一個對象,它代表JSP頁面的運作環境,這個物件不僅封裝了對其它8大隱式物件的引用,它自身還是一個域物件(容器),可以用來保存資料。並且,這個物件也封裝了web開發中經常涉及到的一些常用操作,例如引入和跳轉其它資源、檢索其它域物件中的屬性等。
  • 3.4、透過pageContext取得其他物件

  • getException方法傳回exception隱式物件

  • getPage方法傳回page隱式物件

  • getRequest方法傳回request隱式物件

#getResponse方法傳回response隱式物件

#getServletConfig方法傳回config隱式物件

getServletContext方法傳回application隱式物件

getSession方法傳回session隱含物件


#getOut方法回傳out隱式物件

#########3.5、pageContext封裝其它8大內建物件的意義######  如果在程式設計過程中,把pageContext物件傳遞給一個普通java對象,那麼這個java對象將可以取得8大隱式對象,此時這個java對象就可以和瀏覽器互動了,此時這個java對象就成為了一個動態web資源了,這就是pageContext封裝其它8大內建物件的意義,把pageContext傳遞給誰,誰就能成為一個動態web資源,那麼什麼情況下需要把pageContext傳遞給另一個java類別呢,什麼情況下需要使用這個技術呢,在比較正規的開發中,jsp頁面是不允許出現java程式碼的,如果jsp頁面出現了java程式碼,那麼就應該想辦法把java程式碼移除掉,我們可以開發一個自訂標籤來移除jsp頁面上的java程式碼,首先圍繞自訂標籤寫一個java類,jsp引擎在執行自訂標籤的時候就會呼叫圍繞自訂標籤寫的那個java類,在呼叫java類的時候就會把pageContext物件傳遞給這個java類,由於pageContext物件封裝了對其它8大隱式物件的引用,因此在這個java類別中就可以使用jsp頁面中的8大隱式物件(request,response,config,application,exception,Session ,page,out)了,pageContext物件在jsp自訂標籤開發中特別重要。 ######3.6、pageContext作為域物件######  pageContext物件可以當作容器來使用,因此可以將一些資料儲存在pageContext物件中。 ######  pageContext物件的常用方法#########
       java.lang.Object findAttribute(java.lang.String name)
登入後複製
#########  重點介紹一下findAttribute方法,這個方法是用來尋找各個域中的屬性的,查看這個方法的API可以看到關於這個方法的描述:###  Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null.## #

  当要查找某个属性时,findAttribute方法按照查找顺序"page→request→session→application"在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null。

范例:使用pageContext的findAttribute方法查找属性值

 
 
 
 
     pageContext的findAttribute方法查找属性值
 
 
     
 
                                    
 pageContext.findAttribute方法查找到的属性值:
 pageContext对象的name1属性:
 request对象的name2属性:
 session对象的name3属性:
 application对象的name4属性:
 查找不存在的name5属性:
 
 使用EL表达式进行输出:
 pageContext对象的name1属性:${name1}
 request对象的name2属性:${name2}
 session对象的name3属性:${name3}
 application对象的name4属性:${name4}
 不存在的name5属性:${name5}
登入後複製

运行结果:

  EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、 session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。

pageContext对象中封装了访问其它域的方法

  java.lang.Object getAttribute(java.lang.String name,   setAttribute(java.lang.String name, java.lang.Object value,   removeAttribute(java.lang.String name, scope)
登入後複製

代表各个域的常量

    PageContext.PAGE_SCOPE
登入後複製

范例:pageContext访问其它域

 
 
 
 
     pageContext访问其它域
 
 
       
 
                      
 取出存放在session对象中的属性值:
 第一种做法:使用pageContext.getAttribute("attributeName",PageContext.SESSION_SCOPE);去取出session对象中值
 姓名:
 第二种做法:使用session.getAttribute("attributeName");去取出session对象中值
 姓名:  
登入後複製

3.7、PageContext引入和跳转到其他资源

  PageContext类中定义了一个forward方法(用来跳转页面)和两个include方法(用来引入页面)来分别简化和替代RequestDispatcher.forward方法和include方法。
  方法接收的资源如果以“/”开头, “/”代表当前web应用。

范例:使用pageContext的forward方法跳转到其他页面

 
 
 
 
     使用pageContext的forward方法跳转页面
登入後複製

运行结果如下:

1 pageContext.forward("/pageContextDemo05.jsp");
登入後複製

  这种写法是用来简化和替代pageContext.getRequest().getRequestDispatcher("/pageContextDemo05.jsp").forward(request, response);这种写法的。在实际开发中,使用pageContext.forward(relativeUrlPath)方法跳转页面用得不多,主要是因为要在Jsp页面中嵌套java代码,所以这种做法简单了解一下即可,在开发中,要想从一个Jsp页面采用服务器端跳转的方式跳转到另一个Jsp页面,那么一般会使用标签,标签用于把请求转发给另外一个资源。

范例:使用pageContext的include方法引入资源

 
 
 
     使用pageContext的include方法引入资源
登入後複製

运行结果:

   在实际开发中,使用pageContext的include方法引入页面这种做法也很少用,一般都使用jsp:include标签引入资源,因此这种做法了解一下即可。

相关推荐:

JSP的内部对象

js的内置对象详解

以上是jsp內建物件:pageContext作用域物件的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles