プログラミング初心者です。
Javaサーブレットを使って、postgreSQLのテーブルに入っているデータ一覧を表示するプログラムを作りました。
ローカル環境では動くのですが、herokuにデプロイするとエラーが発生してうまく動きません。
ネット上で色々と調べてみましたが、どうしても分からなかったので、質問させて頂きました。
解決方法について、何卒アドバイスよろしくお願い致します。
【herokuにデプロイしたjavaサーブレットの起動画面】
【「データベースの中身を表示ボタン」を押すと起こるエラー画面】500エラー
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.getSex()%></td> </tr> <% } // endfor %> </tbody> </table> </body> </html>
package database; import java.io.Serializable; public class UserBean implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private int sex; 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 int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } }
package database; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; 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:postgres:// ●●●●"; 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 文を発行 Statement stmt = conn.createStatement(); String sql = "SELECT * FROM sample2"; 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.setSex(rs.getInt("sex")); // データを保存した bean を beanList に追加 beanList.add(bean); } rs.close(); stmt.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); } }
あなたの回答
tips
プレビュー