JSP 伺服器響應
阿新 • • 發佈:2020-07-17
JSP 伺服器響應
Response響應物件主要將JSP容器處理後的結果傳回到客戶端。可以通過response變數設定HTTP的狀態和向客戶端傳送資料,如Cookie、HTTP檔案頭資訊等。
一個典型的響應看起來就像下面這樣:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(空行)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
狀態行包含HTTP版本資訊,比如HTTP/1.1,一個狀態碼,比如200,還有一個非常短的資訊對應著狀態碼,比如OK。
下表摘要出了HTTP1.1響應頭中最有用的部分,在網路程式設計中您將會經常見到它們:
響應頭 | 描述 |
---|---|
Allow | 指定伺服器支援的request方法(GET,POST等等) |
Cache-Control | 指定響應文件能夠被安全快取的情況。通常取值為 public,private 或no-cache 等等。 Public意味著文件可快取,Private意味著文件只為單使用者服務並且只能使用私有快取。No-cache 意味著文件不被快取。 |
Connection | 命令瀏覽器是否要使用持久的HTTP連線。close****值 命令瀏覽器不使用持久HTTP連線,而keep-alive 意味著使用持久化連線。 |
Content-Disposition | 讓瀏覽器要求使用者將響應以給定的名稱儲存在磁碟中 |
Content-Encoding | 指定傳輸時頁面的編碼規則 |
Content-Language | 表述文件所使用的語言,比如en, en-us,,ru等等 |
Content-Length | 表明響應的位元組數。只有在瀏覽器使用持久化 (keep-alive) HTTP 連線時才有用 |
Content-Type | 表明文件使用的MIME型別 |
Expires | 指明啥時候過期並從快取中移除 |
Last-Modified | 指明文件最後修改時間。客戶端可以 快取文件並且在後續的請求中提供一個 If-Modified-Since |
Location | 在300秒內,包含所有的有一個狀態碼的響應地址,瀏覽器會自動重連然後檢索新文件 |
Refresh | 指明瀏覽器每隔多久請求更新一次頁面。 |
Retry-After | 與503 (Service Unavailable)一起使用來告訴使用者多久後請求將會得到響應 |
Set-Cookie | 指明當前頁面對應的cookie |
HttpServletResponse類
response 物件是 javax.servlet.http.HttpServletResponse 類的一個例項。就像伺服器會建立request物件一樣,它也會建立一個客戶端響應。
response物件定義了處理建立HTTP資訊頭的介面。通過使用這個物件,開發者們可以新增新的cookie或時間戳,還有HTTP狀態碼等等。
下表列出了用來設定HTTP響應頭的方法,這些方法由HttpServletResponse 類提供:
S.N. | 方法 & 描述 |
---|---|
1 | String encodeRedirectURL(String url)對sendRedirect()方法使用的URL進行編碼 |
2 | String encodeURL(String url)將URL編碼,回傳包含Session ID的URL |
3 | boolean containsHeader(String name)返回指定的響應頭是否存在 |
4 | boolean isCommitted()返回響應是否已經提交到客戶端 |
5 | void addCookie(Cookie cookie)新增指定的cookie至響應中 |
6 | void addDateHeader(String name, long date)新增指定名稱的響應頭和日期值 |
7 | void addHeader(String name, String value)新增指定名稱的響應頭和值 |
8 | void addIntHeader(String name, int value)新增指定名稱的響應頭和int值 |
9 | void flushBuffer()將任何快取中的內容寫入客戶端 |
10 | void reset()清除任何快取中的任何資料,包括狀態碼和各種響應頭 |
11 | void resetBuffer()清除基本的快取資料,不包括響應頭和狀態碼 |
12 | void sendError(int sc)使用指定的狀態碼向客戶端傳送一個出錯響應,然後清除快取 |
13 | void sendError(int sc, String msg)使用指定的狀態碼和訊息向客戶端傳送一個出錯響應 |
14 | void sendRedirect(String location)使用指定的URL向客戶端傳送一個臨時的間接響應 |
15 | void setBufferSize(int size)設定響應體的快取區大小 |
16 | void setCharacterEncoding(String charset)指定響應的編碼集(MIME字符集),例如UTF-8 |
17 | void setContentLength(int len)指定HTTP servlets中響應的內容的長度,此方法用來設定 HTTP Content-Length 資訊頭 |
18 | void setContentType(String type)設定響應的內容的型別,如果響應還未被提交的話 |
19 | void setDateHeader(String name, long date)使用指定名稱和值設定響應頭的名稱和內容 |
20 | void setHeader(String name, String value)使用指定名稱和值設定響應頭的名稱和內容 |
21 | void setIntHeader(String name, int value)指定 int 型別的值到 name 標頭 |
22 | void setLocale(Locale loc)設定響應的語言環境,如果響應尚未被提交的話 |
23 | void setStatus(int sc)設定響應的狀態碼 |
HTTP響應頭程式示例
接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來模擬一個數字時鐘:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h2>自動重新整理例項</h2>
<%
// 設定每隔5秒自動重新整理
response.setIntHeader("Refresh", 5);
// 獲取當前時間
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("當前時間: " + CT + "\n");
%>
</body>
</html>
將以上程式碼儲存為main.jsp,然後通過瀏覽器訪問它。它將會每隔5秒顯示一下系統當前時間。