HttpServletResponse概述:html
咱們在建立Servlet()方法,或doGet()/doPost(),這些方法都有兩個參數,一個爲表明的request和表明響應response。java
service方法中的response的類型是ServletResponse,而doGet/doPost方法的response的類型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更增強大。瀏覽器
經過response設置響應行:oracle
設置響應行的狀態碼:編碼
public class HeadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置響應行中的狀態碼 response.setStatus(404); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
運行結果:url
經過response設置響應頭:spa
public class RefreshServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置定時刷新的頭 response.setHeader("Refresh", "5;url=http://www.baidu.com"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
運行結果:.net
經過response設置響應體:3d
public class Body extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*//設置緩衝區的編碼表 response.setCharacterEncoding("UTF-8"); //設置客戶端瀏覽器使用的碼錶 response.setHeader("Content-Type", "text/html;charset=utf-8");*/ //解決相應的中文亂碼 response.setContentType("text/html;charset=utf-8"); response.getWriter().write("中國"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
文件下載:code
package com.oracle.demo02; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownLoadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲取文件名 String filename=request.getParameter("file"); //解決文件名亂碼問題 filename=new String(filename.getBytes("ISO-8859-1"), "UTF-8"); //獲取User-Agent獲取客戶端瀏覽器究竟是哪一個瀏覽器 String agent=request.getHeader("User-Agent"); String filenameEncoder=""; if (agent.contains("MSIE")) { // IE瀏覽器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); filenameEncoder= filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐瀏覽器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder= "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它瀏覽器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); } //告知瀏覽器文件的類型 response.setContentType(getServletContext().getMimeType(filename)); //告知瀏覽器以附件的方式提供下載功能而不是解析 response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //獲取字節輸出流 ServletOutputStream sos=response.getOutputStream(); //獲取數據源的絕對路徑 String realpath=getServletContext().getRealPath("download/"+filename); //獲取字節輸入流 FileInputStream fis=new FileInputStream(realpath); //開始複製 byte[] bytes=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1){ sos.write(bytes,0,len); } //釋放資源 fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }