[解決済み] レスポンスがコミットされた後に sendRedirect() を呼び出せない問題を修正する方法は?[重複]。
2022-01-25 09:42:10
質問
私は、以下のコードを使用してサーブレットからjspページに値を渡そうとしています。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
System.out.println("try");
String taskid=request.getParameter("id");
convty = new Connectivity();
con = convty.setConnection();
st=con.createStatement();
query="select * from task_table";
rset=convty.getResultSet(query, con);
while(rset.next()) {
System.out.println("while");
lst.add(rset.getString("task_id"));
lst.add(rset.getString("date"));
lst.add(rset.getString("project_name"));
}
rset.close();
System.out.println("after while");
} catch(Exception e) {
RequestDispatcher dd= request.getRequestDispatcher("error.jsp");
dd.forward(request, response);
} finally {
System.out.println("finally1");
HttpSession sessionvar = request.getSession();
sessionvar.setAttribute("TaskData", "lst");
response.sendRedirect("usertaskpage.jsp");
lst.clear();
out.close();
}
}
私のページを実行すると、私は取得しています。
エラー:
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
src.Taskservlet.doPost(Taskservlet.java:108)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
使ってみました。
RequestDispatcher dd=request.getRequestDispatcher("usertaskpage.jsp");
dd.forward(request, response);
が、同じエラーが出ました。
このエラーを修正する方法を教えてください。
解決方法は?
キャッチブロックの中で、すでにレスポンスが転送されていますね。
RequestDispatcher dd = request.getRequestDispatcher("error.jsp");
dd.forward(request, response);
を呼び出すことができないので、再び:
response.sendRedirect("usertaskpage.jsp");
というのは、すでに転送(コミット)されているからです。
ではどうすればいいかというと 文字列を保持して、レスポンスを転送する必要がある場所を指定します。
String page = "";
try {
} catch (Exception e) {
page = "error.jsp";
} finally {
page = "usertaskpage.jsp";
}
RequestDispatcher dd=request.getRequestDispatcher(page);
dd.forward(request, response);
関連
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】純粋なJUnitテストにVisibleForTestingを使用する方法
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み] [Solved] java.lang.IllegalStateException: レスポンスがコミットされた後では(forward | sendRedirect | create session)できません。
-
[解決済み] Androidで遅延後にメソッドを呼び出す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み] intellijが自動配線リポジトリにタイプのBeanが見つからないと不正確な発言をする件
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み] テスト
-
[解決済み] [Solved] java.lang.IllegalStateException: レスポンスがコミットされた後では(forward | sendRedirect | create session)できません。