能夠在html中用<meta http-equiv="" content="">來模擬響應頭信息,好比html
<meta http-equiv="refresh" content="3;url='/Home/Index'" /> 三秒後,跳轉到Home/Index頁面
java
一、向瀏覽器輸出中文亂碼瀏覽器
A、亂碼緣由: 加密方式 和 解密方式 不一樣形成。緩存
B、瀏覽器默認解密,通常是gb2313,若是加密方式也是gb2313則不會亂碼,可是存在兼容性問題,通常建議手動指定。tomcat
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 方式一 // 輸出UTF-8的數據,有出現亂碼問題,通知瀏覽器以UTF-8碼錶打開回送的數據 // response.setHeader("content-type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8"); String data = "你好"; OutputStream out = response.getOutputStream(); out.write(data.getBytes("UTF-8")); // 方式二 // 更改response的碼錶,通知服務器用UTF-8碼錶去取response中的數據,而後寫給客戶機 response.setCharacterEncoding("UTF-8"); // 通知瀏覽器以UTF-8碼錶打開回送的數據 // 調用了這句話,內部會執行response.setCharacterEncoding("UTF-8"); 所以能夠省略此句。 // response.setHeader("content-type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.write(data); }
二、response實現文件下載服務器
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.獲取須要下載的文件 String path = this.getServletContext().getRealPath( "/download/一直很安靜.mp3"); String filename = path.substring(path.lastIndexOf("\\") + 1); // System.out.println(filename); // 2.通知瀏覽器如下載方式打開 // 若是文件名中包含中文,則文件名要進行URL編碼,URLEncoding.encode;若是不進行編碼則文件名顯示錯誤而且不可下載。 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); // 3.向瀏覽器寫出數據 FileInputStream in = null; try { OutputStream out = response.getOutputStream(); in = new FileInputStream(path); byte buffer[] = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } finally { if (in != null) { in.close(); // 關閉流 } } }
三、refresh控制定時刷新jsp
A、利用Response設置響應頭refresh能夠實現頁面的定時刷新功能。ui
B、response.setHeader("Refresh", "3");//3秒刷新一次當前頁this
C、response.setHeader("Refresh", "3;url='/news/index.jsp'");//三秒後跳轉到另一個頁面。編碼
D、也可設置<meta http-equiv="refresh" content="3;url='/Home/Index'" /> 實現相同效果
四、 控制緩存
A、利用response設置expires響應頭爲0或-1瀏覽器就不會緩存當前資源。(一樣功能的頭還有Cache-Control:no-cache、Pragma: no-cache)
B、設置緩存文件
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // System.currentTimeMillis() 當前時間毫秒 ; 1000l 加l表明是long類型,相乘的結果也是long類型。 response.setDateHeader("Expires", System.currentTimeMillis() + 1000l * 3600 * 24 * 30); InputStream in = new FileInputStream(this.getServletContext() .getRealPath("1.jpg")); OutputStream out = response.getOutputStream(); byte[] bs = new byte[1024]; int i = 0; while ((i = in.read(bs)) != -1) { out.write(bs, 0, i); } in.close(); }
五、response實現請求重定向
A、response.sendRedirec("....");//是 發送兩次請求
B、利用 HttpContext 轉發實現重定向 是一次請求
/* 要利用ServletContext對象實現轉發 */ this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
六、getOutputStream和getWriter方法衝突的問題
A、getOutputStream和getWriter這兩個方法互相排斥,調用了其中的任何一個方法後,就不能再調用另外一方法。
B、lSerlvet的service方法結束後,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經調用過close方法,若是沒有,Servlet引擎tomcat將調用close方法關閉該輸出流對象。