It is hard to tell from just the method you listed here. What happens to
the HttpServletRequest before this method is called?
If you called req.getWriter() before this method was called then that would
explain why you get this exception.
See the API for HttpServletRequest.
-----Original Message-----
From: Ed Wittmann [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, June 20, 2000 2:23 PM
To: [EMAIL PROTECTED]
Subject: Re: Can't mix text and binary data
I have a servlet who's purpose is to deliver files in a members-only area to
our customers. The routine that delivers files works fine by itself, when
the routine is in its own servlet.
However, since I need to control access to these files via an authentication
process, I put the routine into an existing servlet, and call the routine
based upon a request parameter and the verification of user login.
What I get is an IllegalStateException when I attempt to stream the file out
to the customer at the following line:
ServletOutputStream out = resp.getOutputStream();
If I happen to run this under servletrunner, the more verbose output is that
I can't mix text and binary input.
Setting the HttpServletResponse object to null first sure doesn't work. A
quick toString() of the response object gives me a hex number which is
apparently the object reference (not useful).
Prior to sending the file, the only response to the client would have been
the reading or setting of a cookie. I also set the content-type so as to
allow the browser to open the file automatically if possible. Any ideas?
Below is the method I used:
----------------------------------------------------
public void sendFile(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
String file = req.getParameter("file");
log("File to Download is " + root + file);
int filename_length = file.length();
int filename_extensionspot = file.indexOf(".");
String filename_extension = file.substring(filename_extensionspot + 1,
filename_length);
String FileLocation = "";
if (filename_extension.compareTo("pdf") == 0){
res.setContentType("application/pdf");
FileLocation = root + "pdf/";
} else if (filename_extension.compareTo("ra") == 0 ||
filename_extension.compareTo("ram") == 0){
res.setContentType("audio/x-pn-realaudio");
FileLocation = root + "audio/";
}
ServletOutputStream out = res.getOutputStream();
InputStream in = null;
try {
in = new BufferedInputStream( new FileInputStream(FileLocation + file)
);
int ch;
while ((ch = in.read()) !=-1) {
out.print((char)ch);
}
} catch (IOException ioe) {
// whatever
}
finally {
if (in != null) in.close();
}
}
-------------------------------------------------
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html