- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我所知,这属于“你不能那样做”的范畴。我即将重新考虑我的解决方案并解决它,但我认为在这里提问至少值得一试。
我的 JSP/Spring/Struts Servlet 生成报告,将它们写入 PDF,并将它们排队等待下载,然后等待用户请求更多报告。细节不是太重要。我使用以下函数调用将 PDF 流式传输到服务器:
public static void streamFileToBrowser(File docFile, HttpServletResponse response) throws Exception {
try {
// return file to user
// set contextType
response.setContentType("application/pdf");
// setting some response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition","attachment; filename=" + docFile.getName() );
ServletOutputStream outs = response.getOutputStream();
byte[] outputFileBytes = util_getBytesFromFile(docFile.getAbsolutePath());
response.setContentLength(outputFileBytes.length);
outs.write(outputFileBytes); // byte[]
outs.flush();
outs.close();
} catch (Exception e) {
throw e;
}
}
这很简单。我使用响应的 ServletOutputStream 对象来传送我的位。它运行良好。
但是,有时我会捕获一些在生成报告期间导致的错误。它们是信息性消息,例如“没有来自帐户等等的订单”。我的 JSP 中有一个部分将捕获并显示这些内容。
问题来了:当我没有要发送的报告时,我不会调用上述函数。但我总是这样称呼:
return mapping.findForward("pullReports");
作为我的 ActionForward 方法的最后一行,出现了错误。但是,如果我有要通过 streamFileToBrowser() 函数发送的位,我对 mapping.findForward 的最终调用不会执行任何操作。
一点挖掘告诉我,Struts 一次只能处理对 HttpServletResponse 对象的一个响应。我在调用 streamFileToBrowser() 时使用了它,因此最终调用 mapping.findForward(...) 对我的客户而言没有任何作用。
还有其他人遇到这个问题并找到了解决方案吗?
最佳答案
我所做的是尽可能确保在 PDF 生成开始之前捕获所有错误。这样你就可以发回一组普通的旧表单错误,或者其他什么。一旦您开始发回这样的附件,浏览器就不会再关注任何其他内容。如果您在生成 PDF 文件之前绝对找不到错误,我认为您唯一能做的就是将错误消息嵌入 PDF 本身(我知道这很不愉快)。
关于java - 调用 ServletOutputStream 后转发到 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336925/
我正在尝试将一个大的 XML 文件(超过 1.5M)写入 ServletOutputStream,这需要很长时间,接近 7 分钟左右甚至更长。 我正在做的事情如下 - 1. SOAPMessage s
我有一个要求,从 Web 服务(例如:List)获取多个图像,并且必须将这些图像写入 ServletOutputStream。 当我单击“VIEW”链接时,它会调用 servlet,而该 servle
我想压缩动态创建的内容并直接写入ServletOutputStream,而不是在压缩前将其另存为服务器上的文件。 例如,我创建了一个 Excel 工作簿和一个包含带有 SQL 模板的字符串的 Stri
找了很多都没有解决这个问题。我正在用 iText 生成 PDF 文件。如果我使用 FileOutputStream,一切都很好,但是当我尝试使用 ServletOutputStream 时,图像不会出
我遇到了一个无法一致重现的问题。我读取一个文件并将该文件的内容写入 ServletOutputStream。 byte[] buff = new byt
对于内容类型“text/plain”,如果我必须发送大量数据,以下哪个更有效。 ServletOutputStream sos = response.getOutputStream(); sos.wr
这是我在刷新 ServletOutputStream 时遇到的异常。它不会出现在每个请求上,所以我无法重现它。 java.lang.NullPointerException at org.ap
我想知道在创建将内容写入 ServletOutputStream 的 byte[] 时是否有特定规则或最佳实践? byte[] buffer = new byte[1024]; int r
我正在使用 Java 中的一些现有代码开发 Web 服务。 Web 服务使用 ServletResponse 接口(interface)来生成响应。当前代码首先创建 ServletResponse 对
我正在尝试读取 FreemarkerView 渲染的结果: View view = viewResolver.resolveViewName(viewName, locale); view.rende
在执行这段代码时, ServletOutputStream out = response.getOutputStream(); out.write(bytes, 0, bytes.length); o
ServletOutputStream output = response.getOutputStream(); output.write(byte[]); 将 File 写入 javax.servl
我们在服务器端尝试了以下方法, 将 2.5 MB 的文件内容从 MS-Amazon 服务器写入 Java 客户端代码、Android 客户端代码和 IOS 客户端代码大约需要 55 秒 服务器示例代码
我有一个 HttpServlet,我正在尝试为其编写测试并模拟了 ServletOutputStream:ServletOutputStream outputStream = mock(Servlet
我知道之前许多问题的重点是关闭或不关闭 ServletOutputStream,如下所示:Should I close the servlet outputstream?或此处:Should one
据我所知,这属于“你不能那样做”的范畴。我即将重新考虑我的解决方案并解决它,但我认为在这里提问至少值得一试。 我的 JSP/Spring/Struts Servlet 生成报告,将它们写入 PDF,并
我希望这个问题符合 Stack Overflow 问题指南的“软件算法”。 :) 我有一个 Java Web 应用程序,作为服务 Servlet 请求的一部分,它会生成日志记录事件,这些事件会调用持久
我有一个疑问。我有一个项目之前运行成功。但突然间我遇到了下面给出的一个问题 java.lang.InternalError: java.io.IOException: Stream closed at
我正在编写一个动态生成 GIF 文件的端点。我会从头开始。 我有一个名为 Function 的类(class)它像一个抽象类一样工作,我有几个类,在这个例子中 AddFunction ,代表一小块功能
我们有一些生产代码可以有效地执行此代码的操作: http://java.sun.com/products/java-media/2D/reference/faqs/index.html#Q_Can_I
我是一名优秀的程序员,十分优秀!