私はいくつかの値と、そのようなを確認するために、別のJSPファイルが含まれてJSPファイル、持っている:私はいくつかの必要な値であるか否かを判断するいくつかの条件付きコードを持っているsetup.jspインサイドresponse.sendRedirect()from jsp:includeが無視されていますか?
<jsp:include page="setup.jsp" />
をセッションに設定し、そうでない場合は別のページにリダイレクトします。少なくとも、それは想定されていますが、リダイレクトは無視されているようです。
System.err.println("Redirecting!");
response.sendRedirect("http://www.google.com");
return;
「リダイレクトする」を参照してください。コンソールにログに記録されますが、ページは引き続き表示され、正常にレンダリングされます。私は私のためにヘッダーをカールダンプし、応答がHTTP/1.1 200 OK
であることを見たので、間違いなく302リダイレクトを送信していません。
問題が何であるか、どのように修正できますか?
編集:私の応答はまだコミットされていないことを確認しました。 response.isCommitted()
は、false
を返します。ステータスコードとヘッダーはまだ送信されていません。
編集2:他の多くの場所でresponse.sendRedirect()
を呼び出してみましたが、その前に正常にリダイレクトできることがわかりました。 JSP内のリダイレクトは無視されているようですが、jspの直後にリダイレクトしようとすると、応答が既にコミットされているため、不正な状態例外が発生します。
応答の一部がクライアントに送信され、リダイレクトが無視される可能性があります。リダイレクトは最初に解析する必要があります(ほとんど)。 – Augusto
これははるかに大きなWebアプリケーション構造内に収める必要があるので、リダイレクトを行うコードをいつどこに置くことができるかは、私の手によって結び付けられています。リダイレクトをしようとしているときに応答が既にブラウザに戻ってきているかどうかを確認する方法はありますか? jspにインクルードされているときに何らかのリダイレクトをどのように開始できるかについての提案はありますか? –
私は、リダイレクトを呼び出す場所に単純なout.println()メッセージを追加しました。その出力は、レスポンスの他の出力の前に表示されます。私はその時点でリダイレクトすることを許されるべきではありませんか? –