# 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">
<title>JSP教程(cms.yiniuedu.com)</title>
</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秒顯示一下系統當前時間。
我們可以看一下下圖變化:

您也可以自己動手修改以上代碼,試試使用其他的方法,將能得到更深的體會。
- Java Web項目開發學習手冊
- 一、B/S開發環境搭建
- 1.1 tomcat服務器目錄結構及作用
- 1.2 在IDE開發工具上配置tomcat服務器
- 1.3 簡單web項目在tomcat服務器上運行的方法
- 1.4 開發工具設置
- 1.5 總結
- 二、Servlet技術應用
- 2.1 HttpServlet中的主要方法及應用
- 2.1.1 基于Eclipse完成一個JavaWeb項目
- 2.2 HttpRequest,HttpResponse的應用
- 2.2.1客戶端請求
- 2.2.2服務器響應
- 2.2.3Servlet HTTP 狀態碼
- 2.2.4圖片驗證碼類
- 2.2.5注冊模擬實現(帶驗證碼)
- 2.3 ServletConfig對象和ServletContext對象的概念
- 2.4 總結
- 三、JSP技術應用
- 3.1 JSP基本語法
- 3.2 JSP標簽和指令
- 3.3 JSP中的隱式對象
- 3.4 常用應用操作
- 3.4.1 JSP客戶端請求
- 3.4.2 JSP服務器響應
- 3.4.3 HTTP狀態碼
- 3.4.4 表單處理
- 3.4.5 過濾器
- 3.4.6 Cookie處理
- 3.4.7 Session處理
- 3.4.8 文件上傳
- 3.4.9 日期處理
- 3.4.10 頁面重定向
- 3.4.11 點擊量統計
- 3.4.12 自動刷新
- 3.4.13 發送郵件
- 3.5 JSP高級應用
- 3.5.1 JSP標準標簽庫(JSTL)
- 3.5.2 JSP連接數據庫
- 3.5.3 JSP XML數據處理
- 3.5.4 JSP JavaBean
- 3.5.5 自定義標簽
- 3.5.6 表達式語言
- 3.5.7 異常處理
- 3.5.8 調試
- 3.5.9 JSP國際化
- 3.6 實踐代碼
- 3.6.1 實踐代碼
- 3.6.2 項目實戰
- 3.7 總結
- 四、MVC思想的理解和搭建MVC
- 4.1 MVC設計模式的思想
- 4.2 MVC設計模式的實現步驟
- 4.3 項目實踐
- 4.4 總結
- 五、EL表達式和JSTL技術
- 5.1 EL表達式及其應用
- 5.2 常用的JSTL標簽的應用
- 5.3 項目實踐
- 5.4 總結
- 六、Cookie和Session
- 6.1 cookie對象的概念和應用
- 6.2 session對象的概念和應用
- 6.3 項目實踐
- 6.4 總結
- 七、過濾器技術應用
- 7.1 Filter的概念及應用
- 7.2 Filter、FilterChain、FilterConfig 介紹
- 7.3 用戶登錄過濾案例
- 7.4 項目實戰
- 7.5總結
- 八、異步請求技術
- 8.1 JSON數據格式
- 8.2 使用AJAX實現異步請求
- 8.3 用戶名校驗案例
- 8.4小結
- 綜合項目技術實訓
- 1.BS項目開發項目實戰
- 2.項目需求分析和系統設計
- 2.1需求分析
- 2.2類型模型設計
- 2.3原型設計
- 3.項目數據庫分析和系統設計
- 4.BS項目編程實現
- 4.1搭建框架和命名規約
- 4.2實現步驟
- 4.2.1創建實體類
- 4.2.2創建過濾器類
- 4.2.3創建工具類
- 4.2.4創建DAO接口及其實現類
- 4.2.5創建Service接口及其實現類
- 4.2.6創建測試類
- 4.2.7創建控制器類
- 5.企業開發流程規范
- 6.總結
- 九、練習題及答案
- 企業開發常用技術
- 1.Maven技術
- Java命名規范解讀
- 參考資料
- 開發中常用的應用服務器和Web服務器