質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

0回答

659閲覧

Heroku Javaサーブレットを使って、データベース(PostgreSQL)の中身を表示したいです。

kaoru2020

総合スコア0

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2022/02/26 09:58

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>

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/02/26 12:17

>接続まではうまくできているはずですが、 ステップ実行でどこまで想定通りか、データは取得できているか確認して結果を追記してください。 単に404だけだとどこまで想定通りか分かりません。 エラーハンドリングされてるみたいですが、どこかで例外出力されてないかとか。 ただ、例外出力されててもエラーページに飛ばすのではなく出したいページにforwardされてるので、不都合出そうな気もします。jsp側でNullPointerExceptionでそうです。
kaoru2020

2022/02/27 12:10

回答ありがとうございます。 画面遷移はできるようになったのですが、beanListのデータをshow_users.jspで表示できません。 色々調べましたが、どこがおかしいのか分かりません。 アドバイスお願いします。
m.ts10806

2022/02/27 20:01

現状どうなっているのか具体的に記載してください。何をどう調べたのかも記載を。 データがなければ表示できないのは当然かとは思いますが、今は他者がアドバイスできるほどの情報がないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問