AI智能
改变未来

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


1. HttpServletResponse

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

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

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

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

      //来自于接口ServletResponsevoid setCharacterEncoding(String var1);void setContentLength(int var1);void setContentLengthLong(long var1);void setContentType(String var1);//来自于类HttpServletResponsevoid 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. 常见应用

      向浏览器展示输出信息

    • 下载文件(下载步骤)

      要获取下载文件的路径

    • 下载文件的文件名
    • 设置让浏览器能支持我们下载的东西
    • 获取文件的输入流
    • 创建缓冲区
    • 获取OutputStream对象
    • 将文件FileOutputStream流写入到buffer缓冲区
    • 将缓冲区OUtputStream中的数据输出到客户端

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

public class HttpServletResponsedeo extends HttpServlet {@Overrideprotected 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. 设置让浏览器能支持我们下载的东西涉及到respresp.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文件里配置服务}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » HttpServletResponse源码解读、实现文件下载