簡體   English   中英

從servlet下載文件客戶端時出現意外的字符

[英]Unexpected character when downloading file client side from a servlet

我創建了一個Servlet,以下載客戶端之前在表單中(在textarea中)用表單發布的特定文本...客戶端中的表單沒什么特別的:

    form = new FormPanel();
    form.setMethod(FormPanel.METHOD_POST);
    form.setAction(GWT.getModuleBaseURL() + "services/export");
    exportButton = new Button(resource.SUBMENU_Export(), new ClickHandler() {

        public void onClick(ClickEvent event) {
            form.submit();
        }
    });

這是服務器端的代碼(serlvet):

    package com.server.servlet;

    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    import javax.servlet.Servlet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class ExportServlet extends HttpServlet implements Servlet {

        private static final long serialVersionUID = 7526472295622776147L;  

        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
            String expl = req.getParameter("Expl");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=hint.txt;");
            OutputStream stream = response.getOutputStream();
            ObjectOutputStream objectStream = new ObjectOutputStream(stream);
            objectStream.writeObject(expl);
            objectStream.flush();
        }
    }

但是當我打開下載的文件時,文件的開頭只有意外的字符:

"`¬í tč-`"

將這些字符寫入我的文件時我不知道......

ObjectOutputStream用於將“任意”Java對象序列化為二進制數據格式,該格式易於使用ObjectInputStream從另一個Java程序讀取。 聽起來不像那樣你只想輸出一些文字。 最簡單的方法是:

OutputStream stream = response.getOutputStream();
stream.write(expl.getBytes("UTF-8"));

如果您要編寫更多的文本數據,則可以使用Writer:

OutputStream stream = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8");
writer.write(expl);
writer.flush(); // flush text data from writer to stream

輸出流用於發送任意二進制數據,這可能是您想要的也可能不是。 在上面,流保持打開狀態,因此您可以在文本后添加更多數據。 如果您所有的輸出都是文本,則最好將內容類型設置為text/plain並使用response的writer代替:

response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write(expl);

請注意,編寫器和流將被Web容器自動關閉,因此您不必自己進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM