前提・実現したいこと
データベースに名前と年齢を登録する・データベースに登録されているデータを一覧で表示する、というプログラムを練習しています。
発生している問題・エラーメッセージ
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
を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/31 00:15
2020/07/31 00:22
2020/07/31 00:59
2020/07/31 01:03
2020/07/31 01:08
2020/07/31 01:09
2020/07/31 01:18
2020/07/31 01:20