系統開發總結第一篇--javaweb匯出csv,並且解決用excel開啟亂碼問題
離開得太久了今天小毛驢又要重新迴歸部落格了!前段時間一直在團隊裡打雜,接下來對於系統開發中遇到的些許問題做一些總結。
1、首先javaweb如何從資料庫獲取資料並從客戶端匯出csv檔案
1)在jsp頁面上新增這兩個函式,只要設定個button按鈕然後click事件即可,用其他顏色標註的是需要的程式碼,其他的是專案中一些需要的引數可忽略,思路如下:
- download(){ }函式裡data{}可以將前端的引數傳遞到後臺(感興趣的同學可以查一下ajax的用法),這裡因為側重於javaweb的客戶端匯出csv,所以就不進行傳參了,以免使得程式碼複雜。
- ajax連結到後臺
- 看下DownloadTexData.java裡的程式碼,請理解data.put("context", context);的用法
- 如果後臺程式碼執行完畢,接下來執行ajax的success: function (data) { }
- 然後是function file(filename, data) { }函式
- 這裡請注意加上 var BOM = "\uFEFF";(之前用excel開啟匯出的csv檔案,發現中文亂碼,在查閱了資料後提示要在檔案頭部加上這段程式碼)
- 之前匯出csv檔案,會發現當字串過大的時候,會導致下載失敗,這個情況在function file(filename, data) { }裡已經解決了(但我已經忘記了具體改動了什麼了)
好了,今天已經做了一個小總結了,該去做其他事了,接下來希望可以定時更新部落格,本毛驢太懶了。。。
jsp的程式碼
<
function file(filename, data) {
if(window.Blob && window.URL && window.URL.createObjectURL){
var BOM = "\uFEFF";
var csvData = new Blob([BOM+data], { type: 'text/csv;charset=utf-8,\ufeff'}); //new way
var csvUrl = URL.createObjectURL(csvData);
var a = document.createElement('a');
a.href = csvUrl;
a.target = '_blank';
a.download = filename;
document.body.appendChild(a);
a.click();
}else {
return 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(data);
}
}
function download(){
var filename='詞頻分析-'+ID+'.csv';
$.ajax({
url: "servlet/DownloadTexData",
type: "POST",
data: {
},
dataType : 'json',
success: function (data) {
file(filename,data.context);
return false;
},
error: function (err) {
alert("詞頻分析檔案下載失敗");
}
});
}
</script>
DownloadTexData.java的程式碼
1、利用前端傳來的ID名稱從資料庫讀取資料(這裡程式碼省略,主要側重於如何從客戶端匯出csv檔案)
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String context="";
context="文字描述"+","+"詞頻1"+","+"詞頻2"+","+"詞頻3"+","+"詞頻4"+","+"詞頻5"+","+"詞頻6"
+","+"詞頻7"+","+"詞頻8"+","+"詞頻9"+","+"詞頻10"+","+"詞頻11"+","+"詞頻12"+","+"詞頻13"+","+"詞頻14"+","+"詞頻 15"+"\r\n";
Gson gson=new Gson();
JSONObject data=new JSONObject();
data.put("context", context);
//System.out.println("context"+context);
String info=gson.toJson(data);
//System.out.println(data);
out.write(data.toString());
}