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

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

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

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

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

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

Q&A

解決済

1回答

1297閲覧

1・jspからservletに値が渡っていない。

koske

総合スコア1

JSP

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

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

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

0グッド

0クリップ

投稿2021/09/20 05:13

前提・実現したいこと

質問を連投し、失礼します。
現在自己学習でjavaのwebアプリケーションを作成しています。
ツールはeclipse, mariaDBを使用しています。

アプリケーションの内容は、体調不良の方を対象に症状・体温をプルダウンで選択してもらい(Sym_fevテーブルにデータ格納)、
その組み合わせに合致したレコードを一覧画面にSymptomテーブルから抽出する(抽出するデータは症状カラム(symptom)・体温カラム(fever_degree)のデータに加え、対処法(handle_information)カラムのデータも取得)
といった内容です。

今回は症状(symptom_name)と体温(fever_degree)を追加画面で登録する際の不具合について質問をさせて頂きます。
(追加画面の「追加」ボタンをクリックすると、
トップページに遷移するため「追加完了」ページはございません。)

発生している問題・エラーメッセージ

1・Sym_fevAdd.jsp(追加画面)で登録した症状(symptom_name)と体温(fever_degree)データがSymptomInsertServlet.javaに渡されていない。(System.out.printlnで確認済み)
また、sym_fev(テーブル)のsymptom_nameとfever_degreeにはnot null制約をかけているが、servletに渡されていないにも関わらずエラーなくテーブル内に追加されている。(idは増えている。symptom_nameとfever_degreeは空。)

コンソール内

SymFevInfoBean [informationId=19, symptomName=, feverDegree=]
SymptomInsertServlet.doPost()
【症状情報追加】
symptom_name=
fever_degree=
INSERT INTO sym_fev(
symptom_name,
fever_degree,
reg_datetime,
upd_datetime
)
VALUES(
?,
?,
now(),
now()
)
テスト1
テスト2
テスト3

該当のソースコード

SymptomInsertServlet.java (症状データを追加するservlet) package webapp.SymptomManagement; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import web.basic.symFev.beans.SymFevInfoBean; /** * Servlet implementation class SalesInsertServlet */ @WebServlet("/SymptomInsertServlet") public class SymptomInsertServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SymptomInsertServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("SymptomInsertServlet.doGet()"); System.out.println("【症状追加画面初期表示】"); // ■共通情報(症状情報)を取得 // ※今回はsym_fevテーブルのsymptom_name、fever_degreeにデータを追加する SymFevInfoBean symFevInfo = new SymFevInfoBean(); // ■DB接続 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; // 接続情報 String url="jdbc:mariadb://localhost:3306/condition_management"; String user="kosuke"; String password="kosuke1105"; try { // 接続処理 conn = DriverManager.getConnection(url, user, password); // ■検索処理実行 // SQL作成 String sql = "SELECT\r\n" + " sym_fev.information_id,\r\n" + " sym_fev.symptom_name,\r\n" + " sym_fev.fever_degree \r\n" + "FROM\r\n" + " sym_fev"; System.out.println(sql); // SQL準備 ps = conn.prepareStatement(sql); // SQL実行 rs = ps.executeQuery(); // データを読込み、症状情報に設定する System.out.println("■症状情報を設定"); while(rs.next()) { // データ読込 int informationId = rs.getInt("information_id"); String symptomName = rs.getString("symptom_name"); String feverDegree = rs.getString("fever_Degree"); // テスト System.out.println("informationId" + informationId); System.out.println("symptomName" + symptomName); System.out.println("feverDegree" + feverDegree); // 店舗情報(JavaBeans)に設定 symFevInfo.setInformationId(informationId); symFevInfo.setSymptomName(symptomName); symFevInfo.setFeverDegree(feverDegree); System.out.println(symFevInfo); } } catch(SQLException e) { // 接続失敗時の処理 e.printStackTrace(); } finally { try { // ■クローズ処理 // 検索結果 if(rs!=null) { rs.close(); } // SQL文 if(ps!=null) { ps.close(); } // DB接続 if(conn!=null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } // ■表示データ設定 request.setAttribute("symFevInfo", symFevInfo); // ■症状追加画面に遷移 request.getRequestDispatcher("Sym_fevAdd.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("SymptomInsertServlet.doPost()"); System.out.println("【症状情報追加】"); // 【文字化け対応】 request.setCharacterEncoding("UTF-8"); // ■リクエストデータ取得 String symptomName = request.getParameter("symptom_name"); String feverDegree = request.getParameter("fever_degree"); System.out.println("symptom_name="+symptomName); System.out.println("fever_degree="+feverDegree); // ■データInsert処理 // ■DB接続 Connection conn = null; PreparedStatement ps = null; //ResultSet rs = null; // 接続情報 String url="jdbc:mariadb://localhost:3306/condition_management"; String user="〇〇"; String password="〇〇"; try { // 接続処理 conn = DriverManager.getConnection(url, user, password); // ■検索処理実行 // SQL作成 String sql = "INSERT INTO sym_fev(\r\n" + " symptom_name,\r\n" + " fever_degree,\r\n" + " reg_datetime,\r\n" + " upd_datetime\r\n" + ")\r\n" + "VALUES(\r\n" + " ?,\r\n" + " ?,\r\n" + " now(),\r\n" + " now()\r\n" + ")"; System.out.println(sql); // SQL準備 ps = conn.prepareStatement(sql); System.out.println("テスト1"); // パラメータ設定 // 修正点 ps.setString(1, symptomName); // 症状名 ps.setString(2, feverDegree); // 体温 // SQL実行 ps.executeUpdate(); System.out.println("テスト2"); // ■コミット conn.commit(); System.out.println("テスト3"); } catch(SQLException e) { // エラー時の処理 e.printStackTrace(); try { // ロールバック conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { try { // ■クローズ処理 // 検索結果 /** if(rs!=null) { rs.close(); } */ // SQL文 if(ps!=null) { ps.close(); } // DB接続 if(conn!=null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } // ■トップページにリダイレクト response.sendRedirect("TopPage.html"); } } Sym_fevAdd.jsp(追加画面) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>体調管理アプリ</title> </head> <body> <form action="./SymptomInsertServlet" method="post"> <div> <!-- 修正箇所 --> <label for="symptomInfo">症状<input type="hidden" name="symptom_name" value="${symFevInfo.symptomName}"></label> <select name="symptom_name"> <option value="症状">症状</option> <option value="倦怠感">倦怠感</option> <option value="吐き気">吐き気</option> <option value="味覚・嗅覚の消失">味覚・嗅覚の消失</option> <option value="呼吸困難">呼吸困難</option> </select> </div> <div> <!-- <label for="feverDegreeInfo">体温</label> --> <label for="feverDegreeInfo">体温<input type="hidden" name="fever_degree" value="${symFevInfo.feverDegree}"></label> <select name="fever_degree"> <option value="体温">体温</option> <option value="低体温">36.0℃未満</option> <option value="通常体温">36.0 ~ 36.5℃</option> <option value="弱微熱">36.6 ~ 37.0℃</option> <option value="発熱">37.1℃以上</option> </select> </div> <input type="submit" value="追加"> </form> <!-- ↓この書き方はjavaではただ遷移するだけ。 --> <!-- <button onclick="location.href='./TopPage.html'">登録</button> --> <form action="Symptom_list.jsp" method="post"> <input type="submit" value="一覧画面"> </form> <form action="" method="post"> <input type="submit" value="ログアウト"> </form> </body> </html> SymFevInfoBean(sym_fevテーブルの情報) package web.basic.symFev.beans; import java.io.Serializable; public class SymFevInfoBean implements Serializable{ // フィールド private int informationId; private String symptomName; private String feverDegree; // メソッド // 症状番号 public int getInformationId() { return informationId; } public void setInformationId(int informationId) { this.informationId = informationId; } // 症状名 public String getSymptomName() { return symptomName; } public void setSymptomName(String symptomName) { this.symptomName = symptomName; } // 体温情報 public String getFeverDegree() { return feverDegree; } public void setFeverDegree(String feverDegree) { this.feverDegree = feverDegree; } @Override public String toString() { return "SymFevInfoBean [informationId=" + informationId + ", symptomName=" + symptomName + ", feverDegree=" + feverDegree + "]"; } }

