1. 程式人生 > >JSP內建物件和域物件

JSP內建物件和域物件

什麼是內建物件? 在使用jsp頁面時,有某些物件使用頻率非常高。如果我們每次都去建立這些物件再使用,就會變得麻煩。所以在載入完jsp頁面時,就把這些物件建立好了,我們只需要直接使用這些物件即可!!!!這些物件就叫內建物件。

JSP的9大內建物件

JSP的4大域物件

由上2張表可以發現9大內建物件中就包含了4個域物件了. out物件 out內建物件,型別是JspWriter。JspWriter相當於一個帶快取功能的PrintWriter。 PrintWriter的作用: 向瀏覽器輸出內容 writer.writer(“內容”); PrintWriter writer = response.getWriter();

JspWriter的作用: 向PrintWriter輸出內容 JspWriter out = pageContext.getOut(); out.writer(“內容”);

問題1: JspWriter的緩衝區大小是多少? 預設情況下,是8kb。也可以改變緩衝區大小,通過page指令buffer屬性設定 問題2: JspWriter緩衝區的內容在什麼情況下會寫入到PrintWriter? 1)快取區滿了 2)jsp頁面執行完畢 3)快取區關閉

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="8kb"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>out物件</title>  
  </head>
  
  <body>
   abc
    <%
     out.write("ac");
     //直接把內容傳送到瀏覽器
     response.getWriter().write("def");
     %>
  </body>
</html>
<%-- 以上輸出的結果是:def abc ac 、因為out物件是JspWriter類的物件 --%>

pageContext物件 1)通過pageContext得到其他8個內建物件

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="8kb" isErrorPage="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>out物件</title>  
  </head>
  
  <body>
  	<%--1.通過pageContext獲取其他8個物件 --%>
        <%out.write("是否相同"+(request==pageContext.getRequest()));%><br/>
        <%out.write("是否相同"+(response==pageContext.getResponse()));%><br/>
        <%out.write("是否相同"+(session==pageContext.getSession()));%><br/>
        <%out.write("是否相同"+(config==pageContext.getServletConfig()));%><br/>
        <%out.write("是否相同"+(application==pageContext.getServletContext()));%><br/>
        <%out.write("是否相同"+(out==pageContext.getOut()));%><br/>
        <%out.write("是否相同"+(page==pageContext.getPage()));%><br/>
        <%-- exception不能直接使用,需要在page指令中設定isErrorPage="true"屬性 --%>
        <%out.write("是否相同"+(exception==pageContext.getException()));%><br/>
  </body>
</html>

pageContext域物件 作用:儲存資料和得到資料,在資源之間共享資料。 pageContext的作用範圍:僅在當前的jsp頁面中有效!!

2.1 設定資料 預設情況,把資料設定到page域中 pageConetxt.setAtribute(“name”);

可以設定到其他域中 pageContext.setAttribute(“name”, PageContext.域名稱)

域名稱: PAGE_SCOPE, REQUEST_SCOPE ,SESSION_SCOPE,APPLICATION_SCOPE

2.2 得到資料 預設情況下,從page域得到資料 pageContext.getAttribute(“name”); 可以指定域得到 pageContext.getAttribute(“name”,PageContext.域名稱); 自動搜尋域得到資料 pageContext.findAttribute(“name”); 搜尋規則:從四個域中按順序查詢資料: page -> request -> session -> application,如果找到,則返回該域的資料,如果沒找到繼續找完四個域為止,如果四個域都沒有,那麼返回null

<%--2.通過pageContext儲存域資料 --%>
<%
    //2.1往pageContext域中儲存資料(預設情況下,是儲存在page域中的)
    pageContext.setAttribute("name","eric");
    //2.2往其他域儲存資料
    pageContext.setAttribute("message","page's message",PageContext.PAGE_SCOPE );
 
    pageContext.setAttribute("message","request's message",PageContext.REQUEST_SCOPE );
 
    pageContext.setAttribute("message","session's message",PageContext.SESSION_SCOPE);
   
    pageContext.setAttribute("message","applicaton'smessage",PageContext.APPLICATION_SCOPE);
%>
 
<hr/>
 
<%--3.通過pageContext獲取域資料 --%>
<%=
    //3.1獲取pagecontext域儲存的資料
    pageContext.getAttribute("name")
%>
 
<br/>
 
<%= 
    //3.2獲取request域儲存的資料
    pageContext.getAttribute("message",PageContext.REQUEST_SCOPE)
%>
 
<br/>
 
<%=
    //3.3通過pageContext.findAttribute方法按順序查詢域中的資料
    pageContext.findAttribute("message")
%>