getOutputStream() has already been called for this response
来源:互联网 发布:淘宝网冬天拖鞋 编辑:程序博客网 时间:2024/05/21 20:46
1、在我们应用验证码时,都会用到字节流response.getOutputStream()来将验证码输出,但是jsp页面自己最后会调用字符流JspWriter的out()方法将页面的内容输出。通过查看servlet的API我们可以看到知道,在servlet中不能够同时利用这两个流输出,解决办法将验证码写在servlet中,具体见下面。
2、相信请求转发( request.getRequestDispacher().forward() )和请求跳转( response.sendRedirect() )的区别大家都知道。其中request.getRequestDispacher().forward() 方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程。JSP页面转译为的_servlet会最后调用releasePageContext()方法( All PageContext objects obtained via this method shall be released by invoking releasePageContext().)释放我们页面所有的实体对象,当我们的调用者有页面输出时,就会抛出这个异常。具体原因也没有弄清楚,各位大侠如果谁知道可以告知一下。其实验证码也是同一个原理,如果我们将验证码的代码写在jsp页面中,因为jsp页面会调用JspWriter的out()方法将内容输出,同时我们的图片又调用了response.getOutputStream()方法因此会抛出这个异常;如果我们将验证码写在servlet中,就不会同时使用两种输出也就不会出错。有时即使调用者页面没有输出,也会抛出这个异常,仔细看jsp转译以后的源码发现输出了换行,因此,我们最好把调用者页面的%>和<%之间换行去掉,把%>和<%直接写在一起。
另外,如果我们实在要在jsp中用到response.getOutputStream(),比如验证码、jspSmartUpload,我们需要在最后加入如下代码:
response.reset();
out.clear();
out=pageContext.pushBody();
0 0
- java_lang_IllegalStateException getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response 的解决方法
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response的解决方法
- getOutputStream() has already been called for this response 异常处理
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response 的解决方法
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response的解决方法
- getOutputStream() has already been called for this response 的解决方法
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response错误解决办法!
- getOutputStream() has already been called for this response
- getOutputStream() has already been called for this response(转)
- getOutputStream() has already been called for this response
- Netty学习前的知识储备
- android监听键盘弹出or隐藏方法
- 在.NET中如何使用RabbitMQ.
- Sublime Text3 常用快捷键
- Android Vr初识
- getOutputStream() has already been called for this response
- 应用子表时如何将开窗查询事件做成多选?
- VMware虚拟机桥接方式与真实主机共享上网
- Ajax使用jQuery与后台交互
- Cassandra3.9版本基础入门3-插入和查询
- 查找某个文件的路径
- 启发式算法(Heuristic Algorithm)
- SetFileAttributes和GetFileAttributes
- 在虚拟机下为Fedora扩展分区