看过SO并找不到类似于我之后的问题。我将解释什么,我试图做的开始,然后用一个更具体的问题,完成了..停止返回响应的Servlet
我的目标
我有一个通过查询字符串参数来我的servlet的链接。该参数是report
。如果在servlet中使用report = true
,那么我将生成一个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
中的其他值,并且虽然它使页面看起来像没有任何操作,但它不允许我向用户输出错误消息。
问题
虽然我知道如何使它看起来像网络响应没有返回,就意味着我不能输出任何有意义的信息给用户,这显然是不理想结果。
我的问题
有没有办法迫使servlet来停止或使浏览器将忽略这些数据返回的东西?
我的第二个问题是,如果有什么东西我可以发回浏览器,有什么我可以做在客户端导致消息弹出(可以像alert()
一样简单)?
我已经明确的,因为我可能就可以了,所以,如果有什么事,你需要知道的,只问:)
为什么你会知道你是否返回PDF或错误之前,甚至将MIME类型设置为PDF? – Kayaman
当我开始写这篇文章的时候,我并不知道自己在做什么,所以我只是从我在这个项目中看到的其他代码开始。我知道这不是最佳做法,但我们可以先关注问题,然后我会根据您的改进建议采取行动吗? – christopher
这不是一个改进建议。在知道我是否返回PDF或错误消息后,我会设置mime类型。或者说,如果我重定向到错误页面,我根本不会设置MIME类型。 – Kayaman