Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do file I/O with a servlet running on Tomcat

I am writing a Java servlet, using Tomcat as the container, which creates and serves PDF files to the end-user. Currently the PDF files are created in-memory and written out as a response to a POST.

I would like to change this up somewhat so that the PDF files are written to disk (so they can be served up again later). I am having trouble locating a suitable "how-to" for doing this.

How can I configure my servlet to write to and read files from a directory server-side? From what I've read, I think I need to locate this directory somewhere outside where my "exploded webapp" lives in $CATALINA_BASE for security reasons, and I need to use a Context or somesuch.

like image 948
Shaggy Frog Avatar asked Aug 09 '10 23:08

Shaggy Frog


1 Answers

You can just use the usual FileOutputStream and FileInputStream classes to respectively write to and read from the disk. Change your PDF generator to write to FileOutputStream and change your file servlet to read from FileInputStream.

And, indeed, you'd like to store those files outside the webapp, else it will all get lost whenever you redeploy the webapp. You don't need the ServletContext, it's only useful to convert a relative web path to an absolute disk file system path. You don't need it when you're storing it outside the webapp, you namely already know the absolute disk file system path.

See also

  • Java IO tutorial
  • Basic example of FileServlet
like image 122
BalusC Avatar answered Nov 16 '22 23:11

BalusC