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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

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

Q&A

解決済

2回答

5218閲覧

JSPでDBの内容をブラウザに表示させる

kitten

総合スコア25

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

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

0グッド

0クリップ

投稿2019/02/18 05:49

実現したいこと

JSPからDBにアクセスし、その結果をブラウザにリスト表示させる。
###現段階で出来ていること

EclipseでJavaを書き、DBで作ったテーブルから
内容を持ってきて表示させることはできました。
イメージ説明

JAVA

1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.ResultSet; 4import java.sql.ResultSetMetaData; 5import java.sql.Statement; 6import java.util.ArrayList; 7import java.util.List; 8 9public class Main { 10 11 public static void main(String[] args) throws Exception { 12 Connection connection = null; 13 Statement statement = null; 14 ResultSet resultSet = null; 15 16 try { 17 //----------------- 18 // 接続 19 //----------------- 20 connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/testdb", // "jdbc:postgresql://[場所(Domain)]:[ポート番号]/[DB名]" 21 "postgres", // ログインロール 22 "takahashi"); // パスワード 23 statement = connection.createStatement(); 24 25 //----------------- 26 // SQLの発行 27 //----------------- 28 //ユーザー情報のテーブル 29 resultSet = statement.executeQuery("SELECT * FROM member"); 30 31 //----------------- 32 // 値の取得 33 //----------------- 34 // フィールド一覧を取得 35 List<String> fields = new ArrayList<String>(); 36 ResultSetMetaData rsmd = resultSet.getMetaData(); 37 for (int i = 1; i <= rsmd.getColumnCount(); i++) { 38 fields.add(rsmd.getColumnName(i)); 39 } 40 41 //結果の出力 42 int rowCount = 0; 43 while (resultSet.next()) { 44 rowCount++; 45 46 System.out.println("---------------------------------------------------"); 47 System.out.println("--- Rows:" + rowCount); 48 System.out.println("---------------------------------------------------"); 49 50 //値は、「resultSet.getString(<フィールド名>)」で取得する。 51 for (String field : fields) { 52 System.out.println(field + ":" + resultSet.getString(field)); 53 } 54 } 55 56 57 } finally { 58 //接続を切断する 59 if (resultSet != null) { 60 resultSet.close(); 61 } 62 if (statement != null) { 63 statement.close(); 64 } 65 if (connection != null) { 66 connection.close(); 67 } 68 } 69 } 70 71}

続いてこちらのサイトを参考に、まず上記のMain.javaをコンパイルし
次も同様に参考にしたソースコードに少し手を加えて
以下のようなJSPファイルを作り保存しました。

JSP

1<%@ page import="java.sql.* atmarkit.Main" 2 contentType="text/html; charset=euc-jp" %> 3<% 4// 内容: データベースにアクセスする 5 6// Main のインスタンスを生成する 7Main db = new Main(); 8 9// データベースへのアクセス 10db.open(); 11 12// メンバーを取得 13ResultSet rs = db.getResultSet("select * from member"); 14 15// メンバー一覧表示用のテーブル 16String tableHTML = "<table border=1>"; 17tableHTML += "<tr bgcolor=\"000080\"><td><font color=\"white\">メンバーID</font></td>" 18 + "<td><font color=\"white\">名前</font></td>" 19 + "<td><font color=\"white\">カナ</font></td>"; 20 21// 取得された各結果に対しての処理 22while(rs.next()) { 23 24 int id = rs.getInt("member_id"); // メンバーIDを取得 25 String name = rs.getString("name"); // メンバー名を取得 26 String kana = rs.getString("kana"); // メンバー名(カナ)を取得 27 28 // 文字コードを EUC_JP からUnicode へ変換 29 name = new String(name.getBytes("8859_1"), "EUC_JP"); 30 kana = new String(kana.getBytes("8859_1"), "EUC_JP"); 31 32 // テーブル用HTMLを作成 33 tableHTML += "<tr><td align=\"right\">" + id + "</td>" 34 + "<td>" + name + "</td><td>" + kana + "</td></tr>"; 35} 36 37tableHTML += "</table>"; 38 39// データベースへのコネクションを閉じる 40db.close(); 41 42%> 43<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 44<html> 45<head><title>データベースへのアクセス</title></head> 46<body> 47<p>-- データベースへのアクセス --</p> 48<p> 49<b>メンバーの一覧</b><br> 50<%= tableHTML %> 51</p> 52</body> 53</html>

そして保存したファイルにhttp://localhost:8080/examples/10-1.jspといった感じで
アクセスすると下記のようなエラーが表示されました。

The method open() is undefined for the type等で検索をしてみましたが
参考になりそうなサイトは見つかりませんでした。

###エラー内容

Error

1HTTPステータス 500 – Internal Server Error 2タイプ 例外報告 3 4メッセージ JSPのクラスをコンパイルできません: 5 6説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 7 8例外 9 10org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 11 12JSPファイル: [/10-1.jsp] の中の[10]行目でエラーが発生しました 13The method open() is undefined for the type Main 147: Main db = new Main(); 158: 169: // データベースへのアクセス 1710: db.open(); 1811: 1912: // メンバーを取得 2013: ResultSet rs = db.getResultSet("select * from member"); 21 22 23JSPファイル: [/10-1.jsp] の中の[13]行目でエラーが発生しました 24The method getResultSet(String) is undefined for the type Main 2510: db.open(); 2611: 2712: // メンバーを取得 2813: ResultSet rs = db.getResultSet("select * from member"); 2914: 3015: // メンバー一覧表示用のテーブル 3116: String tableHTML = "<table border=1>"; 32 33 34JSPファイル: [/10-1.jsp] の中の[40]行目でエラーが発生しました 35The method close() is undefined for the type Main 3637: tableHTML += "</table>"; 3738: 3839: // データベースへのコネクションを閉じる 3940: db.close(); 4041: 4142: %> 4243: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 43 44 45Stacktrace: 46 org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) 47 org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213) 48 org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:473) 49 org.apache.jasper.compiler.Compiler.compile(Compiler.java:392) 50 org.apache.jasper.compiler.Compiler.compile(Compiler.java:362) 51 org.apache.jasper.compiler.Compiler.compile(Compiler.java:346) 52 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603) 53 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) 54 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) 55 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) 56 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 57 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 58

不足内容等あればご指摘ください。
ご教授のほどよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/02/18 05:54

サーブレットは使わないのでしょうか? 表現と次元の違いですが、「JSPからDBにアクセス」ではなく 実体は「JavaからDBに接続し取得した情報をjspに受け渡す(というか画面出力する)」ということになります。 もし本当に「jspからDB」であればAjax通してJava(というかサーブレット)実行することになります。 結局、どうしたいのでしょうか?
azuapricot

2019/02/18 06:02

インスタンス生成とかJSPでやってますがこれJavaでやったほうがよいのでは? 私が無知なせいかもしれませんが、jspでこんなコード書いてるの見たことがありません。 mts10806さんが記述してくださっているように、 JavaでDBから受け取った値を成形して、jspに渡してjspはそれを表示するだけ、という使い方の方が色々使いまわせそうかなとは思いますが。
azuapricot

2019/02/18 06:03

あ~・・・参考サイトでjspでやってるんですね・・・・ 2001年11月02日 00時00分 公開 ↑ この記事2001年のやつなので・・・もっと最新の・・・情報を・・・取り入れて・・・ください・・・
kitten

2019/02/18 06:21

mts10806さんazuapricotさんご回答ありがとうございます。 説明がうまくできておらずすみません。 お二方がおっしゃる通り「JavaからDBに接続し取得した内容をjspに渡す」 ということをやりたいと考えています。 JavaからDBに接続、取得の部分はできていると思うのですが そこから先がどのようにしたら良いのか分かりません。
azuapricot

2019/02/18 06:36

「Servlet jsp 値受け渡し」でぐぐってみると良いかもしれませんね
m.ts10806

2019/02/18 06:48

ひとまず回答しています。 euc-jpからは今すぐ脱却しましょう。
guest

回答2

0

JSPもコンパイルされて動くので、結局できることはサーブレットとほぼ同じですが

そもそも、エラーメッセージで言われている通り、Mainクラスにopenメソッドとかcloseメソッドが無いので、呼び出せていないですね。

JSPでやりたいなら、Mainクラスにメソッドを追加すればよいと思います。

投稿2019/02/18 07:29

kabao

総合スコア648

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

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

0

ベストアンサー

過去質問が参考になるかもしれませんが、
Webであればサーブレットで作り直しするのが一番簡単で簡潔です。

投稿2019/02/18 06:26

編集2019/02/18 06:29
m.ts10806

総合スコア80850

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

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

kitten

2019/02/18 07:28

もう少し勉強してそれでも分からなければ また戻ってこようかと思います。 ありがとうございました。
m.ts10806

2019/02/18 07:30

私が回答に記載した過去質問は参考にされましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問