Как использовать getOutputStream () и getWriter () в одном запросе сервлета? - PullRequest
2 голосов
/ 01 декабря 2010

Как использовать getOutputStream () и getWriter () в одном запросе сервлета?

Ответы [ 2 ]

11 голосов
/ 01 декабря 2010

Вы не можете использовать их обоих одновременно.Если вы сначала сделали getOutputStream(), вы не можете, следовательно, в том же запросе выполнить getWriter() и наоборот.Тем не менее, вы можете обернуть ServletOuptputStream в PrintWriter, чтобы получить тот же тип писателя, что и у getWriter().

ServletOutputStream out = response.getOutputStream();
// Notice encoding here, very important that it matches that of
// response.setCharacterEncoding();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "utf-8"));

Еще одно решение не использовать getWriter() - это использовать PrintStream, что несколько похоже, но тогда у вас нет совместимости типов с Writer или PrintWriter.

// Encoding again very important to match that of your output.
PrintStream print = new PrintStream(os, true, "utf-8");
2 голосов
/ 01 декабря 2010

Вы можете использовать их обоих, но не в одно и то же время или, скорее, не для одного и того же ответа. Если вам нужно использовать Writer после того, как вы уже начали использовать OutputStream, просто оберните OutputStreamWriter вокруг выходного потока. Однако, если вам нужно использовать выходной поток после того, как вы уже использовали писатель, вы не сможете. Вы всегда можете сначала получить выходной поток, обернуть писатель вокруг него, как описано выше, выполнить запись, очистить, а затем выполнить потоковую передачу.

...