フォワードできません
以下のようなエラーが出ました。
java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません
未入力の場合、リクエストスコープにエラーメッセージをリクエストスコープに保存して画面をフォワードしたときに上記のエラーが出ました。
具体的なコードは以下のようなものです。
/** POSTリクエスト */
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request
, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String text = request.getParameter("text");
// 入力チェック
if (text == null || "".equals(text)) {
System.out.println("*** in Error ***");
// エラーメッセージをリクエストスコープに設定
request.setAttribute("errorMsg", "つぶやきが入力されていません");
// フォワード
forwardMain(request, response);
}
ServletContext application = this.getServletContext();
// アプリケーションスコープ
List<Mutter> mutterList =
(List<Mutter>)application.getAttribute("mutterList");
// セッションスコープ
HttpSession sess = request.getSession();
// ユーザークラス
User user = (User) sess.getAttribute("loginUser");
// つぶやきリストに追加
Mutter mutter = new Mutter(user.getName(), text);
new PostMutterLogic().execute(mutter, mutterList);
// アプリケーションスコープに保存
application.setAttribute("mutterList", mutterList);
// フォワード
forwardMain(request, response);
}
private void forwardMain(HttpServletRequest request
, HttpServletResponse response) throws ServletException, IOException{
// フォワード
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
dispatcher.forward(request, response);
}
エラーの原因を探る
元々エラー処理、パラメータの入力チェックを行っていなかったところにエラー処理
を入れ、フォワードするように実装しました。if (text == null || "".equals(text)) {
原因部分はここになるのですが、調べてみると。下の処理を2回行っているところがありました。
// フォワード
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
dispatcher.forward(request, response);
まとめ
2回フォワードしているのでエラーになったということでした。。。
でわでわ。。。