2

シンプルなアプリケーションにサーブレットと Jsp を使用しています。[送信] ボタンをクリックすると、サーベルトが呼び出され、PDF ファイルがダウンロードされ、次のページに進みます。今私の質問は 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);   
}
}
4

1 に答える 1

0

「仕事の流れ」を変える必要があります。Web アプリケーションは、要求応答プロトコルである HTTP に基づいています。応答の outputStream に書き込むことで、要求に応答済みです。返信をもう一度転送することはできません。さらに、開くことができる「出力チャネル」は 1 つだけです。バイナリ応答の場合は outputStream、テキスト応答の場合は writer です。出力ストリームは PdfWriter に対して既に開かれているため、ライターを取得して 1 ビットを書き込むことさえできません。

フォームの送信アクションの結果として、PDF へのリンクを含む staffing-results1.jsp を表示するのはどうですか?

于 2013-11-14T14:37:17.093 に答える