HttpServletResponse

HttpServletResponse概述:

我们在创建Servlet()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表的request和代表响应response。

service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大。

通过response设置响应行:

设置响应行的状态码:

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

运行结果:

 

通过response设置响应头:

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

运行结果:

 

通过response设置响应体:

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

文件下载:

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

 

posted on 2019-07-03 09:07  boss-H  阅读(491)  评论(0编辑  收藏  举报

导航