JSP有哪些內建物件?它們的功能是什麼,本文提到了JSP的九大內建對象,其中對pageContext對像做了詳細的介紹,pageContext對像是JSP技術中最重要的一個對象,它代表JSP頁面的運行環境,這個對像不僅封裝了對其它8大隱式物件的引用,它本身還是一個域物件(容器),可以用來保存資料。透過pageContext還可以獲得其他對象,具體的使用看下文講解。
每個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大對象的引用。
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 | |
javax.servlet.jsp.JspWriter | 8 |
#
#
request,response,session,application,config這些對像在前面都已經作了詳細的介紹,這裡重點介紹一下剩下的pageContext對象,out對象,page對象。
page物件表示目前一個JSP#> ,可以理解為一個物件本身,即:把一個JSP當作一個物件來看待。 page物件在開發中幾乎不用,了解一下即可
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物件的快取功能
#getOut方法回傳out隱式物件
java.lang.Object findAttribute(java.lang.String name)
当要查找某个属性时,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对象中值 姓名:
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內建物件:pageContext作用域物件的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!