HttpServletResponse源码解读、实现文件下载

11 篇文章 0 订阅
5 篇文章 0 订阅

1. HttpServletResponse

  1. 服务器接收到客户端的http请求,针对这个请求,服务端会分别创建一个HttpServletResponse和一个HttpServletRequest对象,

    • 想要获得客户端请求来的参数即找到HttpServletRequest对象
    • 想要获得服务器端响应的数据就得看HttpServletResponse对象
  2. 源码分类

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

      ServletOutputStream getOutputStream() throws IOException;平常流使用这个,
      PrintWriter getWriter() throws IOException;  一般而言写中文流使用这个,如果使用其写平常流,会造成字符串丢失
      
    • 负责向浏览器发送一些响应头的

      //来自于接口ServletResponse
          void setCharacterEncoding(String var1);
      
          void setContentLength(int var1);
      
          void setContentLengthLong(long var1);
      
          void setContentType(String var1);
      //来自于类HttpServletResponse
      	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_MULTIPLE_CHOICES = 300;
     int SC_NOT_FOUND = 404;
     int SC_INTERNAL_SERVER_ERROR = 500;
     int SC_BAD_GATEWAY = 502;
    
  3. 常见应用

    • 向浏览器展示输出信息

    • 下载文件(下载步骤)

      1. 要获取下载文件的路径
      2. 下载文件的文件名
      3. 设置让浏览器能支持我们下载的东西
      4. 获取文件的输入流
      5. 创建缓冲区
      6. 获取OutputStream对象
      7. 将文件FileOutputStream流写入到buffer缓冲区
      8. 将缓冲区OUtputStream中的数据输出到客户端

      以下为实现文件下载的源码

    public class HttpServletResponsedeo extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 要获取下载文件的路径
    //        String realPath = this.getServletContext().getRealPath("/1.png");
            String realPath = "E:\\WorkSpaceIdea\\javaweb-01-servlet\\servlet-demo-02\\src\\main\\resources\\1.png";
            System.out.println("下载的文件路径:"+realPath);
            //E:\WorkSpaceIdea\javaweb-01-servlet\servlet-demo-02\src\main\resources\1.png
        //2. 下载文件的文件名
        String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
        //3. 设置让浏览器能支持我们下载的东西涉及到resp
            resp.setHeader("Content-disposition","attachent;fileName="+fileName);
        //4. 获取文件的输入流
            FileInputStream in = new FileInputStream(realPath);
        //5. 创建缓冲区
            int len = 0;
            byte[] buffer = new byte[1024];
        //6. 获取OutputStream对象
            ServletOutputStream out = resp.getOutputStream();
        //7. 将文件FileOutputStream流写入到buffer缓冲区
            while((len = in.read(buffer)) > 0){
                out.write(buffer,0, len);
                in.close();
                out.close();
    
            }
        //8. 将缓冲区OutputStream中的数据输出到客户端
            //在web.xml文件里配置服务
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值