tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: Byte Serving and PDFs with the DefaultServlet
Date Thu, 09 Oct 2008 15:39:33 GMT
On 09/10/2008, Mark Thomas <markt@apache.org> wrote:
> vitor.swaid@embraer.com.br wrote:
>  > Hello, I'm new to the list. Hello to every one. Sorry if I'm posting this
>  > message in the wrong place. If so please advise me to fix it.
>
>
> From a quick scan of your e-mail it looks like you have a valid bug
>  here. To make sure this doesn't get lost, please add it to the Tomcat
>  issue tracker at http://issues.apache.org/bugzilla
>

Just wondering if it is to do with the case of the filetype?

The files are .PDF files rather than .pdf files - could that be the
cause of the missing content-type?

>  Cheers,
>
>  Mark
>
>
>  >
>  > I was asked to make a PDF functionality called Fast Web View work in a
>  > Tomcat application. In my initial tests, as I will describe, it did not
>  > worked.
>  >
>  > I started downloading the version 6.0.18 and after that I downloaded the
>  > trunk SVN branch and compiled every thing (comment: a hard job at the
>  > first time, ah? sorry, I had many web proxy issues),
>  >
>  > I wrote a small HTML just for testing purpose. The "index.html" file is
>  > something like:
>  >
>  > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "
>  > http://www.w3.org/TR/html4/strict.dtd">
>  > <html>
>  >   <head>
>  >     <meta http-equiv="Accept-Ranges" content="bytes">
>  >   </head>
>  >   <body>
>  >     <table border="1" align="center">
>  >       <tr>   <td align='center' valign='middle'>
>  >           <a href='FIRST_FAST_WEB_VIEW_READY.PDF'
>  > type='application/pdf'>FIRST_FAST_WEB_VIEW_READY.PDF</a>
>  >         </td>
>  >         <td align='center' valign='middle'>32.09 MB   </td>
>  >       </tr>
>  >       <tr>  <td align='center' valign='middle'>
>  >         <a href='SECOND_FAST_WEB_VIEW_READY.PDF'
>  > type='application/pdf'>SECOND_FAST_WEB_VIEW_READY.PDF</a>
>  >         </td>
>  >         <td align='center' valign='middle'>41.72 MB  </td>
>  >       </tr>
>  >       <tr> <td align='center' valign='middle'>
>  >           <a href='NTH_FAST_WEB_VIEW_READY.PDF'
>  > type='application/pdf'>NTH_FAST_WEB_VIEW_READY.PDF</a>
>  >         </td>
>  >         <td align='center' valign='middle'>25.83 MB   </td>
>  >       </tr>
>  >     </table>
>  >   </body>
>  > </html>
>  >
>  > I just created a folder in the webapps folder named PDFs and placed
>  > everything there.
>  >
>  > When I started Tomcat, opened the page and click on the first PDF link (on
>  > other link the result was the same) with the address
>  > http://localhost:8080/PDFs/, I got the following result:
>  > - The file was found by Tomcat
>  > - Adobe Reader works properlly requesting a "byte served" content (I also
>  > configured the property useAcceptRanges on the web.xml file)
>  > - Tomcat returned a header response 200 OK and some data
>  > - Adobe requests a partial content with a few range descriptors like:
>  > 500-999, 7000-7999 (I rounded the sample here)
>  > - Tomcat send a response (http 206)  multipart/byterange for the above
>  > ranges
>  > - Adobe Reader locks and don't ask any more ranges
>  > - The browser also locks and after a long wait time it returns a error
>  > message of problems on file.
>  >
>  > I started them analysing the response stream with an http protocol
>  > analyser plug-in for the browser.
>  >
>  > In the RFC2616 I noted that the response should be as the below sample
>  > cutted from the RFC2616:
>  >
>  >   HTTP/1.1 206 Partial Content
>  >    Date: Wed, 15 Nov 1995 06:25:24 GMT
>  >    Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
>  >    Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
>  >
>  >    --THIS_STRING_SEPARATES
>  >    Content-type: application/pdf
>  >    Content-range: bytes 500-999/8000
>  >
>  >    ...the first range...
>  >    --THIS_STRING_SEPARATES
>  >    Content-type: application/pdf
>  >    Content-range: bytes 7000-7999/8000
>  >
>  >    ...the second range
>  >    --THIS_STRING_SEPARATES--
>  >
>  > But I noted that Tomcat was returning the following stream:
>  >
>  >   HTTP/1.1 206 Partial Content
>  >    Date: Wed, 15 Nov 1995 06:25:24 GMT
>  >    Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
>  >    Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
>  >
>  >    --THIS_STRING_SEPARATES
>  >    Content-range: bytes 500-999/8000
>  >
>  >
>  >    ...the first range...
>  >    --THIS_STRING_SEPARATES
>  >    Content-range: bytes 7000-7999/8000
>  >
>  >
>  >    ...the second range
>  >    --THIS_STRING_SEPARATES--
>  >
>  >
>  > Please note the lack of the "Content-type: application/pdf" message and
>  > additional line break from the RFC sample and the Tomcat stream.
>  >
>  > After some research I found the DefaultServlet Class where the stream for
>  > partial content and multi range requests are served.
>  > On Tomcat 6.0 at java\org\apache\catalina\servlets and on Tomcat 5.5 at
>  > container\catalina\src\share\org\apache\catalina\servlets
>  >
>  > The first thing that happens to make it work was the add of
>  > "useAcceptRanges" on the config file (web.xml) and the fix for it on
>  > Tomcat 6.0.x class source code on the SVN repository (thankyou). It really
>  > made difference because the HTTP header response must have "Accept-Ranges:
>  > bytes" string to allow clients make byte requests (at least Adobe Reader).
>  >
>  > The second thing is in the "copy" methods. There is a check for the
>  > "contentType" variable and for any reason the method that try to retrieve
>  > its value, before the call for "copy" method, is always returning null.
>  > So, in the if statement within the "copy" methods:
>  >
>  >             if (contentType != null)
>  >                 ostream.println("Content-Type: " + contentType);
>  >
>  > and
>  >
>  >             if (contentType != null)
>  >                 writer.println("Content-type: " + contentType);
>  >
>  > I added a "forced" result of :
>  >
>  >             if (contentType != null)
>  >                 ostream.println("Content-type: " + contentType);
>  >             else
>  >                 ostream.println("Content-type: application/pdf");
>  >
>  > and
>  >
>  >             if (contentType != null)
>  >                 writer.println("Content-type: " + contentType);
>  >             else
>  >                 writer.println("Content-type: application/pdf");
>  >
>  > In my environment it is sufficient because my big deal is with PDF files,
>  > but I know that it is not the most elegant solution neither can be a
>  > definitive solution.
>  >
>  > As I am not a java programmer, I ask for the list to handle this issue.
>  > If it sound completely nuts please forgive me.
>  > I'm available to help with tests for this issue. Please contact me through
>  > the list or directly.
>  >
>  > Best regards to all.
>  > Sincerely,
>  >
>  > Antonio Vitor Elias Swaid Jr
>  > Technical Publications Development
>  > EMBRAER - São José dos Campos
>  > Fone: +55 12 3927-8364 Fax: +55 12 3927-3132
>  > This message is intended solely for the use of its addressee and may
>  > contain privileged or confidential information. If you are not the
>  > addressee you should not distribute, copy or file this message. In this
>  > case, please notify the sender and destroy its contents immediately.
>  > Esta mensagem é para uso exclusivo de seu destinatário e pode conter
>  > informações privilegiadas e confidenciais. Se você não é o destinatário
>  > não deve distribuir, copiar ou arquivar a mensagem. Neste caso, por favor,
>  > notifique o remetente da mesma e destrua imediatamente a mensagem.
>
>
>
>
> ---------------------------------------------------------------------
>  To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
>  For additional commands, e-mail: dev-help@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message