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