Неожиданный символ при загрузке файловой стороны клиента из сервлета - PullRequest
1 голос
/ 23 февраля 2012

Я создаю сервлет для загрузки определенного текста, который клиент публикует с помощью формы раньше (в текстовой области) ... Форма на стороне клиента ничего не указывает:

    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č-`"

Понятия не имею, когда пишу эти символы в мой файл ...

1 Ответ

3 голосов
/ 23 февраля 2012

ObjectOutputStream используется для сериализации «произвольных» объектов Java в двоичный формат данных, который легко прочитать из другой программы Java с помощью ObjectInputStream.Похоже, вместо того, чтобы делать это, вы просто хотите вывести некоторый текст.Самый простой способ сделать это:

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:

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

Обратите внимание, что писатели и потоки автоматически закрываются сетьюконтейнер, так что вам не придется делать это самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...