Christopher, You got it right. I was trying to generate the content, write it into server disk and redirect it to the user.
Everyone recomended me to generate it and send it as a response. If that's the only option, I can accept that. If there's a way to refresh the content under tomcat server folder, it would be better. The problem with the recomended option is: It doesn't send the content to be downloaded. The system.out was just a test to see if the file was generated correctly. It seems to be, since it prints tons of unknown chars. ^^ What this code I sent previously tries to do is: 1) Generate the pdf report (working fine) 2) Create a ByteArrayOutputStream with it (working fine) 3) Show it to be downloaded by the user (not working) This code is located on a managed bean. The method is invoked when a h:commandButton is pressed. That's why I return a String. Hope you guys can help me now. Sorry for the english. I finished my course four years ago and haven't practiced since then... Gui Orioli. 2008/4/3, Christopher Schultz <[EMAIL PROTECTED]>: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Guilherme, > > Guilherme Orioli wrote: > | Didn't get it... it just doesn't work... what do I need to use instead > of > | the response.redirect ? > > These good folks are telling you to do something differently than you > are currently doing it. > > Right now you are trying to: > > 1. generate your content > 2. write the content to a file on the disk > 3. redirect the user to the newly-generated file on disk > > Everyone is telling you to: > > 1. generate your content > 2. write the content out to the ServletOutputStream directly > ~ (not to System.out, nor to a FileOutputStream) > > No disk file; no redirect. Each request re-generates the content and > sends it back to the client (browser) as the response to the original > request. > > Let me lay it out for you. You currently have this code: > > | try{ > | ServletOutputStream sos = response.getOutputStream(); > | pdfStream.writeTo(sos); > | System.out.println("pdsStream - "+pdfStream); > | response.sendRedirect("myPDF.pdf"); > | sos.flush(); > | sos.close(); > | pdfStream.close(); > | pdfStream = null; > | }catch(IOException e){ > | e.printStackTrace(); > | } > | return ""; > > You should change it to: > > try{ > ~ ServletOutputStream sos = response.getOutputStream(); > ~ pdfStream.writeTo(sos); > ~ sos.flush(); > ~ sos.close(); > ~ pdfStream.close(); > } catch(IOException e) { > ~ e.printStackTrace(); > > ~ response.sendError(HttpServletResponse.INTERNAL_SERVER_ERROR, > ~ e.getMessage()); > } > return ""; > /// ^^^ What is this? > > I'm not sure why your method returns a String. There's no reason for it > to do so. Is this in a servlet? If it is, then you are going to run in > to trouble with the "request" and "response" objects being members of > the class. Two simultaneous requests will completely break your > application. > > You can simplify the code somewhat, as well as reducing the amount of > memory required to operate by eliminating your use of a > ByteArrayOutputStream. The only downside is that your servlet will not > be returning a Content-Length with the response (which isn't that big of > a deal). > > - -chris > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.8 (MingW32) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iEYEARECAAYFAkf030UACgkQ9CaO5/Lv0PAZUgCdFrgxEz2Ni1O7TTxcEWqvYyXN > TzAAmwRB3Oau5Q4BMOr2/1YpamUXSyz+ > =bmNA > -----END PGP SIGNATURE----- > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >