データベースの全レコードを取得しjsp上で表示したい
解決したいこと
データベースの全レコードを取得しjsp上で表示したい
サーブレットJSPで https://github.com/tatsu-1234/employees
と同じ画面イメージのWebアプリをつくっています。データーベースの全レコードを取得しjsp上で表示したいので解決方法をご教授下さい。
発生している問題・エラー
サーブレットクラスでデータが取得できていないためBOもしくはDAOでミスがある
出ているエラーメッセージ
特になし
該当するソースコード
MainServlet.java
package servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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 model.Account;
import model.MainLogic;
@WebServlet("/MainServlet")
public class MainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
List<Account> account =new ArrayList<>();
MainLogic bo = new MainLogic();
account = (List<Account>) bo.execute();
if (account != null) {
ServletContext application = getServletContext();
application.setAttribute("AllData", account);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Main.jsp");
dispatcher.forward(request, response);
} else {
response.sendRedirect("/employee/MainServlet");
}
}
}
MainLogic.java
package model;
import java.util.List;
import dao.MainDAO;
public class MainLogic {
public List<Account> execute() {
MainDAO dao = new MainDAO();
List<Account> account = dao.findAll();
return (List<Account>) account;
}
}
MainDAO.java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Account;
public class MainDAO {
public List<Account> findAll() {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Account account2 = null;
List<Account> account= new ArrayList<Account>();
String sql = "SELECT * FROM employee";
try {
String url = "jdbc:mysql://localhost/system?characterEncoding=UTF-8&serverTimezone=Japan&useSSL=false";
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(url, "root", "pass");
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
String employeeId = rs.getString("employee_id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
String address = rs.getString("address");
String department = rs.getString("department");
account2 = new Account(employeeId, name, age, sex, address, department);
account.add(account2);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return account;
}
}
Main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.List"%>
<%@ page import="model.Account"%>
<%
List<Account> account = (List<Account>) application.getAttribute("AllData");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>社員管理一覧</title>
</head>
<body>
<%
for (Account accountAll : account) {
%>
<p>
<%=accountAll.getEmployeeId()%>
<%=accountAll.getName()%>
<%=accountAll.getAge()%>
<%=accountAll.getSex()%>
<%=accountAll.getAddress()%>
<%=accountAll.getDepartment()%><br>
</p>
<%
}
%>
</body>
</html>
自分で試したこと
スッキリわかるサーブレット&JSP入門やネットでのデータ取得の方法を調べて試したがうまくできなかった。
すでにログイン機能を実装し別のサーブレットクラスからはレコード取得が出来ていたのでデータベース上の問題ではなさそうです。
単純にデータ取得のやり方自体が間違えているとは思いますが、ご覧の通りコードもぐちゃぐちゃの素人ですので詳しくご教授いただきたいです。よろしくお願い致します。追加で必要な情報があればお聞かせください。
0 likes