GlassFish 3.1をターゲットとするDynamic Web App 3.0にオーバーライドされたdoGet
メソッドを持つサーブレットがあります。sendRedirect()は、GlassFish 3.1.1でサーブレット3.0でIllegalStateExceptionをスローしません。
私はOCEJWCD試験のために勉強しており、どのような状況でどのような例外が発生するのかを記憶しようとしています。
サーブレット2.5 APIのみをサポートするTomcat 6.0のため、Glassfish 3を使用する必要があります。次のような状況に非常に混乱します。
多くのことを古いsources状態:サーブレットが出力ストリームに 何かを書くために起動すると応答が、すぐにコミットされ
。 応答がコミットされた後にリダイレクトを試みると、IllegalStateExceptionエラーが発生します。
しかし3.0最終仕様のセクション5.3の状態servletのデータ(すなわち、応答がコミットされません)応答バッファに書き込まれますが、 クライアントに戻っていないされている場合は、データを
を 応答バッファをクリアし、これらの方法で で設定したデータに置き換える必要があります。応答がコミットされている場合は、これらの方法は は、なぜこれらの行は
IllegalStateException
をスローすることはありませんレスポンスをコミットPrintWriter.print()
あるを考慮すると、IllegalStateExceptionが
私が知りたいのですスローする必要がありますか?私はそれを注意する必要が
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String url = "http://someurl.com/";
PrintWriter out = response.getWriter();
out.print("This will be written into response buffer");
response.sendRedirect(url); // sendRedirect() after writing into buffer
}
、私はGlassFishサーバーログから例外を取得することができるよ、私ははっきりHttpServletResponse.sendRedirect(url);
続いHttpServletRequest.getRequestDispatcher().forward(req,res);
が実際にGlassFishのコンテナにIllegalStateException
を投げないことがわかります。
* "Servlet 2.5 APIのみをサポートするTomcat 7.0のため" *これは間違いです。 Tomcat 7.0はServlet 3.0をサポートしています。おそらくあなたはTomcat 6.0と混乱しているでしょうか? http://tomcat.apache.org/whichversion.html – BalusC
私はTomcat 6.0を参照しようとしていました。修正をありがとう。 –