JSP九大內置對象及其作用+四大域對象

JSP九大內置對象及其作用+四大域對象 




一,什麼是內置對象?

在jsp開發中會頻繁使用到一些對象,如ServletContext HttpSession PageContext等.如果每次我們在jsp頁面中需要使用這些對象都要自己親自動手創建就會特別的繁瑣.SUN公司因此在設計jsp時,在jsp頁面加載完畢之後自動幫開發者創建好了這些對象,開發者只需要使用相應的對象調用相應的方法即可.這些系統創建好的對象就叫做內置對象.

在servlet程序中,如果開發者希望使用session對象,必須通過request.getSession()來得到session對象;而在jsp程序中,開發中可直接使用session(系統幫我們創建好的session對象的名字就叫session)調用相應的方法即可,如:session.getId().

   JSP全名爲Java Server Pages,中文名叫java服務器頁面。

   JSP中一共預先定義了9個這樣的對象,分別爲:request、response、session、application、out、pagecontext、config、page、exception

內置對象(又叫隱含對象)特點: 
1. 由JSP規範提供,不用編寫者實例化。 
2. 通過Web容器實現和管理 
3. 所有JSP頁面均可使用 
4. 只有在腳本元素的表達式或代碼段中才可使用(<%=使用內置對象%>或<%使用內置對象%>)

詳文一:


1、request對象

request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域爲一次請求。


2、response對象

response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。


3、session對象

session 對象是由服務器自動創建的與用戶請求相關的對象。服務器爲每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。session對象內部使用Map類來保存數據,因此保存數據的格式爲 “Key/value”。 session對象的value可以使複雜的對象類型,而不僅僅侷限於字符串類型。


4、application對象

 application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,類似於系統的“全局變量”。


5、out 對象

out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,爲其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。


6、pageContext 對象

pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。


7、config 對象

config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。


8、page 對象

page 對象代表JSP本身,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。


9、exception 對象

exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中纔可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。excepation對象和Java的所有對象一樣,都具有系統提供的繼承結構。exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 對象。


詳文二:

1、request對象javax.servlet.http.HttpServletRequest 
request對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對 象的作用域爲一次請求。

當Request對象獲取客戶提交的漢字字符時,會出現亂碼問題,必須進行特殊處理。首先,將獲取的字符串用ISO-8859-1進行編碼,並將編碼存發島一個字節數組中,然後再將這個數組轉化爲字符串對象如下

Request常用的方法:getParameter(String strTextName) 獲取表單提交的信息.

getProtocol() 獲取客戶使用的協議。

String strProtocol=request.getProtocol();

getServletPath() 獲取客戶提交信息的頁面。String strServlet=request.getServletPath();

getMethod() 獲取客戶提交信息的方式 String strMethod=request.getMethod();

getHeader() 獲取HTTP頭文件中的accept,accept-encoding和Host的值,String strHeader=request.getHeader();

getRermoteAddr() 獲取客戶的IP地址。String strIP=request.getRemoteAddr();

getRemoteHost() 獲取客戶機的名稱。String clientName=request.getRemoteHost(); 
getServerName() 獲取服務器名稱。 String serverName=request.getServerName(); 
getServerPort() 獲取服務器的端口號。 int serverPort=request.getServerPort(); 
getParameterNames() 獲取客戶端提交的所有參數的名字。

Enumeration enum = request.getParameterNames();while(enum.hasMoreElements())
{
    Strings(String)enum.nextElement();    out.println(s);
}123456

2、response對象 javax.servlet.http.HttpServletResponse 
response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。

具有動態響應contentType屬性,當一個用戶訪問一個JSP頁面時,如果該頁面用page指令設置頁面的contentType屬性是text/html,那麼JSP引擎將按照這個屬性值做出反應。

如果要動態改變這換個屬性值來響應客戶,就需要使用Response對象的setContentType(String s)方法來改變contentType的屬性值。

response.setContentType(String s); 參數s可取text/html,application/x-msexcel,application/msword等。

在某些情況下,當響應客戶時,需要將客戶重新引導至另一個頁面,可以使用Response的sendRedirect(URL)方法實現客戶的重定向。

例如response.sendRedirect(index.jsp);

3、session對象 javax.servlet.http.HttpSession 
Session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理。從一個客戶打開瀏覽器並連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客戶,就需要Session對象。 
當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個Session對象,同時分配一個String類型的ID號,JSP引擎同時將這換個ID號發送到客戶端,存放在Cookie中,這樣Session對象,直到客戶關閉瀏覽器後,服務器端該客戶的Session對象才取消,並且和客戶的會話對應關係消失。當客戶重新打開瀏覽器再連接到該服務器時,服務器爲該客戶再創建一個新的Session對象。 
session 對象是由服務器自動創建的與用戶請求相關的對象。服務器爲每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。

session對象內部使用Map類來保存數據,因此保存數據的格式爲 “Key/value”。 session對象的value可以使複雜的對象類型,而不僅僅侷限於字符串類型。

public String getId():獲取Session對象編號。

public void setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Session對象中,併爲添加的對象指定一個索引關鍵字。

public Object getAttribute(String key):獲取Session對象中含有關鍵字的對象。

public Boolean isNew():判斷是否是一個新的客戶。

4、application對象javax.servlet.ServletContext 
application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,類似於系統的“全局變量”。

服務器啓動後就產生了這個Application對象,當客戶再所訪問的網站的各個頁面之間瀏覽時,這個Application對象都是同一個,直到服務器關閉。但是與Session對象不同的時,所有客戶的Application對象都時同一個,即所有客戶共享這個內置的Application對象。

setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Application對象中,併爲添加的對象指定一個索引關鍵字。

getAttribute(String key):獲取Application對象中含有關鍵字的對象。

5、out 對象javax.servlet.jsp.jspWriter 
out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,爲其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。

Out對象時一個輸出流,用來向客戶端輸出數據。Out對象用於各種數據的輸出。其常用方法如下。

out.print():輸出各種類型數據。

out.newLine():輸出一個換行符。

out.close():關閉流。

6、pageContext 對象javax.servlet.jsp.PageContext 
pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。

pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

page 對象代表JSP本身,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。

7、config 對象javax.servlet.ServletConfig 
config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。開發者可以在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。

8 cookie 對象 
Cookie是Web服務器保存在用戶硬盤上的一段文本。Cookie允許一個Web站點在用戶電腦上保存信息並且隨後再取回它。舉例來說,一個Web站點可能會爲每一個訪問者產生一個唯一的ID,然後以Cookie文件的形式保存在每個用戶的機器上。

創建一個Cookie對象 調用Cookie對象的構造函數就可以創建Cookie對象。Cookie對象的構造函數有兩個字符串參數:Cookie名字和Cookie值。

例如:Cookie c = new Cookie(username”,john”); 將Cookie對象傳送到客戶端。

JSP中,如果要將封裝好的Cookie對象傳送到客戶端,可使用Response對象的addCookie()方法。

例如:response.addCookie(c),讀取保存到客戶端的Cookie。

使用Request對象的getCookie()方法,執行時將所有客戶端傳來的Cookie對象以數組的形式排列,如果要取出符合需要的Cookie對象,就需要循環比較數組內每個對象的關鍵字。設置Cookie對象的有效時間,用Cookie對象的setMaxAge()方法便可以設置Cookie對象的有效時間,

例如:Cookie c = newCookie(username”,”john”);c.setMaxAge(3600);

Cookie對象的典型應用時用來統計網站的訪問人數。由於代理服務器、緩存等的使用,唯一能幫助網站精確統計來訪人數的方法就是爲每個訪問者建立一個唯一ID。使用Cookie,網站可以完成以下工作:

測定多少人訪問過。測定訪問者有多少是新用戶(即第一次來訪),多少是老用戶。

測定一個用戶多久訪問一次網站。當一個用戶第一次訪問時,網站在數據庫中建立一個新的ID,並把ID通過Cookie傳送給用戶。用戶再次來訪時,網站把該用戶ID對應的計數器加1,得到用戶的來訪次數。

9、exception 對象java.lang.Throwable 
exception 對象的作用是顯示異常信息,只有在包含 isErrorPage=”true” 的頁面中纔可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。

excepation對象和Java的所有對象一樣,都具有系統提供的繼承 結構。

exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 對象。

 

對象名功能類型作用域
request向客戶端請求數據javax.servlet.ServletRequestRequest
response封裝了jsp產生的響應,然後被髮送到客戶端以響應客戶的請求javax.servlet.SrvletResponsePage
pageContext爲JSP頁面包裝頁面的上下文。管理對屬於JSP中特殊可見部分中己經命名對象的該問javax.servlet.jsp.PageContextPage
session用來保存每個用戶的信息,以便跟蹤每個用戶的操作狀態javax.servlet.http.HttpSessionSession
application應用程序對象javax.servlet.ServletContextApplication
out向客戶端輸出數據javax.servlet.jsp.JspWriterPage
config表示Servlet的配置,當一個Servlet初始化時,容器把某些信息通過此對象傳遞給這個Servletjavax.servlet.ServletConfigPage
pageJsp實現類的實例,它是jsp本身,通過這個可以對它進行訪問javax.lang.ObjectPage
exception反映運行的異常javax.lang.ThrowablePage


二,解析幾個內置對象


1)out對象對象,對象類型是JspWriter類,相當於帶緩存的PrintWriter(不帶緩存)

PrintWriter:write("內容")           直接向瀏覽器輸出內容

JspWriter:writer("內容")            向jsp緩衝區寫出內容

JspWriter當滿足以下條件時之一時,緩衝區的內容寫出:

a,緩衝區滿了

b,刷新緩衝區

c,關閉緩衝區

d,jsp頁面執行完畢


2)pageContext對象

pageContext的對象類型是PageContext,叫jsp的上下文對象.

pageContext作用:可以獲取其他八個內置對象

  1. //示例:  

  2. pageContext.getOut();  

  3. pageContext.getServletConfig()  

使用場景:在自定義標籤時會頻繁使用到PageContext對象;或者是定義一個方法需要用到多個對象時,傳一個pageContext對象就能解決問題.

pageContext對象  這個對象代表頁面上下文,該對象主要用於訪問JSP之間的共享數據。

 pageContextPageContext類的實例,使用pageContext可以訪問pagerequestsessionapplication範圍的變量。     

 getAttribute(String name):取得page範圍內的name屬性。 

  setAttribute(String name,,int scope):如果沒有指定scope,該屬性默認在page範圍內,如:pageContext.setAttribute("page","hello");  

使用pageContext將屬性設置在request範圍中pageContext.setAttribute("request2","hello" , pageContext.REQUEST_SCOPE);  

使用pageContext將屬性設置在session範圍中pageContext.setAttribute("session2","hello" , pageContext.SESSION_SCOPE); 

 使用pageContext將屬性設置在application範圍中pageContext.setAttribute("app2","hello" , pageContext.APPLICATION_SCOPE);    

 getAttribute(String name,int scope):取得指定範圍內的name屬性,

其中scope可以是如下4個值:

 PageContext.PAGE_SCOPE:對應於page範圍。 

  PageContext.REQUEST_SCOPE:對應於request範圍。 

 PageContext.SESSION_SCOPE:對應於session範圍。 

 PageContext.APPLICATION_SCOPE:對應於application範圍。

 

 

三. JSP中四大域對象


分類:

  1. ServletContext     context域  

  2. HttpServletRequet  request域  

  3. HttpSession        session域     --前三種在學習Servlet時就能接觸到  

  4. PageContext        page域     --jsp學習的  

域對象的作用:保存數據,獲取數據,共享數據.


保存數據:


Context.setAttribute("內容");//默認保存到page域  

  1. pageContext.setAttribute("內容",域範圍常量);//保存到指定域中  

  2. //四個域常量  

  3. PageContext.PAGE_SCOPE  

  4. PageContext.REQUEST_SCOPE  

  5. PageContext..SESSION_SCOPE  

  6. PageContext.APPLICATION_SCOPE  


獲取數據:

  1. pageContext.getAttribute("內容");  

pageContext.getAttribute("name",域範圍常量);

//自動在四個域中搜索數據 pageContext.findAttribute("內容");//在四個域中自動搜索數據,順序:page域->request域->session域->application域(context域)


域作用範圍:

  1. page域:    只能在當前jsp頁面使用                (當前頁面)  

  2. request域: 只能在同一個請求中使用               (轉發)  

  3. session域: 只能在同一個會話(session對象)中使用  (私有的)  

  4. context域: 只能在同一個web應用中使用            (全局的)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章