試したこと

jsp内のselect nameがservlet内のrequest.getParameter("〇〇"); と違う名前だったため統一
→ 変化なし。

疑問点

データ追加は、追加画面を表示してデータをデータベースに登録することが目的なのですが
その際SymptomInsertServlet.java内にdoGET()は必要なのでしょうか。
doPost()は追加するため必要だと思うのですが、
doGET()はデータベースのデータを取得するときに使うと解釈しているため今回必要なのか疑問です。

もしよろしければご教授頂きたいです。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

バージョン:java11
Tomcat9
xampp control panel v3.3.0
ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2021/09/20 07:50

hiddenとname属性値が同じなのはどういう意図ですか?
m.ts10806

2021/09/20 07:51

あと理解が正確でないので指摘しておくと GETリクエストをdoGetで、POSTリクエストをdoPostで受け取ります。 「適宜」必要なメソッドです。
koske

2021/09/21 00:01

m.ts10806さん、ご回答いただき有難うございます。 doGETとdoPOSTについて理解が正確でなかったため再度学習致します。 有難うございました。
guest

回答1

0

ベストアンサー

JSP

1 <label for="symptomInfo">症状<input type="hidden" name="symptom_name" value="${symFevInfo.symptomName}"></label> 2 <select name="symptom_name"> 3 4///中略 5 <label for="feverDegreeInfo">体温<input type="hidden" name="fever_degree" value="${symFevInfo.feverDegree}"></label> 6 <select name="fever_degree">

symptom_name、fever_degreeとも2つ定義されているので、ただしく取得できないのかと思います。

java

1String symptomName = request.getParameter("symptom_name");

でなく、

java

1String[] symptomNames = request.getParameterValues("symptom_name");

のようにすれば取得可能のはずですが、そもそも名前が重複してるのは想定通りなのでしょうか?

投稿2021/09/20 08:01

momon-ga

総合スコア4826

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

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

koske

2021/09/20 23:57

momon-gaさん、ご回答いただき有難うございます。 「symptom_name、fever_degreeとも2つ定義されているので、ただしく取得できないのかと思います。」 上記の箇所を修正したところ解決いたしました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問