如果開發者需要獲取用戶的請求那么請使用HttpServletRequest接口的對象。
如果開發者需要響應用戶的請求那么請使用HttpServletResponse接口的對象。
HttpServletResponse接口該接口默認繼承ServletResponse接口。該接口的主要任務是處理響應頭信息、以及處理客戶端請求的響應體數據和Cookie的數據傳輸。
ServletResponse接口中常用的方法
核心的方法是給Response對象進行數據的輸出。
ServletOutputStream getOutputStream() ? 獲取響應對象的字節輸出流PRintWriter getWriter() ? 獲取響應對象的字符流對象setContentType(String type) ? 指定響應的數據的內容類型setCharacterEncoding(String charset) ? 指定響應數據的編碼方式
HttpServletResponse接口中常用的方法
設置響應狀態碼和響應頭信息setStatus(int sc) setHeader(String name, String value)進行請求的重定向sendRedirect(String location)進行Cookie數據傳輸void addCookie(Cookie cookie)使用URL ReWritting技術實現會話String encodeURL(String url) String encodeRedirectURL(String url)控制響應狀態碼和響應頭
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { // 設置響應狀態碼 response.setStatus(302); // 資源臨時轉移 // 設置響應頭信息指定資源目前的最新地址 response.setHeader("location", "/day06/index.jsp"); }問題: 對于一個不懂HTTP協議的人而言,以上的代碼是寫不出來的。
可以使用以下的語句進行替換:
response.sendRedirect("/day06/index.jsp");字節流做響應體的輸出public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { // 通知瀏覽器以UTF-8的方式進行解碼 response.setHeader("content-type", "text/html;charset=utf-8"); // 獲取字節流對象 ServletOutputStream out = response.getOutputStream(); // 定義要輸出的數據 String data = "hello<br/>"; // 輸出數據 out.write(data.getBytes()); data = "<font color=/"blue/">this is a blue color!</font><br/>"; out.write(data.getBytes()); // 輸出中文數據 data = "中國"; // 獲取中文數據的UTF-8編碼 out.write(data.getBytes("UTF-8")); // UTF-8 }以上的代碼中使用協議的語句可以使用以下的代碼進行簡化:
response.setContentType("text/html;charset=utf-8"); 以上的代碼可以使用模擬HTTP協議的meta標簽進行簡化:
out.write("<meta http-equiv=/"content-type/" content=/"text/html; charset=UTF-8/">".getBytes());
如果使用字節流直接輸出數字會怎樣?
// 輸出int數據int num = 65;out.write(num);
由于瀏覽器是一個文本軟件,那么在解析數字的時候都會默認的進行字符的轉換,因此以上的代碼顯示的是A。如果要強行的輸出65,那么需要使用out.write(“65”.getBytes());
1 使用字節流輸出圖片
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { // 獲取網站對象 ServletContext context = this.getServletContext(); // 獲取網站資源 String path = context.getRealPath("/imgs/如果一個網站中既有圖片又有文本,那么需要使用什么流?
Repsonse不可能同時獲取字節流和字符流,對于以上的問題是由于HTTP通信原理沒有掌握清楚才導致。瀏覽器發送請求處理的一定是頁面,但是頁面中的圖片表現的形式不是字節流的方式而是<img serc=”url”/>直接發送給瀏覽器即可,瀏覽器會檢索該src指定的路徑繼續發送請求以字節流的方式獲取圖片。
新聞熱點
疑難解答