【问题标题】:Cannot forward after response has been committed in Servlet在 Servlet 中提交响应后无法转发
【发布时间】:2023-03-17 00:14:01
【问题描述】:

我正在为我的简单应用程序使用 Servlet 和 Jsp。当我单击提交按钮时,它会调用服务器并下载 PDF 文件并将其转发到下一页。现在我的问题是我在我的 servlet 中使用response.setHeader and getOutputStream,同时我试图将我的请求转发到下一页。现在它向我抛出了错误说 java.lang.IllegalStateException: Cannot forward after response has been committed 。 请任何人帮助我解决这个问题。

代码:

public class Class extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
Document document = new Document();  
        ServletConfig cfg=getServletConfig();
        ServletContext application=cfg.getServletContext();
    response.setContentType("application/pdf");
            response.setHeader("Content-Disposition"," attachment; filename=\"BI_Staffing.pdf\"");              
            PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());  

------------
---------------(My Code)
document.close();

                RequestDispatcher rd=request.getRequestDispatcher("staffing-results1.jsp");
                rd.forward(request,response);   
}
}

【问题讨论】:

  • 您不能同时提供 pdf 和来自 jsp 的 html。您需要决定哪一个更适合提供给用户。

标签: jsp servlets


【解决方案1】:

你必须改变你的“工作流程”。 Web 应用程序基于 HTTP,它是请求-响应协议。您已经通过写入响应的 outputStream 来响应您的请求。您无法再次转发回复。此外,您只能打开一个“输出通道”——用于二进制响应的 outputStream 或用于文本的 writer。由于已经为您的 PdfWriter 打开了输出流,您甚至无法获取写入器来写入单个位。

作为表单提交操作的结果,显示带有 PDF 链接的 staffing-results1.jsp 怎么样?

【讨论】:

    猜你喜欢
    • 2013-08-15
    • 2013-06-25
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多