I have checked the archives and have been unable to find a resolution to my
problem.
I am interested in sending a binary data stream (attachment) to the browser
so that the end-user can save these attachments
on their local workstation.
I am able to send the attachment to the browser, and then save the
attachment, however the browser's cursor remains in the
hourglass mode indicating that it perceives that the request has not been
completed yet. Additionally I obtain the following
exception:
Mon Feb 28 17:24:59 PST 2000: Running servlet
{ (Running servlet) java.lang.IllegalStateException: Already called
getOutputStream()
at
com.livesoftware.jrun.JRunServletResponse.getWriter(JRunServletResponse.java
:150)
at com.livesoftware.jsp.JRunJspWriter.flush(JRunJspWriter.java:188)
at jsp.Pipeline.HelloCor._jspService(HelloCor.java, Compiled Code)
at com.livesoftware.jsp.HttpJSPServlet.service(HttpJSPServlet.java:31)
at com.livesoftware.jsp.JSPServlet.service(JSPServlet.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:840)
at com.livesoftware.jrun.JRun.runServlet(JRun.java, Compiled Code)
at com.livesoftware.jrun.JRunGeneric.handleConnection(JRunGeneric.java:116)
at
com.livesoftware.jrun.service.web.JRunWebServiceHandler.handleOutput(JRunWeb
ServiceHandler.java:266)
at
com.livesoftware.jrun.service.web.JRunWebServiceHandler.handleRequest(JRunWe
bServiceHandler.java, Compiled Code)
at
com.livesoftware.jrun.service.ThreadConfigHandler.run(ThreadConfigHandler.ja
va, Compiled Code)
}
The only place where I do a getOutputStream() is in my servlet, I suppose
that this means that somewhere in the JSP
processing it calls getOutputStream() as well. If this is the case then how
can Jason Hunter's returnFile utility work???
My inital rendered JSP page contains links of attachments that the user can
download. If the user clicks on one of these
links, then the user is goes to another JSP page that performs a re-direct
to a servlet that performs the actual
sending of binary data of the attachment to the user's browser.
Here are some code snippets:
Snippet 1: Second JSP page to retrieve object and forward to servlet
====================================================================
// url var
String mimeId = request.getParameter("mimeId");
byte[] mimeIdByteArray = ConversionUtil.toByteArray(mimeId);
MimeDataHome home = client.getDataService().getMimeDataHome();
MimeDataKey key = new MimeDataKey(mimeIdByteArray);
MimeData oMime =
home.findByPrimaryKey(key,com.persistence.container.FindSource.k_cacheThenDa
tabase);
// Testing purposes only, put object in the servlet's context for now...
getServletContext().setAttribute(mimeId, oMime);
String nextPageId = "/servlet/FileDownload?mimeId=" + mimeId;
response.sendRedirect(nextPageId);
Snippet 2: Servlet performing the actual transmission of the binary data
========================================================================
public class FileDownload extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
java.rmi.RemoteException, IOException {
// First we need the ServletContext and the OutputStream...
ServletContext thisCtx = getServletConfig().getServletContext();
ServletOutputStream outStream = res.getOutputStream();
// Then retrieve the mimeId from the request and then pull the
SinglePartMimeData object
// from the ServletContext...
String mimeId = req.getParameter("mimeId");
SinglepartMimeData oMime =
(SinglepartMimeData)thisCtx.getAttribute(mimeId);
// Clean up after ourselves...
thisCtx.removeAttribute(mimeId);
// Set the ContentType...
if (!oMime.getPrimaryTypeNull() && !oMime.getSubTypeNull() )
res.setContentType(oMime.getPrimaryType() + "/" +
oMime.getSubType() );
else
res.setContentType("application/octet-stream");
// Set the header value for Content-disposition...
res.setHeader("Content-disposition", "attachment; filename=" +
oMime.getFilename() ); // Download under IE, downloads under NS
res.setContentLength(oMime.getContent().length);
// Finally dump the content of the mime object to the output stream...
outStream.write(oMime.getContent() );
outStream.flush();
outStream.close();
}
}
I appreciate any input and I thank you for your time,
Cor Ruiten
===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
Some relevant FAQs on JSP/Servlets can be found at:
http://java.sun.com/products/jsp/faq.html
http://www.esperanto.org.nz/jsp/jspfaq.html
http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets