Bonjour, j'ai un servlet qui est appellé dans une popup et qui est sensé envoyer un fichier au client.
Mon code fonctionne mais pas tout le temps...
par exemple: quand je suis sur le PC du serveur, ca marche tout le temps que ce soit sous IE7 ou firefox mais quand je passe sur un poste client et que j'appelle la servlet, ca marche sous firefox mais pas sous IE, j'obtiens une jolie exception:
Je suis sous tomcat 5.0.28 et java 1.4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error at org.apache.coyote.tomcat5.OutputBuffer.realWriteBytes(OutputBuffer.java:373) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:398) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:262) at org.apache.coyote.tomcat5.OutputBuffer.writeByte(OutputBuffer.java:427) at org.apache.coyote.tomcat5.CoyoteOutputStream.write(CoyoteOutputStream.java:64) at com.baha.server.prt.core.FileDlServlet.doGet(FileDlServlet.java:95) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419) at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534)
Voici le code utilisé pour envoyer le fichier stoqué sur le serveur au client: (sans les try/catch/finally)
Voilà je suis à court d'idées pour expliquer ce phénomène...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 file = request.getParameter("file"); response.setContentType("application/pdf"); response.setHeader("Content-Disposition","attachment;filename=\"facture.pdf\""); out = response.getOutputStream(); pdfFile = new File(file); in = new FileInputStream(pdfFile); int b; while((b=in.read())!=-1){ out.write(b); } out.flush(); out.close(); in.close();
Des idées de votre côté?
merci!
edit:
chose pouvant en éclairer certains (je l'espère)
après une "petite" scéance de débuggage j'ai vu ceci:
mon fichier fait 72ko
J'obtiens mon exception juste quand j'envoie le 32768ème byte (32k quoi)... alors que sous firefox celui-ci est bien reçu et ceci jusqu'au 72000ème byte...
D'où elle sort cette puissance de 2 et quel est le rapport avec mon problème???
Partager