|
JSP的response隱含物件在轉換為Servlet之後,對應於javax.servlet.http.HttpServletResponse型
態物件,
HttpServletResponse物件是有關於對客戶端請求之回應,您可以利用它來設定一些要回應的訊息,例如標題訊息、回應狀態碼等,必要的話,
您也可以由HttpServletResponse取得PrintWriter物件,由它來回應客戶端,以獲得PrintWriter的好處,而不是使用
JSP預設的out(JSPWriter)來應答客戶端。 首先介紹幾個 response(HttpServletResponse)設定標頭(Header)的方法,要使用這些標頭,您必須對HTTP協議先有些瞭解,這請自行查閱相關書籍,這邊假設您已經瞭解標頭的意義。 下面是如何設定"Refresh"標頭,在指定的時間後刷新網頁,或載入指定的網頁:
<%! int reloadCount = 0; %> setHeader()方法是一個通用的標頭設定方法,您可以用它來設定任何「名稱/值」的標頭,上面這個例子會每三秒鐘自動載入網頁,您可以由網頁上不 斷遞增的數字看到重新載入的次數,如果標頭設定的是一個整數值,則您也可以直接使用setIntHeader(),它是專門用來設定整數值標頭的版本,例 如: response.setIntHeader("Refresh", 3);
使用setHeader()的好處是,您可以像以下這麼設定標頭: response.setHeader("Refresh",
"3; URL=http://caterpillar.onlyfun.net/"); 上面的設定會在載入網頁,在3秒之後重新載入指定的網頁;注意標頭的設定必須在送出任何網頁本體(Body)之前設定好,如果網頁本體(例如HTML內容)已經送出,則設定標頭的動作是無用的。 如果您想要瀏覽器不要快取網頁,由於HTTP/1.0與HTTP1.1的設定方式不同,您可以使用先判定協定種類以設定不同的標頭,例如:
<% setDateHeader()是setHeader()的Date設定版本,第二個參數是設定Date的Long數值,0表示GMT 1970/1/1 00:00。 setHeader()、setIntHeader()與setDateHeader()方法會直接覆蓋標頭設定,如果您要對同一個標頭進行多值設定,可以使用add開頭的方法,例如:
<%@page contentType="text/html;charset=Big5"%> 這個例子中先設定標頭Refresh為3,然後加入URL資訊,新的資訊並不會覆蓋之前的標頭設定,其作用相當於: response.setHeader("Refresh",
"3; URL=http://caterpillar.onlyfun.net/"); 同樣的,以add為開頭來設定標頭的方法也有Int與Date版本。 response(HttpServletResponse)的setStatus()方法是用來設定回應的狀態碼,例如404 Not Found,HttpServletResponse類中提供了一些助憶常數設定,例如SC_NOT_FOUND就是表示404狀態碼(您可以在 Servlet API文件中查詢相關的助憶常數),使用setStatus()必須自行處理回應方式,如果是錯誤相關網頁,您可以使用sendError()方法,這個方法會根據伺服器的預設錯誤網頁回報方式顯示錯誤訊息,例如:
<%@page contentType="text/html;charset=Big5"%> 對Tomcat來說,會顯示以下的訊息: HTTP Status 404 - 找不到檔案
type Status report message 找不到檔案 description The requested resource (找不到檔案) is not available. ..... 使用setStatus()必須自行處理回應方式,下面是一個例子,它可以讓瀏覽器直接導向至指定的網頁:
<% 事實上,上面的程式只要使用sendRedirect()方法就可以了,例如:
<% response是HttpServletResponse型態的物件,在Servlet的實作中,是從 HttpServletResponse物件取得PrintWriter物件,由它來寫出回應至伺服器的本體資訊,在JSP中也可以取得 PrintWriter物件,例如您可以用PrintWriter來顯示例外的堆疊追蹤:
<%@page contentType="text/html;charset=Big5" |