程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> [Jsp]把Java寫到Respond輸出流裡面供用戶下載

[Jsp]把Java寫到Respond輸出流裡面供用戶下載

編輯:關於JSP

[Jsp]把Java寫到Respond輸出流裡面供用戶下載


把Java中的內容輸出到文件大家都會了,輸入輸出流是每一個Java程序猿的必須課。在《【Java】打印流與緩沖區讀者完成輸入與輸出到文件操作》(點擊打開鏈接)與《【Java】輸入與輸出與JDK1.5之後的新型字符串StringBuilder》(點擊打開鏈接)之中,我都說過這個問題。但是在Jsp上,怎麼把Java內容直接把文件寫到網頁上給用戶下載呢?一般一些導出功能實現,就需要這樣弄。

具體如下圖:

\

用戶訪問download這個Servlet,就直接提供一個“中文是沒有問題.txt”的文件給用戶下載。裡面的內容是在Java中直接寫到Respond輸出流的,在服務器上根本沒有這個文件。中文是沒有問題.txt中的“呵呵”是在用戶訪問download這個Servlet才構造出來的。

你可以寫如下的Servlet,無須任何插件,構造一個Respond輸出流給打印流PrintWriter打印內容就行了。

其余什麼插件輸出到文件同理,你可以改一改它的write方法就OK了。

以下的Servlet采用了Servlet3.0寫法,指明此Servlet的訪問地址是/download,測試是不要寫成localhost:8080/工程名/download/,這樣是不行的,後面沒有斜槓,service方法是原來doPost與doGet方法的集合,一般不這樣寫:

 

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@SuppressWarnings("serial")
@WebServlet(name = "download", urlPatterns = { "/download" })
public class download extends HttpServlet {
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//在SSH框架中,可以通過HttpServletResponse response=ServletActionContext.getResponse();取出Respond對象
		//清空一下response對象,否則出現緩存什麼的
		response.reset();
		//指明這是一個下載的respond
		response.setContentType("application/x-download");
		//這裡是提供給用戶默認的文件名
		String filename = "中文是沒有問題的.txt";
		//雙重解碼、防止亂碼
		filename = URLEncoder.encode(filename,"UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.addHeader("Content-Disposition","attachment;filename=" + filename);
		/*
		 * 這裡是最關鍵的一步。
		 * 直接把這個東西寫到response輸出流裡面,給用戶下載。
		 * 如果輸出到c:\b.txt就是:
		 * PrintWriter printwriter = new PrintWriter(new FileWriter("c:\\b.txt",true));
		 * 現在寫好respond頭,就寫成:
		 * PrintWriter printwriter = new PrintWriter(response.getOutputStream());
		 * 把PrintWriter的輸出點改一下
		 */
		PrintWriter printwriter = new PrintWriter(response.getOutputStream());
		printwriter.println("呵呵!");
		//打印流的所有輸出內容,必須關閉這個打印流才有效
		printwriter.close();
	}
}

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved