Performance of BufferedOutputStream.write() 2005-01-07 - By Frans Verhoef
Back Maybe you could send the part of the code which is involved in the streaming of the file in your servlet?
Frans
On Fri, 7 Jan 2005 14:18:07 +0900, Jean-Christian Imbeault wrote: >?For security reasons we don't allow our users direct access to pdf >?files located on our application server. They have to request them >?through a servlet and then the servlet streams the file back to the >?client. > >?However we have some performance issues. Files take a long time to >?streamed compared to the time it takes to get the file if it's >?served up as a file (a direct URL to the file). a 200kb file might >?take 2 s to load from a link but about 10 s when going through the >?servlet. > >?We're not sure if the performance problem is a direct result of >?using a servlet to stream the file (i.e. you need to first read the >?file, then stream it) or some other problem with our application >?configuration. > >?Can someone give me their opinion on the following servlet code? > >?Two things I am wondering about are: > >?#1- passing a file around in the request object is a bad thing, or >?a performance issue #2- streaming the file is not very efficient > >?I think #1 might be an issue especially considering that the files >?ar from 200kb - 2Mb. Putting such a large object into memory just >?doesn't seem right. > >?As for #2 I don't know. A web server basically as to read the file >?and then stream it anyway so there should be much difference if I >?usurp the web server and do all the file reading and streaming >?myself... > >?Thanks, > >?Jc > >?==The code=> > >?public class FileDownloadServlet extends HttpServlet { public void >?doPost(HttpServletRequest req, HttpServletResponse res) throws >?ServletException, IOException { > >?ServletOutputStream out = res.getOutputStream(); FileContentVO >?fileContentVO >?(FileContentVO) req.getAttribute(AppConstants.OUTPUT_OBJECT); >?String fileName = fileContentVO.getFileName(); > >?/********** preventing browser from caching **********/ > >?res.setHeader("Pragma", "No-cache"); >?res.setDateHeader("Expires", 0); >?res.setHeader("Cache-Control", "no-cache"); > >?/***********************End***************************/ > >?res.setContentType("application/pdf"); >?res.setHeader("Content-disposition", "inline; filename=" + >?fileName); > >?BufferedOutputStream bos = null; >?byte[] buff = null; > >?try { >?bos = new BufferedOutputStream(out); > >?/* the file was read from disk and put in the VO */ buff >?fileContentVO .getFileContent(); bos.write(buff, 0, buff.length); > >?if (bos != null) { >?bos.close(); >?} > >?} >?catch (final MalformedURLException e) { >?throw e; >?} >?catch (final IOException e) { >?throw e; >?} >?catch (Exception e) { >?} >?finally { >?buff = null; >?} >?} >?} > > >?Note: This e-mail contains privileged and confidential information >?and is for the sole use of the intended recipient(s). ?If you are >?not an intended recipient, you are hereby kindly requested to >?refrain from printing, copying, or distributing the information >?contained herein. ?Furthermore, any other use of the information >?contained herein is strictly prohibited. ?If you have received this >?transmission in error, please kindly notify the sender immediately >?and destroy all copies of the original message. > >?=====================================================================>?===== To unsubscribe, send email to listserv@(protected) and >?include in the body of the message "signoff J2EE-INTEREST". ?For >?general help, send email to listserv@(protected) and include in >?the body of the message "help".
==========================================================================To unsubscribe, send email to listserv@(protected) and include in the body of the message "signoff J2EE-INTEREST". For general help, send email to listserv@(protected) and include in the body of the message "help".
|
|