実現したいこと
servlet,modelクラス,DAO,JSPを使って、データベースから受け取った表をJSPで表示させたい。
発生している問題・分からないこと
JSPで実行をした際、URLのアドレスを変えて、JSPで作ったタイトルは合っていたため、上手くページには飛べているとの思うのですが、データベースを表示させることができず、ページが真っ白になってしまいます。DAOクラスで上手くデータベースには繋げていると思うのですが、なぜ表示されないのか原因が分かりません。ちなみにEclipse、データベースはSQL developerを使っています。また、プロジェクト名はMVCrelearnです。
該当のソースコード
package Servlet; import java.io.IOException; import java.util.List; 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 Dao.Dao; import model.User; /** * Servlet implementation class Main */ @WebServlet("/Main") public class Main extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Main() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html; charset=UTF-8"); //Daoクラスの生成 Dao dao = new Dao(); List<User> list = dao.getAllUsers(); for(User user : list) { System.out.println(user.getId()+";"+user.getName()); } //jspにlistを持っていくために、setAttributeメソッドで”list”にいれる request.setAttribute("list",list); request.getRequestDispatcher("index.jsp").forward(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Userクラス(model)
1package model; 2 3public class User { 4 private int id; 5 private String name; 6 7 8 public int getId() { 9 return id; 10 } 11 public void setId(int id) { 12 this.id = id; 13 } 14 public String getName() { 15 return name; 16 } 17 public void setName(String name) { 18 this.name = name; 19 } 20 21 public User(int id, String name) { 22 this.id = id; 23 this.name = name; 24 } 25} 26
DAO
1package Dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9import java.util.List; 10 11import model.User; 12 13//import org.apache.catalina.User; 14 15public class Dao { 16 private static final String URL = "jdbc:mysql://localhost:3306/kensyu"; 17 private static final String USERNAME = "root"; 18 private static final String PASSWORD = "mysql"; 19 20 public Dao() { 21 try { 22 Class.forName("com.mysql.cj.jdbc.Driver"); 23 } catch (ClassNotFoundException e) { 24 // TODO 自動生成された catch ブロック 25 e.printStackTrace(); 26 } 27 } 28//Main.javaの38行目に戻る 29 30 //Main1の39行目からメソッド呼び出し 31 public List<User> getAllUsers() { 32 //リストインスタンス化 33 List<User> users = new ArrayList<>(); 34 //データベースから」getした情報をsqlという変数にいれる 35 String sql = "SELECT * FROM users"; 36 37 try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); 38 //sqlを実行 39 PreparedStatement ps = conn.prepareStatement(sql); 40 //結果をデータベースに引き継ぐため 41 ResultSet rs = ps.executeQuery();) { 42 //一行目があればtrue or faulse二行目があればtrue or faulse 43 while (rs.next()) { 44 int id = rs.getInt("id"); 45 String name = rs.getString("name"); 46 47 User user = new User(id, name); 48 users.add(user); 49 } 50 } catch (SQLException e) { 51 e.printStackTrace(); 52 } 53 54 return users; 55 } 56 57 public User getUserById(int userId) throws SQLException { 58 User user = null; 59 String query = "SELECT * FROM users where id = ?"; 60 61 try (Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD); 62 PreparedStatement ps = conn.prepareStatement(query);){ 63 64 ps.setInt(1, userId); 65 66 try(ResultSet rs = ps.executeQuery()){ 67 if(rs.next()) { 68 int id = rs.getInt("id"); 69 String name = rs.getString("name"); 70 user = new User(id,name); 71 } 72 73 } 74 }catch (SQLException e) { 75 e.printStackTrace(); 76 throw e; 77 } 78 79 return user; 80 } 81} 82
JSP
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" import="java.util.List, model.User"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>結果表示</title> 8</head> 9<body> 10 <% 11 List<User> list = (List<User>) request.getAttribute("list"); 12 for(User user : list){ 13 out.println(user.getId()+":"+ user.getName() + "<br>"); 14 } 15 %> 16</body> 17</html> 18 19
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
JSPを実行すると、
タイプ 例外報告
メッセージ [index.jsp] の処理中に行番号 [12] で例外が発生しました。
説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。
例外
org.apache.jasper.JasperException: [index.jsp] の処理中に行番号 [12] で例外が発生しました。
9: <body>
10: <%
11: List<User> list = (List<User>) request.getAttribute("list");
12: for(User user : list){
13: out.println(user.getId()+":"+ user.getName() + "<br>");
14: }
15: %>
と表示される画面に飛んでしまうため、そこからURLのアドレスをhttp://localhost:8080/MVCrelearn/Main
と変更したら上手くページには飛べたと思うが、画面表示は真っ白で何も書かれていない状態になる。
また、SQL developerの方でusersテーブルが作られているかも確認したところ、ちゃんとテーブルも作成されていた。
補足
特になし
あなたの回答
tips
プレビュー