response.getOutputStream();是否在servlet里面就不可以请求转发或者重定向,有啥解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了response.getOutputStream();是否在servlet里面就不可以请求转发或者重定向,有啥解决方法相关的知识,希望对你有一定的参考价值。

response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename="
+ Chinesization.toUtf8String(gaugeOutfit) + ".xls");

OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);

br.close();
out.flush();
out.close();

request.getRequestDispatcher("/Retirement/OneTypeMessage.jsp").forward(request, response);

出错的代码,.getOutputStream()之后请求转发就会抛这个异常java.lang.IllegalStateException:

servlet 两种跳转方式:重定向、请求转发
看你的代码像是想给前台页面写入数据, 就是类似ajax
你这out引用我不知道有什么用,写入完了之后也没有放到作用域 ,请求转发到前台没什么用吧。

你这OutputStream out 我想的话 你想的写的是 PrintWriter out = response.getWriter();
你的out是对流操作的,(比如说文件流什么的, 你这对象叫什么输出流),
我的out是对一个输出对象,可以像前台jsp页面直接写html代码。 当然也可以封装成json格式,到前台进行解析。

我猜想你的这个方法是想在servlet中写jsp页面中的html代码。

我其实也就一半调子,个人见解,望采纳追问

这是一个无组件的下载功能,还有代码是poi生成的execl我没粘上来,out是用来把execl写出到自己所保存的目录,不是往前台写出数据的

追答

如果是文件流操作的话,一般情况都会有异常处理,
像你这功能报异常的话,一般就是读写文件流的时候有问题。
我就一半调子,看这代码也看不出什么端详来。具体的还是得你自己琢磨,这不有外网嘛。

参考技术A 你说的不太清楚。
response本身就是对请求的响应,响应时返回流。
猜你想在另一请求中用上次请求中得到的结果流;可以在第一次请求时用session记下,在另一请求中获取到!追问

代码我补充上了,有时间的话帮我看看

Java:如何使用response.getOutputStream()为Ajax返回结果呢?

平时返回数据都用的response.getWriter();,直接out.write("finish");就行了,但是现在项目代码中已经用到了response.getOutputStream(),此时就不能再使用response.getWriter();,想请教用response.getOutputStream()这个流该如何为Ajax返回结果呢?

参考技术A response.getOutputStream().write(byte[],int,int)。用流读取内容呢吧?

以上是关于response.getOutputStream();是否在servlet里面就不可以请求转发或者重定向,有啥解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Java Web报错:getOutputStream() has already been called for this response解决方案

response.getOutputStream();是否在servlet里面就不可以请求转发或者重定向,有啥解决方法

是否应该在 HttpServletResponse.getOutputStream()/.getWriter() 上调用 .close()?

java -- getOutputStream() has already been called for

[Java][Web]Response学习

20160314 Request 和Response