浏览了SO,找不到类似于我所追求的问题。我将从解释我正在尝试做的事情开始,然后以一个更具体的问题结束。
我的目标
我有一个将查询字符串参数传递给我的 servlet 的链接。那个参数是report
。如果report = true
在 servlet 中,那么我将生成一个 PDF 文档。然后 PDF 文档通过将响应设置mime type
为application/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
and 中的其他值,虽然它使页面看起来好像什么也没做,但它不允许我向用户输出错误消息。
问题
虽然我知道如何让 Web 响应看起来没有返回,但这意味着我无法向用户输出任何有意义的信息,这显然不是理想的结果。
我的问题
有没有办法强制 servlet 停止,或者返回一些东西让浏览器忽略数据?
我的第二个问题是,如果我可以将某些内容发送回浏览器,我可以在客户端做些什么来导致弹出消息(可以像 一样简单alert()
)吗?
我已经尽可能的清楚了,所以如果你有什么需要知道的,尽管问:)