HttpServletResponse

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);
    }
}

相關文章
相關標籤/搜索