如何在 servlet 中显示对话框时打印出文本'save as'



我有一个程序,该程序选择一个PDF文件并让用户下载它。我确实将OutputStream用于此操作,并且可以正常工作。

但是,在同一页面上,我想显示一个文本(在实际网站上,用于用户)。

我尝试了PrintWriter,但这与OutputStream相反,引发了一个错误,说我不能同时使用它们。因此,我决定使用不起作用的ServletOutputStream's print()。由于某种原因,屏幕上没有打印任何东西。

代码

File pdfFile = new File(filePath);
    response.setContentType("application/pdf");
    response.addHeader("Content-Disposition", "attachment; filename="
            + "EloquaEmail.pdf");
    response.setContentLength((int) pdfFile.length());
    FileInputStream fileInputStream = new FileInputStream(pdfFile);
    OutputStream responseOutputStream = response.getOutputStream();
    int bytes;
    while ((bytes = fileInputStream.read()) != -1) {
        responseOutputStream.write(bytes);
    }
// SOMEWHERE HERE I WOULD LIKE TO PRINT OUT THE TEXT (Some variable)
// I've tried:
//      ServletOutputStream responseOutputStream = response.getOutputStream();
//      PrintWriter responseOutputStream = response.getWriter();
//      responseOutputStream.print(Main.htmlCode);
//      responseOutputStream.close();

编辑:还是可以打开一个新的JSP页面(除了保存为对话框的页面外,还可以传递文本变量?您知道要从Servlet类中模拟target=_blank吗?

我尝试了以下方法:

String message = Main.htmlCode;
request.setAttribute("message", message); // This will be available as ${message}
request.getRequestDispatcher("../WebContent/DownloadHtmlCode.jsp").forward(request, response);

引发此错误:

java.lang.IllegalStateException: Cannot forward after response has been committed

您通常会这样做,通过添加在元标记中包含文本的JSP页面:

 String message = Main.htmlCode;
 response.setHeader("Refresh", "5;url=Display.jsp?message="+message);

最新更新