0

リクエスト パラメータを検証しようとすると、Tomcat でエラー 500 が表示されます。

スタックトレース:

HTTP Status 500 - Cannot forward after response has been 
type Exception 
message Cannot forward after response has been 
description The server encountered an internal error that prevented it from 
fulfilling this request. exception

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

これが私のサーブレットの一部です(PrintWriter.flashなどはありません)。

このコードは、サーブレットの先頭にあります。IllegalArgumentException「既にコミット済み」という応答が表示されるのはなぜですか?

String login = req.getParameter("login");
String password = req.getParameter("password");

if (login.length() == 0 || password.length() == 0) {
    req.setAttribute("wrong", "Your login or password is empty");

    RequestDispatcher rd = req.getRequestDispatcher("jsp/index.jsp");
    rd.forward(req, resp);
}
4

1 に答える 1

1

returnページをディスパッチした後に追加します。これにより、例外が解決されます。

    RequestDispatcher rd = req.getRequestDispatcher("jsp/index.jsp");
    rd.forward(req, resp);
    return;

理由:

' forward' または ' include' の場合、同じrequestandresponseがそのリソースに渡されます。JSP出力ストリームを閉じると、データを返すために使用できなくなります。データが に書き込まれるとすぐにclient、応答はすでにcommitted

于 2013-02-19T14:41:45.400 に答える