質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

8325閲覧

画面遷移(sendRedirect)ができません。

nothing

総合スコア27

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2016/08/16 09:11

編集2016/08/16 10:45

java初心者です。

jsp(viewer)とservlet(controller)、class(model)を使用してDB登録用のPGを作成しています。

jsp側でpostを投げて、servletに移動後、
servletで再度jspにredirectをしているのですが、画面がservletから変わりません。

他に画面遷移する処理はなく、jspとservletの下記2か所だけです。
現在、できない原因が全く分からず、1つずつつぶしているところです。

  • 処理を抜けるコードはありません。
  • パスはあっています。(jspは/WebContentの直下)
  • 処理を入れる場所もあってそうです。

(try内でDB処理後にredirect)

恐縮ですが、どこを確認すればよいのか、また考えるとしたら何を疑うべきなのか、どなたかご教授ください。
初心者のため、うまく説明できず、わかりにくいかもしれません。
申し訳ありませんが、どうぞよろしくお願いします。
※ご指摘いただいたcatch部分の処理を修正追加しました。
引き続き、調べておりますので、恐縮ですが、どなたかどうぞよろしくお願いします。

jsp:address_form.jsp <body> <h1>登録</h1> <form action = "../Part19/InsertSQL" method = "post">
servlet:InsertSQL.java doPost try{ DB処理 ps.close();//Stamementのクローズ conn.close();//DBのクローズ response.sendRedirect("address_form.jsp");//リダイレクト }catch(SQLException e){ e.printStackTrace(); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サーブレット側のtry{ ~ }内でSQLException例外がスローされている場合は、catchに移動しますが、catchにて 何もしていないので 何も起こりませんし、もちろん画面遷移すらしません。

catch {} と書いてしまうと例外が出ても何も起こらず、特に例外が発生しているにも関わらず何も出力していないため、現象が一切追跡できない状態になります。
この書き方は 例外を握りつぶす と言われ、アプリケーションが致命的な例外を検出しても一切制御できなくなるため、絶対に避けなければいけない書き方です。

最低限、次のようにすることで発生する例外と、発生した位置は特定できるでしょう。

java

1}catch(SQLException e){ 2 e.printStackTrace(); 3}

投稿2016/08/16 10:18

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nothing

2016/08/16 10:38

ご回答ありがとうございます。 catchのエラー部分の記載を調べていて、 試しにエラー処理をクラス側(DB接続部)に組み込んだため、 今回、servlet側のエラー処理を一度消してみてコーディングしておりました。 そのような効果があるとは。 危ないところでした。 ただ、今回、例外は発生しておらず、 該当部に教示いただいた内容でエラー処理を組み込ませていただいても、 やはり画面遷移(sendRedirect)は起こりませんでした。 指摘いただきましたようにエラー周りの知識が不十分のようなので、 引き続き、ご教示くださった点を踏まえ、調べてみます。 ありがとうございました。
nothing

2016/08/16 12:44

ご教示くださったとおり、エラー処理を重点に抑えて確認しました。 1.DB接続処理を行っているclassでtry catchをExceptionでひっかけ、 IllegalStateExceptionをnewでthrow 2.servlet側はexecuteUpdateに対するSQLExceptionと DB接続時(class)側で投げたExceptionでひっかける。 →DB接続時のSQLExceptionとClassNotFoundExceptionをカバー(したつもり) 結果、sendRedirectが通りました。 DB接続時のException(SQLException&ClassNotFoundException)がcatchできていないために、 たまたまredirectが動作しなかったかもしれません。 もしかしたら、外れているかもしれませんが、ありがとうございました。 以降、精進します。 Class(DB接続)側のtry Cacth()↓ //ここからコーディング     DB接続処理 }catch (Exception e) { // TODO 自動生成された catch ブロック //e.printStackTrace(); throw new IllegalStateException(e); }
A-pZ

2016/08/16 13:17

d(・ω・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問