• HttpServletResponse


    HttpServletResponse

        Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
    request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

    1、负责向客户端(浏览器)发送数据的相关方法:

     2,负责向客户端(浏览器)发送响应头的相关方法

     3,负责向客户端(浏览器)发送响应状态码的相关方法

     4、HttpServletResponse对象常见应用

        /**
          * 使用OutputStream流输出中文
          * @param request
          * @param response
         * @throws IOException 
          */   
             String data = "中国";
             OutputStream outputStream = response.getOutputStream();//获取OutputStream输出流
            response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
            /**
              * data.getBytes()是一个将字符转换成字节数组的过程,这个过程中一定会去查码表,
             * 如果是中文的操作系统环境,默认就是查找查GB2312的码表,
             * 将字符转换成字节数组的过程就是将中文字符转换成GB2312的码表上对应的数字
             * 比如: "中"在GB2312的码表上对应的数字是98
             *         "国"在GB2312的码表上对应的数字是99
             */
            /**
             * getBytes()方法如果不带参数,那么就会根据操作系统的语言环境来选择转换码表,如果是中文操作系统,那么就使用GB2312的码表
             */
             byte[] dataByteArr = data.getBytes("UTF-8");//将字符转换成字节数组,指定以UTF-8编码进行转换
             outputStream.write(dataByteArr);//使用OutputStream流向客户端输出字节数组

    使用PrintWriter流向客户端浏览器输出中文数据:

    1 response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
    2 /**
    3 * PrintWriter out = response.getWriter();这句代码必须放在response.setCharacterEncoding("UTF-8");之后
    4 * 否则response.setCharacterEncoding("UTF-8")这行代码的设置将无效,浏览器显示的时候还是乱码
    5 */
    6 PrintWriter out = response.getWriter();//获取PrintWriter输出流

    文件下载

    文件下载功能的实现思路:

      1.获取要下载的文件的绝对路径

      2.获取要下载的文件名

      3.设置content-disposition响应头控制浏览器以下载的形式打开文件

      4.获取要下载的文件输入流

      5.创建数据缓冲区

      6.通过response对象获取OutputStream流

      7.将FileInputStream流写入到buffer缓冲区

      8.使用OutputStream将缓冲区的数据输出到客户端浏览器

          String realPath = this.getServletContext().getRealPath("/download/我爱你.JPG");//获取要下载的文件的绝对路径
          String fileName = realPath.substring(realPath.lastIndexOf("\")+1);//获取要下载的文件名
            //设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
             response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
             InputStream in = new FileInputStream(realPath);//获取文件输入流
             int len = 0;
             byte[] buffer = new byte[1024];
            OutputStream out = response.getOutputStream();
            while ((len = in.read(buffer)) > 0) {
                out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器
           }
             in.close();

    使用PrintWriter流处理字节数据,会导致数据丢失,这一点千万要注意,因此在编写下载文件功能时,要使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。

    禁止缓存当前文档内容

    response.setDateHeader("expries", -1);
    
    response.setHeader("Cache-Control", "no-cache");
    
    response.setHeader("Pragma", "no-cache");

    重定向

     resp.sendRedirect(req.getContextPath() + "/index.jsp");



     
     
     
     
     
     
     
     
     
  • 相关阅读:
    P1005 矩阵取数
    [BZOJ2662][BeiJing wc2012]冻结
    [BZOJ1191]超级英雄Hero
    [bzoj1008] 越狱
    [bzoj1001]狼抓兔子 最小割
    网络流24题——负载平衡问题
    分形小山
    可并堆——左偏树、斜堆
    NOIP最优贸易
    洛谷P2073送花
  • 原文地址:https://www.cnblogs.com/dw3306/p/12706606.html
Copyright © 2020-2023  润新知