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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

2回答

7594閲覧

複数のサーブレットの処理結果をひとつのJSPで表示する方法

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2015/08/13 01:00

編集2015/08/13 02:33

いつもお世話になっております。

MySQLのデータを更新用サーブレット(UpdateServlet)、削除用サーブレット(DeleteServlet)で処理し、
処理後に結果表示用JSP(result.jsp)に遷移し、「更新成功」「更新失敗」「削除成功」といったメッセージを表示するプログラムを作成しています。

現在以下のように作成しているのですが、削除用サーブレットから結果表示JSPに遷移してきたときも、
更新用サーブレットから遷移してきたときだけ表示したい「更新失敗」のメッセージが表示されてしまい困っています。
なお結果表示JSPはひとつだけしか利用してはいけない仕様(設計?)となっています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

/*更新用サーブレット(UpdateServlet)*/ package registration import java.io.IOException; import java.sql.*; import java.util.*; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*MySQLで作成したデータベースを取得する*/ public class UpdateDateServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ String driverName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localHost/try_DB"; String user = "work_user"; String pass = "work_password"; //MySQLに接続 Connection con = null; try { //JDBCドライバのロード Class.forName(driverName).newInstance(); con = DriverManager.getConnection(url,user,pass); //他JSPのフォームから送られた情報を取得 String updateItemWord = request.getParameter("updateData"); //更新したい項目のIDを他JSPから取得 String updateItemId = request.getParameter("updateItemId"); // item_idをint型に設定しているのでint型にキャスト int newUpdateItemId = Integer.parseInt(updateItemId); //実行したいSQL文を記述、変数updateSqlに代入 String updateSql = "UPDATE try_table SET item_word=? WHERE item_id=?"; //SQL文を実行準備 PreparedStatement preStmt1 = con.prepareStatement(updateSql); //SQL文の「?」に値を代入 preStmt1.setString(1, updateItemWord); preStmt1.setInt(2, newUpdateItemId); //サーブレットコンテキストを取得 ServletContext sc = getServletContext(); //SQLの更新終了後に遷移するページを指定 String nextPage = "/WEB-INF/result.jsp"; //フォーム内に文字が入力されている場合のみSQL文にて更新を実行 if(updateItemWord == null || updateItemWord.equals("")){ //フォームに文字が未入力の場合の遷移先 sc.getRequestDispatcher(nextPage).forward(request, response); }else { nextPage = "/WEB-INF/result.jsp"; sc.getRequestDispatcher(nextPage).forward(request, response); //SQL文を実行 int num = preStmt1.executeUpdate(); } //接続を閉じる preStmt1.close(); con.close(); }catch (ClassNotFoundException e){ e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); } } }

(削除用サーブレットは更新用サーブレットをSQL文を改変しただけで基本は同じなので割愛します)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

/*結果表示画面(result.jsp)*/ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>編集結果画面</title> </head> <body> <% /* 他JSPのフォームから送られた情報を取得 */ String detailMsg = request.getParameter("updateData"); /* 入力チェック結果に応じて更新メッセージ表示 */ if( detailMsg == null || detailMsg.equals("") ){ out.println("フォームに文字が入力されていません"); }else if(detailMsg != null) { out.println("データの書き換えに成功しました"); } %> <br> <% /* 削除ボタン押下後のメッセージ表示 */ out.println("データ削除成功"); %> </body> </html>

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

まだ削除成功メッセージ表示時の条件文を記述していないので、
更新実行時に削除成功メッセージが表示されるのは理解できるのですが、
削除実行時にも更新メッセージが表示されるのが全く理解できません。

どのように修正すれば解決できるのか、
アドバイスをいただけませんでしょうか。
よろしくお願いいたします。

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

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

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

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

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

ikuwow

2015/08/13 01:13

コードはMarkdown記法の```で囲んでシンタックスハイライトしていただけると見やすくなります。
退会済みユーザー

退会済みユーザー

2015/08/13 01:38

アドバイスいただき、誠にありがとうございます。 Markdown記法を用いて修正させていただきました。
guest

回答2

0

私はこの手のことをするときはEL式を使いますね。
EL式について調べてみるのもいいかもしれませんよ。

投稿2015/08/13 02:06

orange

総合スコア17

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

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

退会済みユーザー

退会済みユーザー

2015/08/13 05:22

ご回答ありがとうございます。 EL式の存在を初めて知り、調べさせていただきました。 こういうケースでも使えるのですね。勉強になりました。 今後はEL式も使えるように学習します!
guest

0

ベストアンサー

表示される更新メッセージとは

if( detailMsg == null || detailMsg.equals("") ){ out.println("フォームに文字が入力されていません"); }else if(detailMsg != null) { out.println("データの書き換えに成功しました"); }

この部分のメッセージの事でしょうか?
であれば、条件式を見る限り必ず何らかのメッセージが表示される実装になっています。

detailMsgがnullか空の場合は「フォームに文字が入力されていません」が
そうでない場合(detailMsgに何らかの文字列が入っている場合)は「データの書き換えに成功しました」
が表示されます。

呼び出したServletに応じて、リクエストパラメータにStatusを持たせて
Statusが"update"なら更新用メッセージを、そうでなければ削除用メッセージを表示するよう
制御するようにしてみてください。

投稿2015/08/13 01:25

MakotoMiyazaki

総合スコア297

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

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

退会済みユーザー

退会済みユーザー

2015/08/13 05:20

ご回答ありがとうございました。 サーブレット内では、request.setAttributeを利用して、共通のタグ(key)を設定し、更新成功、更新失敗、削除成功、それぞれのメッセージを値(value)として設定。 JSPに設置したrequest.getAttributeで呼び出すことでうまくいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問