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

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

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

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

Java

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

servlet

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

HTML

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

Q&A

解決済

1回答

1243閲覧

HTMLからJSPに問題なく遷移はするけどInsertが反映されない

sad

総合スコア16

JSP

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

Java

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

servlet

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

HTML

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

0グッド

0クリップ

投稿2020/07/30 06:59

前提・実現したいこと

データベースに名前と年齢を登録する・データベースに登録されているデータを一覧で表示する、というプログラムを練習しています。

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

HTMLからServlet,Daoクラス,getter,setter,jspと特にプログラムにエラーは出ないのですが、テーブルには情報が入っておらず又、一覧も表示されず真っ白な画面が映るばかりです。
何が原因か調べてもいまいちわからず、行き詰っています。
知恵をお貸しいただけないでしょうか。

該当のソースコード

Servlet

1import java.io.IOException; 2import java.util.ArrayList; 3 4import javax.servlet.RequestDispatcher; 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11import shcooList.ListDAO; 12import shcooList.ListGS; 13 14@WebServlet("/ListServlet") 15public class ListServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 protected void doPost(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException { 20 //名前と年齢の値をString型変数に代入 21 String name = request.getParameter("name"); 22 String age = request.getParameter("age"); 23 24 //DAOクラスをインスタンス化 25 ListDAO listdao = new ListDAO(); 26 //DAOクラスのsetListメソッドに引数を与え処理させる 27 listdao.setList(name, age); 28 29 RequestDispatcher rd = request.getRequestDispatcher("ListJSP.jsp"); 30 rd.forward(request, response); 31 } 32 33 protected void doGet(HttpServletRequest request, HttpServletResponse response) 34 throws ServletException, IOException { 35 ListDAO listdao = new ListDAO(); 36 ArrayList<ListGS> list = listdao.getList(); 37 request.setAttribute("list", list); 38 39 RequestDispatcher rd = request.getRequestDispatcher("ListOut.jsp"); 40 rd.forward(request, response); 41 42 } 43 44} 45

DAO

1 2package shcooList; 3 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9import java.util.ArrayList; 10 11public class ListDAO { 12 //接続設定 13 private Connection con = null; 14 private PreparedStatement ps = null; 15 private ResultSet rs = null; 16 17 //Servletで得た引数をもとに処理するメソッド 18 public void setList(String name, String age) { 19 try { 20 //データベースに接続 21 Class.forName("com.mysql.cj.jdbc.Driver"); 22 23 String url = "jdbc:mysql://localhost/shcoowork"; 24 String user = "root"; 25 String password = "password"; 26 27 con = DriverManager.getConnection(url, user, password); 28 29 //SQL文を変数sqlに入れる 30 String sql = "INSERT INTO worklist(name,age) VALUES(?,?)"; 31 32 //SQL文の解析 33 ps = con.prepareStatement(sql); 34 35 //プレースホルダの値を入れる 36 ps.setString(1, name); 37 ps.setInt(2, Integer.parseInt(age)); 38 //↑を反映させる 39 ps.executeUpdate(); 40 41 } catch (ClassNotFoundException e) { 42 e.printStackTrace(); 43 } catch (SQLException e) { 44 e.printStackTrace(); 45 } finally { 46 try { 47 if (con != null) { 48 con.close(); 49 } 50 if (ps != null) { 51 ps.close(); 52 } 53 if (rs != null) { 54 rs.close(); 55 } 56 } catch (Exception e) { 57 e.printStackTrace(); 58 } 59 60 } 61 } 62 63 public ArrayList<ListGS> getList() { 64 65 ArrayList<ListGS> list = new ArrayList<ListGS>(); 66 try { 67 Class.forName("com.mysql.cj.jdbc.Driver"); 68 69 String url = "jdbc:mysql://localhost/shcoowork"; 70 String user = "root"; 71 String password = "password"; 72 73 con = DriverManager.getConnection(url, user, password); 74 75 String sql = "SELECT * FROM worklist"; 76 ps = con.prepareStatement(sql); 77 rs = ps.executeQuery(); 78 79 while(rs.next()) { 80 String name = rs.getString("name"); 81 int age = rs.getInt("age"); 82 ListGS List = new ListGS(name,age); 83 list.add(List); 84 } 85 86 } catch (ClassNotFoundException e) { 87 e.printStackTrace(); 88 } catch (SQLException e) { 89 e.printStackTrace(); 90 } finally { 91 try { 92 if (con != null) { 93 con.close(); 94 } 95 if (ps != null) { 96 ps.close(); 97 } 98 if (rs != null) { 99 rs.close(); 100 } 101 } catch (Exception e) { 102 e.printStackTrace(); 103 } 104 } 105 return list; 106 } 107} 108

getter

1package shcooList; 2 3public class ListGS { 4 //変数を宣言 5 private String name; 6 private int age; 7 8 //コンストラクタ 9 public ListGS(String name,int age) { 10 this.name = name; 11 this.age = age; 12 } 13 14 //対応するゲッターとセッター 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 public int getAge() { 22 return age; 23 } 24 public void setAge(int age) { 25 this.age = age; 26 } 27}

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>input</title> 6</head> 7<body> 8 9<p>新規登録</p> 10<form action = "ListServlet" method ="post"> 11<p>氏名:<input type ="text" name ="name"/></p> 12<p>年齢:<input type ="text" name ="age"/></p> 13<input type ="submit" value ="登録"/><br> 14</form> 15 16<p>登録一覧</p> 17<form action = "ListServlet"> 18<input type ="submit" value ="表示"/> 19</form> 20</body> 21</html>

JSP1

1<%@ page import= "shcooList.ListGS" %> 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<title>list</title> 9</head> 10<body> 11一件処理しました 12</body> 13</html>

JSP2

1<%@page import="java.util.ArrayList" %> 2<%@page import="shcooList.ListGS" %> 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>Insert title here</title> 11</head> 12<body> 13<%ArrayList<ListGS> list = (ArrayList<ListGS>)request.getAttribute("list"); %> 14<%for(int i = 0; i < list.size(); i++){ 15 ListGS listgs = list.get(i);%> 16 <%= (i + 1) %>人目<br> 17 <%= listgs.getName() %> 18 <%= listgs.getAge() %> 19 <%} %> 20</body> 21</html>

試したこと

データベース側の問題かと思い、drop database、create databaseをしてテーブルまで新しく作り直しています。が変わりませんでした。
動画を見て細かいミスを直してもみましたが変わりません。

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

windows10 64bit
eclipse IDE
tomcat8.5
mySQL
jdk-14.0.1
を使用しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ご提示のコードを見る限り、特にAUTOCOMMITが設定されていないので、INSERTUPDATEが成功した後にはCOMMITする必要があります。更新処理をした後はConnection#commit()を実行しましょう。失敗した場合はConnection#rollback()です。JDBC関連のサンプルコードなどを別途ご参照ください。

Java

1...DAOのコード部分を引用(適当に省略) 2... 3con = DriverManager.getConnection(url, user, password); 4 5//SQL文を変数sqlに入れる 6String sql = "INSERT INTO worklist(name,age) VALUES(?,?)"; 7 8//SQL文の解析 9ps = con.prepareStatement(sql); 10 11//プレースホルダの値を入れる 12ps.setString(1, name); 13ps.setInt(2, Integer.parseInt(age)); 14//↑を反映させる 15ps.executeUpdate(); 16 17// !!!更新(INSERT)できたのでCOMMIT 18con.commit();

投稿2020/07/30 07:20

dodox86

総合スコア9183

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

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

sad

2020/07/31 00:15

ご回答ありがとうございます。 con.commit();を入れてみたのですが結果が変わらず、、、 デバッグをしてみたところ(やり方を知らなかった)、Class.forNameからcatchまで飛んでおりそもそも繋がっていないということがわかりました。 しかし登録からなにから調べたとおりにやっているつもりで、原因がわかりません。 お手数ですが、なにか原因と思われるお心当たりはございませんか、、、? 自分に聞くべき質問のような気もしますが、、。
dodox86

2020/07/31 00:22

> Class.forNameからcatchまで飛んでおり 接続できていないと言いますか、そもそもJDBCドライバーが使えていないのだと思います。CLASSPATHに登録されていますか?catch節で例外の内容をe.printStackTrace(); で出力していますよね。何の例外で、どのような出力になっていますか?e.printStackTrace()で情報が多すぎれば、e.getMessage()でもある程度の情報が得られるはずですので確認してください。
dodox86

2020/07/31 00:59

サーブレットコンテナであるtomcatでJDBCドライバーが使えない(=接続できない)問題については当サイトでも結構質問回答が挙がっているようです。(関連するもので私も回答したことがあります) 「tomcat JDBC」,「サーブレット JDBC」などで検索してみてください。MySQL用であることにご注意ください。
sad

2020/07/31 01:03

新しく作ったプロジェクトでクラスパスを指定していませんでした、、、申し訳ございません。無事繋がりました。 と、今度はexecuteUpdate()とexecuteQuery()でSQLExeptionが発生しています。自身の勉強不足を痛感しております、、何度もご回答、ありがとうございます。
dodox86

2020/07/31 01:08

SQLは合っているはずなのにエラー、そんな場合ありがちなのが、データベースシステムにはログインできているけど、対象としているデータベース(JDBC接続文字列でいう、"shcoowork"の部分)が間違っている、テーブルが無い、ですね。
dodox86

2020/07/31 01:09

Exceptionの内容を良く見れば分かるはずなので確認してみてください。
sad

2020/07/31 01:18

SQL文で指定する場所をinsert into <テーブル名>ではなく <データベース名>.<テーブル名>とすることでうまくいきました!ご指摘の”テーブルが無い”でそんなはずは、、と閃きました。ありがとうございます!あとは適当に作ったJSPの編集だけなので何とかなりそうです。助かりました(また何かありましたら助言お願いいたします)!
dodox86

2020/07/31 01:20

解決、進展できてよかったです。引き続きがんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問