JSP中的九大隱式對象及四個做用域

在這篇博文中,咱們將討論和學習JSP中的隱式對象及四個做用域。html

1、九大隱式對象

這些對象是JSP容器爲每一個頁面中的開發人員提供的Java對象,開發人員能夠直接調用它們而不用顯式地聲明它們再調用。 JSP隱式對象也稱爲預約義變量。java

下表列出了JSP支持的九個隱式對象 -程序員

1. request對象

request對象是javax.servlet.http.HttpServletRequest對象的一個實例。每當客戶端請求頁面時,JSP引擎將建立一個新對象來表示該請求。瀏覽器

request對象提供了獲取包括表單數據,Cookie,HTTP方法等HTTP頭信息的方法。緩存

2. response對象

response對象是javax.servlet.http.HttpServletResponse對象的一個實例。就像服務器建立request對象同樣,它還建立一個對象來表示對客戶端的響應。服務器

response對象還定義了處理建立新HTTP頭的接口。經過此對象,JSP程序員能夠添加新的Cookie或日期戳,HTTP狀態代碼等。session

3. out對象

out隱式對象是javax.servlet.jsp.JspWriter對象的一個實例,用於在響應中發送內容。app

初始化JspWriter對象根據頁面是否緩存而不一樣地實例化。緩衝能夠經過使用page指令的buffered ='false'屬性來關閉。yii

JspWriter對象包含與java.io.PrintWriter類大部分相同的方法。可是,JspWriter還有一些額外的方法用來處理緩衝。與PrintWriter對象不一樣,JspWriter會拋出IOExceptions異常。jsp

4. session對象

session對象是javax.servlet.http.HttpSession的一個實例,其行爲與Java Servlet下的會話對象行爲徹底相同。
session對象用於跟蹤客戶端請求之間的客戶端會話。

5. application對象

application對象是生成的ServletServletContext對象的直接包裝,其實是javax.servlet.ServletContext對象的一個實例。

application對象是JSP頁面在其整個生命週期中的表示。 當JSP頁面被初始化時,將建立此對象,而且在JSP頁面被jspDestroy()方法刪除時application對象也將被刪除。

經過向application對象添加屬性值,能夠確保組成Web應用程序的全部JSP文件均可以訪問它。

6. config對象

config對象是javax.servlet.ServletConfig的實例化,是生成的servlet的ServletConfig對象周圍的直接包裝。

7. pageContext對象

pageContext對象是javax.servlet.jsp.PageContext對象的一個實例。pageContext對象用於表示整個JSP頁面。

8. page對象

page對象是對該頁面實例的實際引用。能夠認爲它是表示整個JSP頁面的對象。

page對象是this對象的直接同義詞。

9. exception對象

exception對象是一個包含上一頁拋出的異常的包裝器。它一般用於生成對錯誤條件的適當響應。

 

2、JSP中四個做用域

所謂「做用域」就是「信息共享的範圍」,也就是說一個信息可以在多大的範圍內有效。JSP中九個內置對象及其相應所屬做用域以下表:

編號 對象 所屬做用域 做用域描述
1 request request 在當前請求中有效
2 response page 在當前頁面有效
3 out page 在當前頁面有效
4 session session 在當前會話中有效
5 application application 在全部應用程序中有效
6 config page 在當前頁面有效
7 pageContext page 在當前頁面有效
8 page page 在當前頁面有效
9 Exception page 在當前頁面有效

 

 

做用域介紹

由上圖可知,這九個內置對象都有相應的做用域,做用域在這裏的做用就是限定對象的生命週期。若是跳出了當前對象的做用域,該對象的信息就不能再被訪問。

讓咱們經過一個例子在理解上述過程

一、首先寫一個index.jsp頁面調用其中的request、session、application和pageContext這個四個內置對象,並分別給其設置num屬性值爲1。代碼以下:

 1 <body>
 2     <%
 3         pageContext.setAttribute("num", 1);
 4         session.setAttribute("num", 1);
 5         request.setAttribute("num", 1);
 6         application.setAttribute("num", 1);
 7         //response.sendRedirect("http://localhost:8088/demo1012/first.jsp");
 8     %>
 9     <table>
10         <tr>
11             <td>pageContext:</td>
12             <td><%=pageContext.getAttribute("num")%></td>
13         </tr>
14         <tr>
15             <td>session:</td>
16             <td><%=session.getAttribute("num")%></td>
17         </tr>
18         <tr>
19             <td>request:</td>
20             <td><%=request.getAttribute("num")%></td>
21         </tr>
22         <tr>
23             <td>application:</td>
24             <td><%=application.getAttribute("num")%></td>
25         </tr>
26     </table>
27 </body>

 

在瀏覽器請求index.jsp頁面顯示結果以下:

由結果可知,在index.jsp頁面中咱們能夠訪問四個對象的num屬性值。

二、咱們用<jsp:forward page="first.jsp"></jsp:forward>替換上面第7行代碼,從新請求index.jsp頁面。運行結果以下:

能夠看到沒法得到以前的那個pageContext對象的num屬性值,這主要是由於轉發請求到了first頁面,跳出了以前的pageContext對象的做用域,如今調用的pageContext對象是first.jsp頁面重建的一個。因此其num屬性值爲null。

三、咱們取消上述代碼中第7行的註釋,其中first.jsp頁面代碼就是上述代碼的table部分,咱們再從新請求index.jsp頁面。運行結果以下:

能夠看到沒法得到以前的那個pageContext和request的num屬性的值了,pageContext的緣由如上,而由於咱們對頁面重定向到了first.jsp,開始重瀏覽器到index.jsp的request鏈接結束了,因此如今得到的request是在index.jsp到first.jsp頁面創建的新request請求域下生成的request對象,因此其num屬性未初始化爲null。

四、咱們再從新使用其餘瀏覽器訪問first.jsp頁面,顯示的結果以下:

咱們知道當前會話,是指從用戶打開瀏覽器開始,到用戶關閉瀏覽器這中間的過程。由於此次咱們使用另外的瀏覽器對服務器發起請求,因此服務器爲此次用戶請求創建了新的會話,因此其num的屬性值爲null。另外由於只有index.jsp頁面對四個內置對象的num屬性進行了初始化,因此first.jsp頁面只有application對象還在其application做用域內。其值爲index.jsp頁面設置的1,其餘兩個屬性都爲null.

五、最後對於application做用域中的對象application,它的有效範圍是整個應用。整個應用是指從應用啓動,到應用結束。這裏並非說「從服務器啓動,到服務器關閉」,是由於一個服務器可能部署多個應用,固然你關閉了服務器,就會把上面全部的應用都關閉了。application做用域裏的變量,它們的存活時間是最長的,若是不進行手工刪除,它們就一直可使用。與上述三個不一樣的是,application裏的變量能夠被全部用戶共用。若是用戶甲的操做修改了application中的變量,用戶乙訪問時獲得的是修改後的值。這在其餘scope中都是不會發生的,page、 request和session都是徹底隔離的,不管如何修改都不會影響其餘人的數據。

 

總結

一、最後你必定就能夠理解下面說法了

 

參考資料:

一、對於JSP九大內置對象和四個做用域的理解:http://www.blogjava.net/ourday/archive/2008/09/20/230107.html

二、JSP九大內置對象:http://www.yiibai.com/jsp/jsp_implicit_objects.html

相關文章
相關標籤/搜索