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