Servlet的學習(八)

來源:互聯網
上載者:User

標籤:

  本篇接上一篇《Servlet的學習(七)》,繼續從HttpServletResponse響應對象來介紹其方法和功能。

 

  使用setHeader方法結合HTTP協議的content-disposition回應標頭可以將某些web資源以下載方式回傳給用戶端。但是在下載中文檔案的時候會有一些問題,這問題會怎麼發生呢?

  我們現在來進行從用戶端向伺服器端下載一個圖片檔案,先在MyEclipse的自建立【myservlet】web工程下準備一個圖片檔案,放置在web目錄下的【download】檔案夾中:

  

建立名為ServletResponse的Servlet,代碼如下:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2             throws ServletException, IOException { 3  4         //1,擷取將要下載的檔案路徑和檔案名稱 5         ServletContext context = this.getServletContext(); 6         String filePath = context.getRealPath("/download/銀魂全家福.jpg"); 7         String fileName = filePath.substring(filePath.lastIndexOf("\\")+1); 8          9         //2,使用HTTP協議的Content-Disposition要求標頭告訴用戶端以下載方式接受這個資料(檔案)10         response.setHeader("content-disposition", "attachment;filename="+fileName);11         12         //3,通過流向響應對象寫資料實體,然後由響應對象提交給用戶端    13         FileInputStream fis = null;14         try{15             OutputStream out = response.getOutputStream();16             fis = new FileInputStream(filePath);17             byte[] buff = new byte[1024];18             int len = 0;19             while((len =fis.read(buff))>0) {20                 out.write(buff, 0, len);21             }22         }23         finally {24             if(fis!=null) {25                 fis.close();26             }27         }28     }

而這樣,當在瀏覽器中訪問該Servlet時就會出現下載請求的彈窗:

  

這裡就有一個問題了,下載檔案的名稱不對,如果是英文檔案名稱就不會出現這個問題,而中文檔案名稱就必須通過URL編碼:

將上述代碼中的response.setHeader("content-disposition", "attachment;filename="+fileName);

改為:response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8")); 即可。

  我們重新發布該工程,然後再在瀏覽器中訪問該Servlet,看到這回的下載彈窗:

  

這回就可以下載了,當我們下載後就可以看到確實是伺服器上得資源:

  (真棒!)

所以中文檔案下載方式要先通過URLEncoder進行編碼後再寫入相應對象中。

 

  下面一個案例來講述用HttpServletResponse響應對象來向用戶端輸出隨機圖片(可以用作驗證碼)。

  通常使用BufferedImage類來建立緩衝圖片對象,然後通過該對象建立圖片對象Graphics2D對象,用圖片對象進行文字和邊框的設定等等之後,由ImageIO對象來負責將圖片對象通過IO流傳遞給HttpServletResponse對象。

(未完待續。。。)

 

Servlet的學習(八)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.