.

Hi Guilherme

I can see that English isn't your first language and I have a lot of respect for anyone who is trying to work on technical things in a foreign language - I could never do it!

To help our communication I have tried to explain below what I think it is that you are trying to do. I may have misunderstood what it is that you are doing so I apologize if what I am saying is wrong.

I've joined this thread a bit late, but looking at the previous emails it seems to me that your need is that a user should be able to download a pdf file which has been generated by your server?

This is 'dynamic content'. The server responds to the request for a file by creating an OutputStream of pdf data


Your use case is that the user clicks on a link in a web page and the PDF file appears in their browser?

Here's what I would expect the sequence of events to be:

1. The user clicks on the link in the browser. The link has as its href for example "www.mycompany/xyz.pdf"

2. The browser generates an http GET request with the url www,mycompany/xzy.pdf and sends it out over the net.

3. Your container detects this request, looks up the appropriate servlet
in its web.xml and calls the HttpServlet 'doGet' method.

4. Your servlet responds to this request and generates the pdf in a temporary file.

5. You set any response headers that you need to set.

6. You read the temporary file as a byte InputStream and write this to the servlet OutputStream.

7. The container takes the data from the output stream and transmits across the wire back to the browser. It inserts any headers you have specified (and a few others) at the beginning.


8. You return from the doGet.


That's it. Done!



So the stream of data which is returned as the response to .../xyz.pdf IS the data you want displayed. You don't need to send a redirect to xyz.pdf because you have already responded to the request.

The exact point at which the container (Tomcat) starts to transmit data is up to the container. You can force it to send data by issuing a 'flush'. However, once it has started to respond to the specific request you cannot issue things like a redirect. I'm simplifying a bit here.

Looking at your code there doesn't appear to be the doGet method - I assumed initially that you were calling your class from within the doGet
of a servlet. Is this the case?

Have you checked the tomcat logs? I would have expected the server to have thrown an exception when you attempted to send a redirect after you have already written data.






Guilherme Orioli wrote:
Didn't get it... it just doesn't work... what do I need to use instead of
the response.redirect ?

2008/4/2, Alan Chaney <[EMAIL PROTECTED]>:
You don't need the redirect. The response to the request IS the pdf file.

HTH


Guilherme Orioli wrote:

It just doesn't show the Download dialog on the screen when i click the
button...

2008/4/2, Guilherme Orioli <[EMAIL PROTECTED]>:

ok... here's what i'm doing... in system out, something like a pdf
file is
printed... itÅ› probably there... just don't know how to show it from
the
button i'm clicking on:

public String geraReportBois(){
try{

//Generating the report
String caminho_arquivo = new File("").getAbsolutePath() +
"/workspace/safeTrace/WebContent/reports/cliente/frigorifico/";
String nome_arquivo = "reportBois.jasper";
JasperReport jasperReport =
(JasperReport)JRLoader.loadObject(caminho_arquivo + nome_arquivo);
Map parameters = new HashMap();
parameters.put("Caminho", caminho_arquivo);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, this.getRelatorioBois());


//----------------------------------------------------------------------------------

//Exporting to File (outputStream)
ByteArrayOutputStream pdfStream = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, pdfStream);

HttpServletResponse response = (HttpServletResponse)
FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline;
filename=myPDF.pdf");
response.setContentLength(pdfStream.size());
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 "";

}catch(JRException e){
System.out.println("entrou no catch geraReportBois");

e.printStackTrace();
}
return null;
}







---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



!DSPAM:47f4c55058681264652389!


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to