java – 最佳实践response.getOutputStream
允许用户下载文件的任何关于我的代码的评论.
if(fileObject !=null) response.setHeader("Content-disposition","attachment; filename=""+fileObject.getFilename()+"""); response.setContentType(fileObject.getFiletype()); response.setContentLength((int)fileObject.getFilesize().intValue()); try { if(response !=null && response.getOutputStream() !=null &&fileObject!=null && fileObject.getBinData() !=null ){ OutputStream out = response.getOutputStream(); out.write(fileObject.getBinData()); } } catch (IOException e) { throw new ApplicationRuntimeException(e); } 大多数时候,我不会低于错误.但有一段时间,我得到错误 29 Nov 2010 10:50:41,925 WARN [http-2020-2] - Unable to present exception page: getOutputStream() has already been called for this response java.lang.IllegalStateException: getOutputStream() has already been called for this response at org.apache.catalina.connector.Response.getWriter(Response.java:610) 解决方法
异常消息很明确:
抛出了IOException并且您将其重新抛出为自定义异常,这迫使servletcontainer显示将使用getWriter()的异常页面.实际上你应该让任何IOException出现,因为这通常是一个不归路. 例如,当客户端中止请求时,可以在作业期间抛出IOException.最佳做法是不要自己捕获Servlet API上的IOException.它已经在servlet方法的throws子句中声明. protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { FileObject fileObject = getItSomehow(); if (fileObject != null && fileObject.getBinData() != null) { response.setHeader("Content-disposition","attachment; filename="" + fileObject.getFilename() + """); response.setContentType(fileObject.getFiletype()); response.setContentLength((int)fileObject.getFilesize().intValue()); response.getOutputStream().write(fileObject.getBinData()); } else { // ??? } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java:如何确保接口方法不比X花费更多时间?
- java – 在布局JScrollPane时何时调用getPreferredScrollab
- Sprint Boot 集成MongoDB的操作方法
- Java:版本化的数据结构?
- java使用websocket,并且获取HttpSession 源码分析(推荐)
- 快速入门介绍Java中强大的String.format()
- 浅谈java继承中是否创建父类对象
- java.lang.Exception:未指定证书文件或文件格式无效
- grand-central-dispatch – 使用`sync`调度队列和使用带有.
- java – 使用Repast Simphony的意外结果