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

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

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

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

Java

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

servlet

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2933閲覧

画面遷移が上手くいかない

Y.Mamoru

総合スコア47

JSP

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

Java

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

servlet

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/16 05:14

〇やりたいこと
アンケートの入力、入力チェック、結果表示までの流れを作っています
1.Change_Updata.jspで項目の入力
2.ChangeServlet.javaで入力チェック
3-1.エラーが無ければresult.jspで「更新できました」と表示
3-2.エラーがあれば、Change_Update.jspに戻って再入力。そのときにどこでエラーが出たのかを表示したい。

1→2は正常に動いている(と思います。)
しかし2のServletを通ったあと、jspファイルに戻ってくるのですが、エラーが表示されません。また入力チェックを通るように打ち込んでもjspファイルに戻ってきてしまいます。

つまり
・エラーメッセージの表示方法
・正常な場合のresult.jspへの遷移方法がわかりません。

以下コードです。

Change_Update

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="Change.DataBase"%> 4<%@ page import="java.lang.*" %> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Change_task</title> 10<link rel="stylesheet" href="${pageContext.request.contextPath}/CSS/Change.css"> 11</head> 12<body> 13<H1>アンケートフォーム</H1> 14 <% DataBase db = new DataBase(); %> 15 <% 16 if(db.getError() != null){ %> 17 18 <p><% out.println(db.getError()); %></p> 19 20 <% 21 }else{ 22 %> 23 <P>以下のアンケートフォームを入力して変更ボタンを押下してください</P> 24 <FORM method="POST" name="question_form" id="form" action="/Change/ChangeServlet"> 25 <Input type="hidden" name="hiddenNO" value=<%= request.getParameter("ankeno") %>> 26 <input type="hidden" name="move" value="update"> 27 <TABLE class="table"> 28 ~中略~ 29 </TABLE> 30 <DIV class="send_div"> 31 <INPUT type="submit" class="send_button" value="変更" > 32 </DIV> 33 </FORM> 34 <FORM> 35 <DIV> 36 <INPUT type="button" class="reset" value="リセット" onClick="location.reload();"> 37 </DIV> 38 </FORM> 39 <% } %> 40</body> 41</html>

servlet

1package Change; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.SQLException; 7import java.sql.Statement; 8 9import javax.servlet.ServletException; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14 15public class ChangeServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 request.setCharacterEncoding("utf-8"); 20 21 //前準備 22 String e; 23 int count = 0; 24 DataBase db = new DataBase(); 25 26 //各データを受け取って、条件に合うのか確かめる 27 //郵便番号 28 String p1 = request.getParameter("post_num1"); 29 String p2 = request.getParameter("post_num2"); 30 if(p1 != null && p1.length() ==3) { //郵便番号1がNullではなくかつ3桁か 31 count++; 32 }else { 33 e = "郵便番号1は3桁の数字で入力してください"; 34 db.setError(e); 35 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 36 } 37 if(p2 != null && p2.length() ==4) { //郵便番号2がNullではなくかつ4桁か 38 count++; 39 }else { 40 e = "郵便番号2は4桁の数字で入力してください"; 41 db.setError(e); 42 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 43 } 44 //住所チェック 45 String address = request.getParameter("address"); 46 if(address != null) { 47 count++; 48 }else { 49 e = "住所を入力してください"; 50 db.setError(e); 51 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 52 } 53 //氏名 54 String name = request.getParameter("name"); 55 if(name != null ) { 56 count++; 57 }else { 58 e = "氏名を入力してください"; 59 db.setError(e); 60 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 61 } 62 //年 63 String year = request.getParameter("year"); 64 if(year != null) { 65 count++; 66 }else { 67 e = "生まれ年を入力してください"; 68 db.setError(e); 69 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 70 } 71 //月 72 String month = request.getParameter("month"); 73 if(month != null && month.length() <= 2 && Integer.parseInt(month) <= 12 && Integer.parseInt(month) >= 1) { 74 count++; 75 }else { 76 e = "生まれ月は1~12で入力してください"; 77 db.setError(e); 78 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 79 } 80 //日 81 String date = request.getParameter("date"); 82 if(date != null && date.length() <= 2 && Integer.parseInt(date) <=31 && Integer.parseInt(date) >=1) { 83 count++; 84 }else { 85 e = "生まれ日は1~31で入力してください"; 86 db.setError(e); 87 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 88 } 89 //血液 90 String blood = request.getParameter("blood"); 91 if(blood != null) { 92 count++; 93 }else { 94 e = "血液型を選択してください"; 95 db.setError(e); 96 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 97 } 98 //意見 99 String opinion = request.getParameter("opinion"); 100 if(opinion != null && opinion.length() <= 200) { 101 count++; 102 }else { 103 e = "ご意見は200文字まで入力できます"; 104 db.setError(e); 105 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 106 } 107 //総合 108 if(count == 10) { 109 //SQL文の準備(すべてのカラムにアンケート内容を入れるので、prepareを使って後からバインドさせる) 110 String sql ="UPDATE Information SET POSTNUM = ? , ADDRESS = ? , BIRTHYEAR = ? , BIRTHMONTH = ? , BIRTHDAY = ? , PHONE1 = ? , PHONE2 = ? , PHONE3 = ? , BLOOD = ? , BREAKFAST = ? , OPINION = ? WHERE NO = ?"; 111 //接続準備 112 Connection conn = null; 113 PreparedStatement smt = null; 114 //更新のコード 115 if(request.getParameter("move") == "update") { 116 //接続開始 117 try { 118 conn = DBManager.getConnection(); 119 //バインド用のSQLを準備 120 smt = conn.prepareStatement(sql); 121 122 //バインド開始 123 smt.setString(1, (request.getParameter("post_num1") + request.getParameter("post_num2"))); 124 smt.setString(2, request.getParameter("address")); 125 smt.setString(3, request.getParameter("year")); 126 smt.setString(4, request.getParameter("month")); 127 smt.setString(5, request.getParameter("date")); 128 smt.setString(6, request.getParameter("phone_num1")); 129 smt.setString(7, request.getParameter("phone_num2")); 130 smt.setString(8, request.getParameter("phone_num3")); 131 smt.setString(9, request.getParameter("blood")); 132 smt.setString(10, request.getParameter("food")); 133 smt.setString(11, request.getParameter("opinion")); 134 smt.setString(12, request.getParameter("hiddenNO")); 135 //実行 136 smt.executeQuery(); 137 138 }catch(SQLException er) { 139 throw new ServletException(er); 140 }finally { 141 if(smt != null) { 142 try {smt.close();}catch(SQLException ignore) {} 143 } 144 if(conn != null) { 145 try {conn.close();}catch(SQLException ignore) {} 146 } 147 } 148 //登録をする場合のコード 149 }else if(request.getParameter("move") == "regist") { 150 //insertさせるNoは、今テーブルに入っている数+1なので、countを求めるSQL 151 String sql2 = "SELECT count(No) FROM Information"; 152 Statement smt2 = null; 153 154 //接続開始 155 try { 156 conn = DBManager.getConnection(); 157 //バインド用のSQLを準備 158 smt = conn.prepareStatement(sql); 159 //count用のSQL準備&実行 160 smt2 = conn.createStatement(); 161 count = smt2.executeUpdate(sql2); 162 163 //バインド開始 164 smt.setInt(1, count+1);//NOやからここより前にcount(No)の値をselectしておかないといけない。それプラス1 165 smt.setString(2, (request.getParameter("post_num1") + request.getParameter("post_num2"))); 166 smt.setString(3, request.getParameter("address")); 167 smt.setString(4, request.getParameter("year")); 168 smt.setString(5, request.getParameter("month")); 169 smt.setString(6, request.getParameter("date")); 170 smt.setString(7, request.getParameter("phone_num1")); 171 smt.setString(8, request.getParameter("phone_num2")); 172 smt.setString(9, request.getParameter("phone_num3")); 173 smt.setString(10, request.getParameter("blood")); 174 smt.setString(11, request.getParameter("food")); 175 smt.setString(12, request.getParameter("opinion")); 176 //実行 177 smt.executeQuery(); 178 179 }catch(SQLException er) { 180 throw new ServletException(er); 181 }finally { 182 if(smt != null) { 183 try {smt.close();}catch(SQLException ignore) {} 184 } 185 if(conn != null) { 186 try {conn.close();}catch(SQLException ignore) {} 187 } 188 } 189 } 190 191 request.getRequestDispatcher("/jsp/result.jsp").forward(request, response); 192 } 193 doGet(request, response); 194 } 195 196} 197

result

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>登録後</title> 8</head> 9<body> 10 11 <p>アンケート情報を更新しました</p> 12 13<a href="Register.jsp">アンケートに戻る</a> 14 15</body> 16</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

JSPのDataBase周りの実装を見ると

html

1<% DataBase db = new DataBase(); %> 2<% 3 if(db.getError() != null){ %> 4 5 <p><% out.println(db.getError()); %></p> 6 7 <%

これは、Javaコードで書くと以下の通りです。

java

1DataBase db = new DataBase(); 2if (db.getError() != null){ 3 ..... 4}

DataBaseインスタンスを取得した直後に getError() で取得しても、メッセージは入っていないでしょう。

サーブレットにてエラーメッセージを格納したものを表示したいのであれば、エラーメッセージ用の名前を決めて(例えば errorMessage)、リクエスト属性へ格納したものを表示すればよいかと。

java

1if(p1 != null && p1.length() ==3) { //郵便番号1がNullではなくかつ3桁か 2 count++; 3} else { 4 request.setAttribute("errorMessage", "郵便番号1は3桁の数字で入力してください"); 5 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 6}

html

1<% 2 String message = (String)request.getAttribute("errorMessage"); 3 if (message != null) { 4.... 5 } 6%>

なお、RequestDispatcherのforwardした後にも処理が書かれていますが、レスポンスの内容をフォワードした後の実装にて、再びforwardしてしまうと、多重にレスポンスを出力することになり実行時例外になります。

サーブレットの途中で処理を止めたいときは、適宜returnで処理を止めなければなりません。
※通常、レスポンス出力の処理はサーブレットの最後に実行するものなので、後続処理はあまり書きません。

java

1if(p1 != null && p1.length() ==3) { //郵便番号1がNullではなくかつ3桁か 2 .... 3} else { 4 request.setAttribute("errorMessage", "郵便番号1は3桁の数字で入力してください"); 5 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 6 return; 7}

投稿2020/09/16 07:10

A-pZ

総合スコア12011

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

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

Y.Mamoru

2020/09/16 09:43

ほんまに毎回ありがとうございます! 仰っていただいた箇所をもとに他もいじると思っていたものができました! いつも助かりますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問