Response——下载文件、重定向


response下载文件

package com.yl.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

public class FileServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //1.获取下载文件的路径
       String realPath = "C:\\Users\\92397\\Documents\\Study\\Programming\\Study\\Java\\Project\\javaweb\\javaweb_01_servlet\\response\\target\\classes\\1.jpeg";
       System.out.println("获取到的下载文件的路径:"+realPath);
       //2.下载的文件名
       String filename = realPath.substring(realPath.lastIndexOf("\\") + 1);//转义
       //3.设置想办法让浏览器能够支持(Content-Disposition)下载我们需要的东西,处理中文文件名
       resp.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));
       //4.获取下载文件的输入流
       FileInputStream fis = new FileInputStream(realPath);
       //5.创建缓冲区
       int len = 0;
       byte[] buffer = new byte[1024];
       //6.获取OutputStream对象
       ServletOutputStream os = resp.getOutputStream();
       //7.将FileOutputStream流写入到buffer缓冲区
       while((len=fis.read(buffer))!=-1){
           os.write(buffer,0,len);
      }
       fis.close();
       os.close();
       //8.使用OutputStream将缓冲区中的数据输出到客户端
  }

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

 

 

请求转发:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       ServletContext context = this.getServletContext();
       //RequestDispatcher rd = context.getRequestDispatcher("/gp");//转发的请求路径,但页面路径不变,区别于重定向
       //rd.forward(req,resp);//实现请求转发
       context.getRequestDispatcher("/gp").forward(req,resp);

  }

重定向:

resp.sendRedirect(req.getContextPath()+"/gp");//重定向,注意观察路径写法的区别
/*等价于
       resp.setHeader("location",req.getContextPath()+"/gp");
       resp.setStatus(302);
*/

重定向和转发的区别:

相同点:页面都会跳转

不同点:请求转发的时候url不会发生变化,重定向url地址栏会发生变化。请求转发的编码:307,重定向编码:302

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM