tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Fisher <dfis...@jmlafferty.com>
Subject Re: access files from jsp
Date Tue, 29 Apr 2008 21:02:22 GMT
Hi Henry,

>
> most of these files are PDF, XLS and not only TXT
> format.
> You are meaning that with a JSP definitvly one can
> reads only TXT files?

When I had the trouble I was referred to the JSP spec and it is meant  
for serving marked up Text formats. Encoding translations can happen  
with JSP. With JSP it is easy to insert whitespace which will damage a  
PDF or XLS file.

So, you want a servlet. Servlets send only want you want to send.

You can mount your remote system as a disk on your web server system  
and then use pathnames as the "url" in my sample. We've done this  
since Tomcat 3.0.3.

Pretty simple.

It is up to you if you need to obfuscate your file pathnames.

Glad to help.

Regards,
Dave

>
>
> i understood with help of
> --- David Fisher <dfisher@jmlafferty.com> schrieb:
>
>> Henry doesn't say if these are text files or binary
>> files.
>>
>> If these are binary files like PDF, PPT and XLS
>> files then a servlet
>> will be needed - not a jsp.
>>
>> We use variations like the following in both Tomcat
>> 4.1.31 and Tomcat
>> 5.5.26
>>
>> public class OpenFileServlet extends HttpServlet{
>>
>>     public void doGet (HttpServletRequest request,
>>
>> HttpServletResponse response) throws
>> ServletException, IOException {
>>
>>         // You probably want to look up the url -
>> which is really a
>> path.
>>         String url = request.getParameter("url");
>>         if(url == null) return;
>>
>>         // You'll know your mime types for your
>> content.
>>         String ext = request.getParameter("ext");
>>         String content_type;
>>
>>         if (".ppt".equals(ext)) {content_type =
>> "application/vnd.ms-
>> powerpoint"; }
>>         else if (".xls".equals(ext)) {content_type
>> = "application/
>> vnd.ms-excel"; }
>>         else {content_type = "application/pdf";}
>>
>>         // we don't like to inline Office
>> documents.
>>         boolean is_inline =
>> "application/pdf".equals(content_type);
>>
>>         File f = new File(url);
>>
>>         if ( f.exists() && f.length() > 0) {
>>             response.setContentType( content_type);
>>             // The following works way better in
>> Windows IE than ext=
>>
>> response.setHeader("Content-disposition",
>> (is_inline?"inline":"attachment")+";filename=" +
>> f.getName());
>>             int lng = (int)f.length();
>>             response.setContentLength( lng );
>>             FileInputStream fis = new
>> FileInputStream(f);
>>             byte[] chunk = new byte[16184];
>>             int count;
>>             while ((count = fis.read(chunk)) >=0 )
>> {
>>
>> response.getOutputStream().write(chunk,0,count);
>>             }
>>             fis.close();
>>         } else {
>>             log("File not found: " + url);
>>         }
>>     }
>> }
>>
>>
>>
>> FYI - this approach really became necessary about
>> when 4.1.29 came out
>> - at that time Tomcat got pretty strict with
>> non-Text being served via
>> JSP. All of our PDF and PPT content broke in Windows
>> IE. And we had to
>> back out a whole release.
>>
>> Regards,
>> Dave
>>
>> On Apr 29, 2008, at 1:39 PM, David Smith wrote:
>>
>>> So... the "remote file" is available to the local
>> system on a
>>> network drive. That's a fun one. There are a
>> couple of different
>>> ways to do this.
>>>
>>> 1. Using Windows fileshares
>>>
>>> Let me preface this by saying *I've* never done
>> this. The few times
>>> I've had a tomcat server on a Windows machine, it
>> only ever accessed
>>> local files. There are people on the list with way
>> more experience
>>> than I have.
>>>
>>> As I understand it, as long as tomcat is running
>> under a user
>>> account that has privileges to read the remote
>> file, you could use a
>>> UNC path with java standard file access classes
>> and methods to read
>>> the file. The mapped drive letter wouldn't work
>> unless tomcat was
>>> only running while you are logged in. In a jsp,
>> this could be done
>>> with a scriptlet:
>>>
>>> <!-- import your classes at the top of the jsp....
>> -->
>>> <jsp:scriptlet>
>>> try {
>>> FileInputStream remoteFileReader = new
>> FileInputStream( "\\\
>>> \remoteServer\\archive\\files\\myFile.txt" ) ;
>>> // do something with the file
>>> } catch ( Exception e ) {
>>> // do something if the access fails
>>> } finally {
>>> try {
>>> remoteFileReader.close() ;
>>> } catch ( Exception e ) {}
>>> }
>>> </jsp:scriptlet>
>>>
>>> It should be mentioned the system account most
>> services run under by
>>> default does not have any privilege to access
>> remote files via UNC
>>> path, so you'll have to customize your tomcat
>> installation a
>>> little. ... Or always be logged into the system
>> and have it running
>>> as you which isn't the most ideal method.
>>>
>>> 2. Using a webserver on the remote system
>>>
>>> This I have done and it's more platform
>> independent. Your jsp can
>>> request it from the remote server using standard
>> taglibs:
>>>
>>> (note standard.jar and jstl.jar must be in your
>> webapp's WEB-INF/lib
>>> directory)
>>>
>>> <!-- import the core taglib from jstl at the top
>> of the file. Docs
>>> for the jstl taglib can help with this -->
>>>
>>> <c:import
>>
> url="http://remoteSystem.dns.com/http/path/to/file.txt"
>>
>>> var="fileContents" />
>>> <!--.... Do something with the file contents,
>> it'll be available in
>>> the fileContents page context attribute.... -->
>>>
>>>
>>> --David
>>>
>>> henry human wrote:
>>>> Thanks David,
>>>> I try to clarify my situation.
>>>> I have a JSP running in local computer in tomcat.
>> This
>>>> JSP should read from a remote machine. The files
>> are
>>>> under d:\archive\files. These directory which
>> provide
>>>> a repository functionality could not be transfer
>>>> somewhere else. The files “must be” saved there.
>> 1) Scennario one:
>>>> The remote machine does not hava e
>>>> webserver
>>>> 2) Scenario two: a tomcat is running on remote
>>>> computer
>>>> My questions:
>>>> 1) Do I need the webserver at all to access
>> remotely
>>>> the files?
>>>> 2) Is it poosile to access the data on
>> d:\archive…
>>>> without to put them in a webserver directory or
>> not?
>>>> If no, do I need configuration for the webserver
>> (f.i.
>>>> tomcat)to allow access to the files from outside?
>>>>
>>>> --- David Smith <dns4@cornell.edu> schrieb:
>>>>
>>>>
>>>>> Here's the picture you painted in the original
>> email
>>>>> and I based my answer on:
>>>>>
>>
> === message truncated ===
>
>
>
>      __________________________________________________________
> Gesendet von Yahoo! Mail.
> Mehr Möglichkeiten, in Kontakt zu bleiben. http://de.overview.mail.yahoo.com
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message