javaweb学习10:Response下载文件

javaweb学习10:Response下载文件

  • HttpServletResponse对象:

    • web服务器接收到客户端的HTTP请求,会针对这个请求,分别创建一个代表请求的HttpServletRequest对象,一个代表响应的HttpServletResponse对象;

    • 如果要获取我们客户端请求过来的参数:找HttpServletRequest;

    • 如果要给客户端响应一些信息:找HttpServletResponse;

       

  • 简单分类:

    • 负责向浏览器发送数据的方法:

      ServletOutputStream getOutputStream() throws IOException;
      PrintWriter getWriter() throws IOException;
    • 负责向浏览器发送响应头的方法:

      void setCharacterEncoding(String var1);

      void setContentLength(int var1);

      void setContentLengthLong(long var1);

      void setContentType(String var1);
      void setDateHeader(String var1, long var2);

      void addDateHeader(String var1, long var2);

      void setHeader(String var1, String var2);

      void addHeader(String var1, String var2);

      void setIntHeader(String var1, int var2);

      void addIntHeader(String var1, int var2);
    • 响应的状态码:

      int SC_OK = 200;
      int SC_NOT_FOUND = 404;
      int SC_INTERNAL_SERVER_ERROR = 500;
      int SC_BAD_GATEWAY = 502;

 

 

  • 常见应用:

    • 向浏览器输出消息;

    • 下载文件;

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

      2. 下载的文件名是什么;

      3. 设置让浏览器支持下下载我们需要的东西;

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

      5. 创建缓冲区

      6. 获取OutputStream对象;

      7. 将FileOutputStream流写入到buffer缓冲区;

      8. 使用OutputStream将缓冲区中的数据输出到客户端;

       

 

  • 代码案例:

    /**
    * 下载文件
    */
    public class FileServlet extends HttpServlet {

       /**
        * 1. 要获取下载文件的路径;
        * 2. 下载的文件名是什么;
        * 3. 设置让浏览器支持下下载我们需要的东西;
        * 4. 获取下载文件的输入流;
        * 5. 创建缓冲区
        * 6. 获取OutputStream对象;
        * 7. 将FileOutputStream流写入到buffer缓冲区;
        * 8. 使用OutputStream将缓冲区中的数据输出到客户端;
        *
        * @param req
        * @param resp
        * @throws ServletException
        * @throws IOException
        */

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           //1. 要获取下载文件的路径;
           //String realPath = this.getServletContext().getRealPath("/1.png");
           String realPath = "D:\\demo\\1.PNG";
           System.out.println("下载文件的路径;"+realPath);

           //2. 下载的文件名是什么;
           String fileName = realPath.substring(realPath.lastIndexOf("//") + 1);
           //3. 设置让浏览器支持下载我们需要的东西
           //中文文件名需要使用URLEncoder.encode()编码,否则有可能乱码
           resp.setHeader("Content-disposition","attachment;filename="+              URLEncoder.encode(fileName,"UTF-8"));
           //4. 获取下载文件的输入流;
           FileInputStream in = new FileInputStream(realPath);
           //5. 创建缓冲区
           int len=0;
           byte[] buffer = new byte[1024];
           //6. 获取OutputStream对象;
           ServletOutputStream out = resp.getOutputStream();
           //7. 将FileOutputStream流写入到buffer缓冲区;
           //8. 使用OutputStream将缓冲区中的数据输出到客户端;
           while ((len=in.read(buffer))!=-1){
               out.write(buffer,0,len);
          }

           out.close();
           in.close();

      }

       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req, resp);
      }
    }

     

 

 

 

 

 

 

 

 

posted @   gzs1024  阅读(230)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示