在Servlet中提交响应后无法转发

时间:2013-11-14 12:04:45

标签: jsp servlets

我在我的Simple应用程序中使用Servlet和Jsp。当我点击提交按钮时,它会调用servelt并下载PDF文件并将其翻译到下一页。现在我的问题是我在我的servlet中使用response.setHeader and getOutputStream,同时我试图将我的resquest转到下一页。现在它给我的错误是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);   
}
}

1 个答案:

答案 0 :(得分:0)

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

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