javaサーブレットを使ってherokuのデータベースのデータを表示したいです。
接続まではうまくできているはずですが、画面遷移が上手くいきません。
改善方法について、何卒、アドバイスお願いいたします。
使用言語:Java
データベース:PostgreSQL
Main.java
package database; 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 java.util.ArrayList; 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; @WebServlet("/main") public class Main extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = null; String url = "jdbc:postgresql://●●●●:5432/●●●●"; String user = "●●●●"; String password = "●●●●"; // beanList を生成 ArrayList<UserBean> beanList = new ArrayList<UserBean>(); try { // JDBC ドライバを読み込み Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(url, user, password); // データベースへ SQL 文を発行 // データの出力 String name = request.getParameter("name"); String text = request.getParameter("text"); String sql = "insert into mutter (name, text) values(?,?);"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, name); stmt.setString(2, text); stmt.executeUpdate(); sql = "select * from mutter"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { // bean を生成 UserBean bean = new UserBean(); // SQL リザルトからデータを取得し、bean に保存していく bean.setId(rs.getInt("id")); bean.setName(rs.getString("name")); bean.setText(rs.getString("text")); // データを保存した bean を beanList に追加 beanList.add(bean); } stmt.close(); rs.close(); } catch (ClassNotFoundException e) { // 例外処理 e.printStackTrace(); } catch (SQLException e) { // 例外処理 e.printStackTrace(); } catch (Exception e) { // 例外処理 e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { // 例外処理 e.printStackTrace(); } } // beanList をリクエストにセット request.setAttribute("beanList", beanList); ServletContext context = this.getServletContext(); // フォワード先を指定 RequestDispatcher dispatcher = context.getRequestDispatcher("/database/show_users.jsp"); // フォワード処理 dispatcher.forward(request, response); } }
UserBean.java
package database; import java.io.Serializable; public class UserBean implements Serializable { private static final long serialVersionUID = 1L; int id; String name; String text; UserBean() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getText() { return text; } public void setText(String text) { this.text = text; } }
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>データベース接続テスト</title> </head> <body> <h1>データベース接続テストを行います</h1> <form action="main" method="get"> <input type="submit" value="データベースの中身を表示"> </form> </body> </html>
show_users.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList"%> <%@ page import="database.UserBean"%> <% ArrayList<UserBean> beanList = (ArrayList<UserBean>) request.getAttribute("beanList"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ユーザ表示</title> </head> <body> <table> <tbody> <tr> <th>ID</th> <th>名前</th> <th>コメント</th> </tr> <% for (UserBean bean : beanList) { %> <tr> <td><%=bean.getId()%></td> <td><%=bean.getName()%></td> <td><%=bean.getText()%></td> </tr> <% } // endfor %> </tbody> </table> </body> </html>
あなたの回答
tips
プレビュー