Web服務器收到一個http請求,會針對每個請求創建一個HttpServletRequest和HttpServletResponse對象,從客戶端取數據用HttpServletRequest,向客戶端響應數據就用HttpServletResponse。
常用方法
addHeader(String name,String value) //將指定的名字和值加入到響應的頭信息中
encodeURL(String url) //編碼指定的URL
sendError(int sc) //使用指定狀態碼發送一個錯誤到客戶端
setDateHeader(String name,long date //將給出的名字和日期設置響應的頭部
setHeader(String name,String value) //將給出的名字和值設置響應的頭部 eg:response.setHeader(“Refresh”,”2;url=”http://www.baidu.com”); 頁面的刷新
setStatus(int sc) //給當前響應設置狀態碼
getOutputStream() //字節輸出流對象
getWriter() //字符的輸出流對象
sendRedirect () //對瀏覽器的請求直接作出響應,響應的結果就是告訴瀏覽器去重新發出對另外一個URL的訪問請求;方法調用者與被調用者使用各自的request對象和response對象,它們屬於兩個獨立的訪問請求和響應過程。
setContentType(String ContentType) //設置響應的MIME類型 ,頁面的設置文本類型,獲取或設置輸出流的 HTTP MIME 類型。
setCharacterEncoding(String charset) //告知服務器用什么方式編碼解析
細節總結
- getOutputStream()和getWriter()方法分別用於得到輸出二進制數據、輸出文本數據的ServletOuputStream、Printwriter對象。
也可以說getOutputStream()是字節流,getWriter()是字符流。 - getOutputStream和getWriter這兩個方法互相排斥,調用了其中的任何一個方法后,就不能再調用另一方法。
- Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數據將被Servlet引擎從response里面獲取,Servlet引擎將這些數據當作響應消息的正文,然后再與響應狀態行和各響應頭組合后輸出到客戶端。
- Serlvet的service方法結束后,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經調用過close方法,如果沒有,Servlet引擎將調用close方法關閉該輸出流對象。
- HttpServletResponse輸出中文的時候,注意服務端,客戶端兩邊的編碼一定要相同,不如就會出現亂碼。
示例代碼
@RequestMapping("/test")
public void send(HttpServletRequest request,HttpServletResponse response) {
response.setHeader("Content-type", "application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
String content="HelloWorld";
response.getWriter().write(content);
}
其他設置示例:
response.setContentType("image/jpeg");//設置相應類型,告訴瀏覽器輸出的內容為圖片
response.setHeader("Pragma", "No-cache");//設置響應頭信息,告訴瀏覽器不要緩存此內容
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
參考資料:
http://www.51gjie.com/javaweb/964.html
https://blog.csdn.net/Ada_yangyang/article/details/82191865