1. 程式人生 > >系統開發總結第一篇--javaweb匯出csv,並且解決用excel開啟亂碼問題

系統開發總結第一篇--javaweb匯出csv,並且解決用excel開啟亂碼問題

離開得太久了今天小毛驢又要重新迴歸部落格了!前段時間一直在團隊裡打雜,接下來對於系統開發中遇到的些許問題做一些總結。

1、首先javaweb如何從資料庫獲取資料並從客戶端匯出csv檔案

1)在jsp頁面上新增這兩個函式,只要設定個button按鈕然後click事件即可,用其他顏色標註的是需要的程式碼,其他的是專案中一些需要的引數可忽略,思路如下:

  1. download(){ }函式裡data{}可以將前端的引數傳遞到後臺(感興趣的同學可以查一下ajax的用法),這裡因為側重於javaweb的客戶端匯出csv,所以就不進行傳參了,以免使得程式碼複雜。
  2. ajax連結到後臺 
    url: "servlet/DownloadTexData",
  3. 看下DownloadTexData.java裡的程式碼,請理解data.put("context", context);的用法
  4. 如果後臺程式碼執行完畢,接下來執行ajax的success: function (data) {  }
  5. 然後是function file(filename, data) { }函式
  6. 這裡請注意加上 var BOM = "\uFEFF";(之前用excel開啟匯出的csv檔案,發現中文亂碼,在查閱了資料後提示要在檔案頭部加上這段程式碼)
  7. 之前匯出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());

}