首頁 >Java >java教程 >jsp內建物件:pageContext作用域物件的使用

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

php是最好的语言
php是最好的语言原創
2018-08-08 16:10:188189瀏覽

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