response.getOutputStream() 电脑开机没反应应

response细节--重定向的用处和getWrite/getOutputStream的用法冲突问题
response细节--重定向的用处和getWrite/getOutputStream的用法冲突问题
[摘要:IT顺序员开辟必备-各种资本下载浑单 ,史上最齐IT资本,小我保藏总结! 1.重定背的完成: //战下句代码可交换地位,此两止相称于response.sendRedirect(); response.setStatus(302); //或location.j]
IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!
1.重定向的实现:
//和下句代码可互换位置,此两行相当于response.sendRedirect(&&);
response.setStatus(302);
//或者&location.jsp&
response.setHeader(&location&,&/HTTPHeader/location.jsp&);2.重定向的用处:
&& 一般情况下尽量不要用重定向,因为其会向服务器发送两次请求,增加服务器的负荷,并且会产生两个request和response对,除了特殊的场合:如:
&&& (1)用户登录成功后跳转至首页,如果用转发的话,那么用户无法从地址栏上看到首页地址
&&& (2)购物时,点击&加入购物车&按钮,然后就转向“显示购物车商品的页面showCar.jsp”,如果使用转发技术的,那么在“showCar.jsp”页面上如果刷新页面的话,则就会将“加入购物车的事件在作一次”。
&&& (3)在表单提交后(get和post方式都是一样),如果想跳转至某页面,如果用转发的话,则转至页面后,如果刷新页面,则会造成表单重复提交:
如:当提交以post方式的表单后,如果刷新页面:
当点击重试后:
提交表单后,如果改为重定向到该页面,则刷新页面也只是刷新该页面,而不会造成表单重复提交
3. getOutputStream和getWriter互斥问题:
&&&& 这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
&&& 如:ExpiresServlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置缓存时间为1小时:时间单位为毫秒
response.setDateHeader(&Expires&, System.currentTimeMillis()+);
String data = &abcdefghigk&;
//response.getWriter().print(data);
response.getOutputStream().write(data.getBytes());
//jsp中是也PrintWriter对象输出内容的
request.getRequestDispatcher(&index.jsp&).forward(request, response);//改为response.sendRedirect(&index.jsp&);则不会抛该异常
}如果访问该Servlet,则会抛出:java.lang.IllegalStateException: getOutputStream() has already been called for this response 异常
这说明同一个response对象的这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
解决办法:将request.getRequestDispatcher(&index.jsp&).forward(request, response);//改为response.sendRedirect(&index.jsp&);则不会抛该异常
原因分析:改为重定向后,则 是两个response对象
4.其他问题:
&& (1)getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
&& (2)getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 &
&& (3)Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
&& (4)Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象
感谢关注 Ithao123JS频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊response getoutputstream什么意思
response getoutputstream什么意思
09-07-21 &匿名提问Java:如何使用response.getOutputStream()为Ajax返回结果呢?_百度知道
Java:如何使用response.getOutputStream()为Ajax返回结果呢?
,直接out,此时就不能再使用response.write(&quot,想请教用response.getOutputStream()平时返回数据都用的).getWriter();就行了.getOutputStream()这个流该如何为Ajax返回结果呢,但是现在项目代码中已经用到了response.getWriter();;finish&quot
我有更好的答案
int),intresponse.getOutputStream().write(byte[]。用流读取内容呢吧
其他类似问题
为您推荐:
ajax的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁getOutputStream() has already bean called for this response - 今天最成功 - ITeye技术网站
博客分类:
@version 1.0
@see 有很多同事一直都问我Servelt OutputStream 流的问题,在这里给大家一个解释为什么会这样呢
23:13:46 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [jsp] in context with path [/reportsystem] threw exception [java.lang.IllegalStateException: getOutputStream() has already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response
1) Jsp 和Servlet 原理介绍
Jsp 在解释成Servlet 时
response.setContentType("image/ charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageC
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
//注意思这时的out 上JspWriter
//是通过response 获得的
_jspx_out =
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
//这是我们加的代码
OutputStream output = response.getOutputStream();
RandomImage randomImage = new RandomImage();
randomImage.getImage(output);
这样一调用自然就会有getOutputStream() has already been called for this response 导常
这是为什么呢
简单的理解就是:前面张三吃的一碗面条是牛肉面。碗没有洗,又用这碗给你装了一碗排骨面,你说你会不会
告诉老板,老板你这碗没洗,但是面还是可以吃对吧。。
所以要解决这个问题,,我们洗碗就可以了对吧
&%@page import="org.zk.liuqing.image.RandomImage"%&
&%@page import="java.io.OutputStream"%&
&%@ page language="java" contentType="image/ charset=UTF-8"
pageEncoding="UTF-8"%&
* @author 刘庆
* @see 洗一下碗,清空一下前面的缓存不就OK了。希望对大家有所帮助
out.clearBuffer();
OutputStream output = response.getOutputStream();
RandomImage randomImage = new RandomImage();
randomImage.getImage(output);
mianhuaman
浏览: 321313 次
来自: 重庆
学习了,很好~~
如果 ajax(jquery)更新了 iframe 的 src ...
感谢楼主,除了一维条码,有没有相关二维码的资源呢?______ ...
.....如果路径是中文肿么解决啊?
编码类型怎么设置1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
  在tomcat6.0下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有妥善处理好的原因。
  具体的原因就是:  在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后有一段这样的代码
1 finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
  这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和response.getOutputStream()相冲突的!所以会出现以上这个异常。
  然后当然是要提出解决的办法,其实挺简单的(并不是和某些朋友说的那样--将jsp内的所有空格和回车符号所有都删除掉),在使用完输出流以后调用以下两行代码即可:
1 out.clear();
2 out = pageContext.pushBody();
&  最后这里是一个输出彩色验证码例子(这样的例子几乎随处可见)
imag.jsp 1
&%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %&
&%@ page import="java.io.OutputStream" %&
  Color getRandColor(int fc,int bc){
    Random random = new Random();
    if(fc&255) fc=255;
    if(bc&255) bc=255;
    int r=fc+random.nextInt(bc-fc);
    int g=fc+random.nextInt(bc-fc);
    int b=fc+random.nextInt(bc-fc);
    return new Color(r,g,b);
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);
    int width=60, height=20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    OutputStream os=response.getOutputStream();
    Graphics g = image.getGraphics();
    Random random = new Random();
    g.setColor(getRandColor(200,250));
    g.fillRect(0, 0, width, height);
    g.setFont(new Font("Times New Roman",Font.PLAIN,18));
    g.setColor(getRandColor(160,200));
    for (int i=0;i&155;i++){
      int x = random.nextInt(width);
      int y = random.nextInt(height);
      int xl = random.nextInt(12);
      int yl = random.nextInt(12);
      g.drawLine(x,y,x+xl,y+yl);
35      }
    String sRand="";
    for (int j=0;j&4;j++){
      String rand=String.valueOf(random.nextInt(10));
      sRand+=
      g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
      g.drawString(rand,13*j+6,16);
    session.setAttribute("rand",sRand);
    g.dispose();
    ImageIO.write(image, "JPEG",os);
    os.flush();
    os.close();
    os=null;
    response.flushBuffer();
    out.clear();
    out = pageContext.pushBody();
  }catch(IllegalStateException e){
54       System.out.println(e.getMessage());
    e.printStackTrace();
  如有不足之处,欢迎斧正!
2.getOutputStream() has already been called for this response问题的解决  在jsp向页面输出图片的时候,使用response.getOutputStream()会有这样的提示:java.lang.IllegalStateException:getOutputStream() has already been called for this response,会抛出Exception
  原因一:  JSP默认的输出流为PrintWriter ,即&% %&以外的东西所默认的输出方式,如果你尝试在JSP中使用ServletOutputStream就会引起错误.要嘛直接改用Servlet输出(复写service方法),要嘛删除除%&&%中的任何东西(包括HTML标签,空格,回车等东西)应该就可以。对于这样的情况应该这样来解决,删除%&&%之间的所有内容包括空格和换行符,最后也要消除空格和换行符,最好再加上一句response.reset()。  原因二:&&&&   在J2EE的API参考里有这么个:
  ServletResponse的getWriter()方法里会抛出这个异常:
    IllegalStateException - if the getOutputStream method has already been called for this response object
  而它的getOutputStream()方法里会抛出这个异常:
    IllegalStateException - if the getOutputStream method has already been called for this response object
  并且两者的函数申明里都有这么样的一句    Either this method or getOutputStream() may be called to write the body, not both.    Either this method or getWriter() may be called to write the body, not both.
  以上说明也解释了为什么在往页面中写入图片的时候要使用如下循环格式  OutputStream output=response.getOutputStream();  while((len=in.read(b)) &0) {    output.write(b,0,len);   }output.flush();而不是把response.getOutputStream().write()放到循环体内在页面中直接写:&body bgcolor="#ffffff"&&h1&&%response.getOutputStream();%&&/h1&&/body&将会出现错误消息如下:java.lang.IllegalStateException: getOutputStream() has already been called for this responseorg.apache.catalina.connector.Response.getWriter(Response.java:604)org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
阅读(...) 评论()

我要回帖

更多关于 电脑开机没反应 的文章

 

随机推荐