HttpServletResponse

2021-03-22 08:24

阅读:618

技术图片

 

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

 





评论


亲,登录后才可以留言!