看了一眼SO,找不到类似于我所追求的问题。我将从解释我正在尝试做的事情开始,然后完成一个更具体的问题..
我的目标
我有一个链接将查询字符串参数传递给我的servlet。该参数为report
。如果servlet中有report = true
,那么我将生成一个PDF文档。然后,通过将响应的mime type
设置为application/pdf
,PDF文档将返回此值。此代码如下所示:
String mimeType = "application/pdf";
res.setContentType(mimeType);
res.setHeader("Content-Disposition", "attachment; filename=\"" +
getEventID(doc) + ".pdf\"");
// Set the response content type and pdf attachment.
out = new ByteArrayOutputStream();
// All PDF Data is pushed onto the output stream.
com.lowagie.text.Document pdfDoc = buildPDF(getEventID(doc));
然后将此代码写入response
对象的输出流。
if(pdfDoc == null)
{
// Something went wrong in generating the report.
return false;
}
// Create the PDF document.
out.writeTo(res.getOutputStream());
如果一切顺利,该课程将返回true
。如果没有,则返回false
。现在,我遇到的问题是它是否返回false。基本上,我想指出空白停止数据去任何地方。我添加了检查以确保一切顺利,之前我将任何内容写入输出流,所以目前我所拥有的是一个设置为PDF类型的响应,但不包含数据,如果出了点问题。
接下来,我有一个测试类输出的函数。如果它是真的,那么一切都很好,但如果它是假的,那么它设置error
参数:
if(!PdfReportGenerator.generateReport(res, repositoryURI)) {
req.getSession().setAttribute(SDRestServlet.PDF_ERROR, "error");
// This will then re-direct back to the current URL, meaning the page
// looks like it doesn't do anything.
res.sendRedirect(req.getRequestURI());
}
问题是,这种重新定向实际上根本没有帮助。它正在弄乱存储在request
中的其他值,虽然它使页面看起来像什么都不做,但它不允许我向用户输出错误消息。
问题
虽然我知道如何使其看起来像但Web响应没有返回,但这意味着我无法向用户输出任何有意义的信息,这显然不是理想的结果。
我的问题
有没有办法强制servlet停止或返回一些东西,以便浏览器忽略数据?
我的第二个问题是,如果有什么东西我可以发回浏览器,那么我在客户端可以做些什么来弹出一条消息(可以像alert()
一样简单)?
我一直都很清楚,所以如果你需要知道什么,请问:)
答案 0 :(得分:0)
有没有办法强制servlet停止,或返回一些东西 浏览器忽略数据?
请尝试使用方法“ServletResponse.setContentLength(int)”设置零响应
我的第二个问题是,如果有什么我可以发回给 浏览器,有什么我可以在客户端做的事情导致 弹出的消息(可以像alert()一样简单)?
是的,你可以,但你需要更新标题以说出“text / html”并设置所有变量,就像在服务器请求的正常情况下那样设置
第二种方法:
如果我必须从头开始构建它,请遵循以下方法:
希望我能在这里帮助你。