PNG problem

7 отговора 313 прегледа
#1

PNG problem

Napravih servlet koito da vry6ta dinami4en PNG image kato response (v slu4ai ne e prosto edin 4erven kvadrat) Eto i koda:

import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

public class PNG
extends HttpServlet {

public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException,
ServletException {

BufferedImage image = new BufferedImage(
100, 100, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 99, 99);

response.setContentType("image/png");
OutputStream out = response.getOutputStream();
javax.imageio.ImageIO.write(image, "png", out);
out.close();
}
}

Puskam si edin IE otvariam si sevleta i vsi4ko e nared, polu4avam si 4ervenia kvadrat. Pompam refresh i pak vsi4ko e nared.

No sega si pravia edim html file coito da refreshva src-to na image na onmousemove. Eto i koda:

<html>
<head>
<script type="text/javascript">
antic =0
function SendMouseMove()
{
antic++
document.images.vp.src="[линк]"
+"?anti_cache="+antic
}
</script>
<title>
bla
</title>
</ head>

<body bgcolor="#ffffff">

<img name="vp" id="vp" src="[линк]" onmousemove="SendMouseMove()">

</body>
</html>

I kato razmardam cursorora v/u image-a po4vam da molu4avam exceptioni ot servleta. Niakoi da ima idei za6to stava taka:

javax.imageio.IIOException: I/O error writing PNG file!

at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1104)

at javax.imageio.ImageWriter.write(ImageWriter.java:591)

at javax.imageio.ImageIO.write(ImageIO.java:1434)

at javax.imageio.ImageIO.write(ImageIO.java:1508)

at test.PNG.doGet(PNG.java:24)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)

at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)

at java.lang.Thread.run(Thread.java:536)

Caused by: java.net.SocketException: Connection reset by peer: socket write error

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)

at java.net.SocketOutputStream.write(SocketOutputStream.java:136)

at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java:674)

at org.apache.catalina.connector.HttpResponseBase.flushBuffer(HttpResponseBase.java:764)

at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:219)

at org.apache.catalina.connector.ResponseStream.flush(ResponseStream.java:244)

at javax.imageio.stream.FileCacheImageOutputStream.flushBefore(FileCacheImageOutputStream.java:212)

at com.sun.imageio.plugins.png.ChunkStream.finish(PNGImageWriter.java:120)

at com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:368)

at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1071)

... 34 more

Отговор
в отговор на BBS #2

Re: PNG problem

Може би не ползваш PNG файл съвместим с броузъра ти (или развален PNG файл).
Когато сървера се опитва да пише хедъра на файла броузъра ти затваря връзката:

at com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:368)

Мисля че не трябва да викаш out.close()

Отговор
в отговор на antijb #3

Re: PNG problem

Probvah i bez out.close(), pak ne strava.
PNG fail-a evda li e nesyvmestim, za6toto ako prosto izkiam servelt-a si raboti, polu4avam PNG faila i brauzera go pokazva. Problema stava samo kogato podam tvyde mnogo requesti blizki vav vremto (pone taka predpolagam), za6toto ako dvija cursora piksel po piksel v/u image-a sa6to niama problem, no kogato go zazdvija barzo se polu4avat exception-ite.

Отговор
в отговор на BBS #4

Re: PNG problem

Комантара за out.close() не беше свързан с проблема ти.
Нямяше ли същия проблем с JPG файлове?

Отговор
в отговор на antijb #5

Re: PNG problem

Da s JPG-tata beshe sashtata rabota.
A tova s out-a iskash da kajesh, 4e e principno e po-dobre da ne go close-vam li?

Отговор
в отговор на BBS #6

Re: PNG problem

Да, мисля че е по-добре да не го пипаш, сървърът би трябвало сам да си управлява ресурсите.
Не ми е ясно много какво се опитваш да направиш, но мога да направя още няколко предположения.
При много заявки някой от тези имидж файлове може да попада частично в HTTP пакет и това да кара броузера да си мисли че е развален.
Разбери какво точно трябва да се получи на ниско ниво (HTTP) и виж дали точно това се връща от сървъра ти.
Пробвай да flush-ваш стриима след всеки файл.
Пробвай с различен броузсър. Може някой да покаже различна грешка, която да ти помогне да си разбереш проблема.

Отговор
в отговор на antijb #7

Re: PNG problem

Tova koeto se opitvam da napravia e mnogo prosto:
Servlet koito da vrashta PNG image.

Ami imiga e mnogo veroiatno da e razvalen 6tom servleta mi dava exception.

Probvah da flushvam striima - ne pomogna.
Probvah s MOzilla no tam pak ne znam za6to no ne mi raboti javascripta

Отговор
в отговор на BBS #8

Re: PNG problem

abe viz kvo, ti kato razmurdash mishkata nai veroqtno se generirat malko poveche
"mousemove" obekti i browsera suotvetno floodva sus zaqwki Servleta.
i poneze vizdash samo edna stranica, IE-to predcenqva che predishniq stream ne mu trqbwa i go ZATVARQ. i zatva ti vika toq Exception - shtoto nqma stream.

i osthe nesto,
ako otdelqsh poveche vreme da se susredotochish vurhu
problema shte si go opravish sam, raznite forumi gubqt poveche vreme.

Отговор