1. 程式人生 > 其它 >jsp內建物件

jsp內建物件

在JSP中一共預先定義了9個這樣的物件,分別為request、response、session、application、out、pageContext、config、page和exception

request物件封裝了由客戶端生成的HTTP請求的所有細節,主要包括HTTP頭資訊、系統資訊、請求方式和請求引數等。通過request物件提供的相應方法可以處理客戶端瀏覽器提交的HTTP請求中的各項引數。

request物件用於處理HTTP請求中的各項引數。在這些引數中,最常用的就是獲取訪問請求引數。當我們通過超連結的形式傳送請求時,可以為該請求傳遞引數,這可以通過在超連結的後面加上問號“?”來實現。注意這個問號為英文半形的符號。

如果要同時指定多個引數,各引數間使用與符號“&”分隔即可。

<a href="delete.jsp?id=1">刪除</a>

delete.jsp頁面: <% String id = request.getParameter("id"); //獲取id引數的值 %> 在進行請求轉發時,需要把一些資料傳遞到轉發後的頁面進行處理。這時,就需要使用request物件的setAttribute()方法將資料儲存到request範圍內的變數中 request.setAttribute(String name,Object object); 在將資料儲存到request範圍內的變數中後,可以通過request物件的getAttribute()方法獲取該變數的值 request.getAttribute(String name)

通過cookie的getCookies()方法即可獲取到所有cookie物件的集合;通過cookie物件的getName()方法可以獲取到指定名稱的cookie;通過getValue()方法即可獲取到cookie物件的值。另外將一個cookie物件傳送到客戶端使用了response物件的addCookie()方法。

request.setCharacterEncoding("UTF-8"); //設定請求的編碼
Cookie cookie = new Cookie("userCookie","您好"); //建立並例項化cookie物件
cookie.setMaxAge(60*60*24*30); //設定cookie有效期為30天
response.addCookie(cookie); //儲存cookie物件

//讀取cookie值
Cookie[] cookies = request.getCookies(); //從request中獲取cookie物件的集合
String user = "";
if(cookies != null)
{
//遍歷cookie物件集合
for(Cookie cookieItem : cookies)
{
if(cookieItem.getName().equals("userCookie"))
{
user = cookieItem.getValue(); //讀取cookie物件的的值
}
}
}

通過request物件可以獲取客戶端的相關資訊,如HTTP報頭資訊,客戶資訊提交方式、客戶端主機IP地址、埠號等。

request獲取客戶端資訊的常用方法:

response物件用於響應客戶請求,向客戶端輸出資訊。它封裝了JSP產生的響應,併發送到客戶端以響應客戶端的請求。請求的資料可以是各種資料型別,甚至是檔案。response物件在JSP頁面內有效。

使用response物件提供的sendRedirect()方法可以將網頁重定向到另一個頁面。重定向操作支援將地址重定向到不同的主機上,這一點與轉發不同。在客戶端瀏覽器上將會得到跳轉的地址,並重新發送請求連結。使用者可以從瀏覽器的位址列中看到跳轉後的地址。進行重定向操作後,request中的屬性全部失效,並且開始一個新的request物件。
response.sendRedirect(String path);

path:用於指定目標路徑,可以是相對路徑,也可以是不同主機的其他URL地址。

通過response物件可以設定HTTP響應報頭,其中,最常用的是禁用快取、設定頁面自動重新整理和定時跳轉網頁。

response.setHeader(String name, String value);

在預設情況下,瀏覽器將會對顯示的網頁內容進行快取,這樣可以提高網頁的顯示速度。對於一些安全性要求比較高的網站,通常需要禁用快取。

通過設定HTTP頭的方式實現禁用快取

response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0);

通過設定HTTP頭還可以實現頁面的自動重新整理。

使頁面每隔10秒自動重新整理一次。

response.setHeader("refresh", "10"); 通過設定HTTP頭還可以實現定時跳轉頁面功能。 使頁面5秒後自動跳轉到指定的網頁。 response.setHeader("refresh", "5;URL=login.jsp");

通常情況下,伺服器要輸出到客戶端的內容不會直接寫到客戶端,而是先寫到一個輸出緩衝區,在計算機術語中,緩衝區被定義為暫時放置輸入或輸出資料的記憶體。實際上,緩衝區也可以這樣理解:在一個糧庫中,由於裝缷車隊的速度要快於傳送帶的傳輸速度,為了不造成裝缷車隊的浪費,糧庫設計了一個站臺,裝缷車隊可以先將運送的糧食缷到這個平臺上,然後讓傳送機慢慢傳送。糧庫的這個站臺就起到了緩衝的作用。

如果將緩衝區的大小設定為0KB,則表示不緩衝。

session在網路中被稱為會話。由於HTTP協議是一種無狀態協議,也就是當一個客戶向伺服器發出請求,伺服器接收請求,並返回響應後,該連線就結束了,而伺服器並不儲存相關的資訊。為了彌補這一缺點,HTTP協議提供了session。通過session可以在應用程式的Web頁面間進行跳轉時,儲存使用者的狀態,使整個使用者會話一直存在下去,直到關閉瀏覽器。但是,如果在一個會話中,客戶端長時間不向伺服器發出請求,session物件就會自動消失。這個時間取決於伺服器,例如,Tomcat伺服器預設為30分鐘。不過這個時間可以通過編寫程式進行修改。

application物件用於儲存所有應用中的共有資料。它在伺服器啟動時自動建立,在伺服器停止時銷燬。當application物件沒有被銷燬時,所有使用者都可以共享該application物件。與session物件相比,application物件的生命週期更長,類似於系統的“全域性變數”。

out物件的另一個比較重要的功能就是對緩衝區進行管理。通過呼叫out物件的clear()方法可以清除緩衝區的內容。這類似於重置響應流,以便重新開始操作。如果響應已經提交,則會有產生IOException異常的負作用。out物件還提供了另一種清除緩衝區內容的方法,那就是clearBuffer()方法,通過該方法可以清除緩衝區的“當前”內容,而且即使內容已經提交給客戶端,也能夠訪問該方法。除了這兩個方法外,out物件還提供了其他用於管理緩衝區的方法。

獲取頁面上下文的pageContext物件是一個比較特殊的物件,通過它可以獲取JSP頁面的request、response、session、out、exception等物件。pageContext物件的建立和初始化都是由容器來完成的,JSP頁面中可以直接使用pageContext物件。

pageContext物件在實際JSP開發過程中很少使用,因為request和response等物件均為內建物件,如果通過pageContext物件來呼叫這些物件比較麻煩。

config物件主要用於取得伺服器的配置資訊。當一個Servlet初始化時,容器把某些資訊通過config物件傳遞給這個Servlet。開發者可以在web.xml檔案中為應用程式環境中的Servlet程式和JSP頁面提供初始化引數。

exception物件用來處理JSP檔案執行時發生的所有錯誤和異常,只有在page指令中設定 isErrorPage屬性值為true的頁面中才可以被使用,在一般的JSP頁面中使用該物件將無法編譯JSP檔案。exception物件幾乎定義了所有異常情況,在Java程式中,可以使用try...catch關鍵字來處理異常情況,如果在JSP頁面中出現沒有捕獲到的異常,就會生成exception物件,並把exception物件傳送到在page指令中定義的錯誤頁面中,然後在錯誤頁面中處理相應的exception物件。