0

重複の可能性:
java.lang.IllegalStateException: 応答がコミットされた後に転送できません

この種のエラーの通常の原因は何ですか:

com.mycompany.myapp.servlet.TxnDetailsServlet doRequest
ERROR: View failed
java.lang.IllegalStateException: Cannot forward after response has been committed
 at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:312)
 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
 at com.mycompany.myapp.servlet.TxnDetailsServlet.doRequest(TxnDetailsServlet.java:82)
 at com.mycompany.myapp.servlet.TxnDetailsServlet.doGet(TxnDetailsServlet.java:131)

サーブレットはリクエストを処理 (つまり、属性を設定) してから、以下を呼び出します。

    private void doRequest(HttpServletRequest request) throws IOException, ServletException     {
        // Code omitted
        getServletContext().getRequestDispatcher("/Some.jsp").forward(this.request, this.response);
        // Code omitted
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        super.doGet(request, response);
        doRequest(request);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        super.doPost(request, response);
        doRequest(request);
    }

サーブレットは応答して何もしません。

4

2 に答える 2

0

他の人が言ったことに加えて、応答をクライアント(ブラウザ)に一発で転送する必要はありません。代わりに、 response.flushBuffer を呼び出すたびに、複数のショットでクライアントに転送できます。応答がクライアントへのデータ転送を開始すると、応答状態を変更することはできません (setStatus、転送など)

于 2012-12-12T08:21:42.057 に答える
0

別のサーブレット/jsp に転送する場合は、応答出力ストリームに書き込まないでください。

于 2012-12-12T08:08:31.323 に答える