tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alan Chaney <>
Subject Re: How can I refresh tomcat in the java code?
Date Thu, 03 Apr 2008 13:37:36 GMT

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 <>:
>> 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 <>:
>>>> 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:
>> To unsubscribe, e-mail:
>> For additional commands, e-mail:
> !DSPAM:47f4c55058681264652389!

To start a new topic, e-mail:
To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message