2013-10-13 50 views
1

首先,請原諒我,如果我的英語不好。我在使用ajax將數據發送到我的ExportServlet時遇到了一些問題。用ajax發佈數據到java servlet

ExportServlet.java

public class ExportServlet extends HttpServlet { 
private static final long serialVersionUID = 6715605810229670146L; 

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    String fileName = req.getParameter("filename"); 

    //Create ZIP file 
    try { 
     res.setContentType("applicatin/zip"); 
     res.setStatus(HttpServletResponse.SC_OK); 

     ZipOutputStream zos = new ZipOutputStream(res.getOutputStream()); 

     //Create TXT file 
     zos.putNextEntry(new ZipEntry(fileName + ".txt")); 
     zos.write(getOutputData()); 
     zos.closeEntry(); 

     zos.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

private byte[] getOutputData() { 
    byte[] result = null; 
    String tmp = "Text file content"; 
    result = tmp.getBytes(); 
    return result; 
} 
} 

Java代碼上述工程絕對完美。

然後我將數據發送到我的ExportServlet我的Ajax代碼(我用文件名爲例):

//Post data to ExportServlet 
     $.ajax({ 
      type: 'post', 
      url: '/export.zip', 
      data: "filename = myFile", 
      success:function(data){alert(data);}, 
      error:function(){alert('error');} 
     }); 

的問題是,當AJAX功能被觸發我得到一個錯誤回調。我也有一個鏈接,下載由ExportServlet生成的ZIP文件:

<a href="/export.zip">Download file</a> 

事實上,當我點擊我得到的ZIP文件與它「null.txt」的鏈接。我怎樣才能解決這個問題?

非常感謝!

+2

你只已經實現了'doGet'爲你的servlet,而不是'doPost'。 –

+0

還有一件事:你不能用ajax觸發文件下載。想象一下,未經您許可,惡意服務器開始將文件和應用程序下載到您的計算機中。 –

+0

是的,我知道,問題是,當我改變doGet做doPost我不能下載文件了(ahref不會工作)。 我不想觸發文件下載,我只是想觸發ExportServlet創建一個帶有Ajax的文件。然後當你點擊下載文件鏈接時,它會下載創建的文件。 – JasonK

回答

0

當你點擊鏈接時,ajax代碼將不會被調用,所以文件名參數將不會包含在對servlet的請求中。該servlet將以filename = null執行。這是你得到的實際結果。

爲了解決這個問題,我認爲你必須在第一次加載頁面時調用ajax代碼,這樣你的servlet就可以創建一個文件並將它放在服務器上。然後,你必須在你的鏈接通過文件名參數,例如:

<a href="http://yourdomain.com/downloadFile?filename=myFile">Download file</a> 

的downloadFile servlet將查找名爲myfile.txt的文件,該文件在裝有AJAX叫你的網頁在第一時間創建的,並給你的文件作爲迴應。

+0

*我不確定你的servlet做什麼*它觸發一個文件下載(再次閱讀問題和評論)。還有一次:你**不能**使用ajax觸發文件下載。 –

+0

我改變了我的回覆。謝謝 –

1

試試這個:

<a href="javascript:;" onclick="downloadFile();">Download file</a> 
<div style="display: none;"> 
    <iframe id="downloadFileFrame"></iframe> 
</div> 


function downloadFile() { 
    $('#downloadFileFrame').attr('src','/export.zip?filename=myFile'); 
    return false; 
}