java - How to pass the generated Buffered image from Servlet to the response? -


in servlet generate bufferedimage:

bufferedimage bgimage = createimage(); 

and save it:

saveimage(bgimg, getimagesavedir() + image_name); 

after want return response show in browser.

i tried send image response:

file imagefile = new file(getimagesavedir() + image_name); response.setcontenttype("image/png"); bufferedimage bufferedimg = imageio.read(imagefile); servletoutputstream out = response.getoutputstream(); imageio.write(bufferedimg, "png", out); out.close(); } catch (exception ex) {   ex.printstacktrace(); } 

but receive exception:

clientabortexception:  java.net.socketexception: broken pipe     @ org.apache.catalina.connector.outputbuffer.realwritebytes(outputbuffer.java:369)     @ org.apache.tomcat.util.buf.bytechunk.flushbuffer(bytechunk.java:448)     @ org.apache.catalina.connector.outputbuffer.doflush(outputbuffer.java:318)     @ org.apache.catalina.connector.outputbuffer.flush(outputbuffer.java:296)     @ org.apache.catalina.connector.coyoteoutputstream.flush(coyoteoutputstream.java:98)     @ javax.imageio.stream.filecacheimageoutputstream.close(filecacheimageoutputstream.java:238)     @ javax.imageio.imageio.write(imageio.java:1580)     @ tv.clever.xml.teamimageprocessor.process(teamimageprocessor.java:157)     @ tv.clever.api.apiservlet.doprocessing(apiservlet.java:458)     @ tv.clever.api.apiservlet.process(apiservlet.java:219)     @ tv.clever.api.apiservlet.dopost(apiservlet.java:98)     @ tv.clever.api.apiservlet.doget(apiservlet.java:86)     @ javax.servlet.http.httpservlet.service(httpservlet.java:617)     @ javax.servlet.http.httpservlet.service(httpservlet.java:723)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:290)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ org.springframework.orm.hibernate3.support.opensessioninviewfilter.dofilterinternal(opensessioninviewfilter.java:198)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:76)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ tv.clever.utils.messageresource.utf8encodingfilter.dofilter(utf8encodingfilter.java:52)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ tv.clever.utils.security.urlfilter.dofilter(urlfilter.java:50)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ tv.clever.utils.security.crossscriptingfilter.dofilter(crossscriptingfilter.java:38)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:233)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:191)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:470)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:127)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:103)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:109)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:293)     @ org.apache.coyote.http11.http11processor.process(http11processor.java:861)     @ org.apache.coyote.http11.http11protocol$http11connectionhandler.process(http11protocol.java:620)     @ org.apache.tomcat.util.net.jioendpoint$worker.run(jioendpoint.java:489)     @ java.lang.thread.run(thread.java:745) caused by: java.net.socketexception: broken pipe     @ java.net.socketoutputstream.socketwrite0(native method)     @ java.net.socketoutputstream.socketwrite(socketoutputstream.java:113)     @ java.net.socketoutputstream.write(socketoutputstream.java:159)     @ org.apache.coyote.http11.internaloutputbuffer.realwritebytes(internaloutputbuffer.java:761)     @ org.apache.tomcat.util.buf.bytechunk.flushbuffer(bytechunk.java:448)     @ org.apache.tomcat.util.buf.bytechunk.append(bytechunk.java:363)     @ org.apache.coyote.http11.internaloutputbuffer$outputstreamoutputbuffer.dowrite(internaloutputbuffer.java:785)     @ org.apache.coyote.http11.filters.chunkedoutputfilter.dowrite(chunkedoutputfilter.java:124)     @ org.apache.coyote.http11.internaloutputbuffer.dowrite(internaloutputbuffer.java:598)     @ org.apache.coyote.response.dowrite(response.java:533)     @ org.apache.catalina.connector.outputbuffer.realwritebytes(outputbuffer.java:364)     ... 39 more 

what best way pass generated buffered image servlet response , display in browser?

i've tried this:

bufferedimage originalimage = imageio.read(new file(getimagesavedir() + image_name)); bytearrayoutputstream baos = new bytearrayoutputstream(); imageio.write(originalimage, "png", baos); baos.flush(); byte[] imageinbyte = baos.tobytearray(); baos.close(); response.setcontenttype("image/png"); response.setcontentlength(imageinbyte.length); servletoutputstream servletoutputstream = response.getoutputstream(); servletoutputstream.write(imageinbyte); servletoutputstream.flush(); 

now exception not appear, code still doesn't work:(

see below code of org.apache.catalina.connector.outputbuffer.realwritebytes exception coming.

    // if have write     if (cnt > 0) {         // real write adapter         outputchunk.setbytes(buf, off, cnt);         try {             coyoteresponse.dowrite(outputchunk);         } catch (ioexception e) {             // ioexception on write due             // remote client aborting request. wrap             // can handled better error dispatcher.             throw new clientabortexception(e);         }     } 

now notice comment in exception says

an ioexception on write due remote client aborting request.

to me, looks connection problem between browser , server. connection broken.

now there multiple reasons http connection getting disconnected, like:

  • request taking long respond, web server timed out request, per http timeout.
  • request terminated client.
  • you sent not understood client or non-acceptable mime type, while web server trying commit response, there error.

in case of weblogic, if initiate server transaction browser, , close browser before server respond, while commiting response, wl throw below exception.
in case root exception ioexception wrapped clientabortexception meaningful on log console.

java.io.ioexception: established connection aborted software in host machine         @ sun.nio.ch.socketdispatcher.write0(native method)         @ sun.nio.ch.socketdispatcher.write(socketdispatcher.java:51)         @ sun.nio.ch.ioutil.writefromnativebuffer(ioutil.java:93)         @ sun.nio.ch.ioutil.write(ioutil.java:65)         @ sun.nio.ch.socketchannelimpl.write(socketchannelimpl.java:487) 

so, may want to:


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -