JSP-Servlet-JavaBeansを使った場合のデータベースアクセスについて

このQ&Aのポイント
  • JSP-Servlet-JavaBeansを使用したデータベースアクセスについてのアドバイス
  • JavaBeansを使用した業務ロジックの作成方法とデータベース接続の設定について
  • JSP-Servlet-JavaBeansを使った場合のデータベース接続処理とコネクションプールの実現方法
回答を見る
  • ベストアンサー

JSP-Servlet-JavaBeansを使った場合のデータベースアクセスについて

JSP-Servlet-JavaBeansで開発するときに、 業務ロジックはModelであるJavaBeansの中で作成すると 思います。 様々なサンプルを見ると、そのJavaBeansの中で データベースへのコネクションを作成し、SQL文を実行して 値を取得しています。(DBへの接続文字列や接続ユーザ、パスワード等も固定になっています) しかし、DBへの接続文字列(特にサーバ名)や 接続ユーザ・パスワードなどは、普通Servlet初期パラメータから取得して設定するべきだと思います。 Servletだけで開発しているときは、 DBManagerのようなクラスを作成し、コンストラクタの引数に接続文字列等を渡していたのですが、 JavaBeansの場合はどうなるのでしょう? (同じように引数付きのコンストラクタを作成するのでしょうか??) また、今まではServletのini()で使ってコネクションをプール実現していたのですが、JSP-Servlet-JavaBeansを使うと、どのように処理を分ければよいのでしょうか? 長文で大変申し訳ありませんが、ぜひ良きアドバイスを お願いします。

  • ZIGEN
  • お礼率86% (13/15)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • freshjive
  • ベストアンサー率43% (14/32)
回答No.1

これまでと同じようにコネクションプーリングを実装すればいいので はないでしょうか?ただ、そこから取得したコネクションをJavaBeans に渡す仕組みを考える必要があると思います。 ビジネスロジックを実装するJavaBeansのメソッドにコネクションを パラメータとして渡したり、コネクションのフィールドを用意すれば いいんじゃないでしょうか? おそらくAPサーバは使用せず、コネクションプーリングを作り こんでいると思います。私はAPサーバを使用しないケースは 経験していないのですが、Servletのinit()でコネクションを プールするというのは初めて聞きましたし興味があります。 問題はないのかどうかという点も気になりますが。

ZIGEN
質問者

お礼

回答ありがとうございます。 やはり、Servletで作成しておいた、コネクションを JavaBeansに渡すものなのですね??? ちなみに、Servletのinit()でコネクションプールを 作成している理由は、doPost()やdoGet()で 毎回コネクションを作成するよりも、 init()でコネクションをプールすることで、コネクション 作成時の処理コストを削減するためです。 #doPost()やdoGet()ごとにコネクションプールしても 全く意味がありませんしね。 Servletだけを使ったWebアプリを開発する場合は、 普通だと思っているのですが・・・・・

関連するQ&A

  • JavaBeans,JSP, Servlet(MVC)のみを使った開発って本当に業務で行われているの?

    こんにちは、私がWeb技術を勉強するときによく使う本として、Sun教科書Web Component Developer(試験310-080の対策本なのですが、おそらく現在売っているものより1バージョン古いです)という本があります。 この本には,webのMVCアーキテクチャは以下のように 設計されると記載されています。 サーブレット:Controller(システム処理の制御) JSP :View (画面) JavaBeans :Model (ビジネスロジック) しかし、実際の業務でビジネスロジックがJavaBeansのみで行われているシステムはあるのでしょうか?JavaBeansの定義としては、getXXXやsetXXXアクセス、またコンストラクタが引数をもたずpublicなどと ありますが、これを無視した普通のJavaクラスもビジネスロジックに使われているのではないでしょうか? EJB, Strutsを使わない開発環境でという条件付で、どなたか業務経験のある方、この疑問に答えていただけないでしょうか?

  • 初めての、Servlet→JSP

    今、DB検索Servletを開発しています。 そこで、コンパイル時のエラーについて、いきずまったので少し質問 させてください。 内容は、Servletで、コネクションをDBに接続し、検索。 JSPで表示といった、システムです。 public class goo extends HttpServlet { public void init() throws ServletException { /* DB接続処理 */ } public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try{ Statement statement = con.createStatement(); String query ="SELECT * FROM test"; ResultSet ResObj = statement.executeQuery(query); ResObj.close(); statement.close(); } catch(Exception ex){ ex.print.StackTrace(); } try{ req.setAttribute("ResObj",ResObj); getServletConfig(). getServletContext(). getRequestDispatcher("kekka.jsp"); forward(req,res); } catch(Exception ex){ ex.print.StackTrace(); } } } で、コンパイルのエラーが、 定義されてない変数、クラス、またはパッケージ名: ResObj req.setAttribute("ResObj",ResObj);                 ^ と、出ます。 定義とは、 ResultSet ResObj = statement.executeQuery(query); の内容ではないのですか? それとも、他で定義しないとダメなんですか? ご指摘、宜しくお願いします。

    • ベストアンサー
    • Java
  • JSPとServletの連携

    JSPからServletを呼ぶ方法がわかりません。 例えばログインの一連の動きとしては、 一番初めにログイン画面があって、 それからユーザIDとパスワードが一致するか判断するためにservletを呼んでクラスで処理して、 一致したらメニュー画面、一致しなかったらもう一度ログイン画面に遷移するんですよね? 一番初めにJSPからservletを呼ぶにはどこでファイル名を指定したらいいのでしょうか?

    • ベストアンサー
    • Java
  • EclipseでServlet/JSP

    エクリプス2.0.2を使っていますが、Servlet/JSPを使った開発でひとつ疑問があります。 ちなみに、 http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html で各種設定いたしました。 JSPを作成するのは問題ないのですが、 Servletのクラスを作るときに、新規→クラスで、ソースフォルダがプロジェクト名か、j2srcのどちらかしか選択できません。コンパイルして、そのクラスをclassesに移動してやりましたが、それを実行するときに、 http://localhost:8080/myWeb/servlet/Hello とすると、Helloクラスをダウンロードするような形になってしまうのです。URLはなんパターンか変えてやってみましたが、できません・・・。 どうすればうまくサーブレットを作って実行できるのでしょうか? 宜しくお願いします。

  • JSPファイルからデータベースにアクセスできない

    以下のサイトを参考にして、JSPからデータベースにアクセスして ブラウザに表示させようとしています。 http://www.atmarkit.co.jp/fjava/rensai/jsp10/jsp10.html 実行環境は以下です OS: Vine Linux 4.1 PostgreSQL: version 8.2.5 Tomcat: version 5.5.25 Java: Java 2 SDK, standard Edition, version 1.5.0_13 ブラウザからjspファイルにアクセスすると次のエラーがでてきます ーーー エラー文 ーーー HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: Exception in JSP: /dbaccess.jsp:16 13: db.open(); 14: 15: // メンバーを取得 16: ResultSet rs = db.getResultSet("select * from member"); 17: 18: // メンバー一覧表示用のテーブル 19: String tableHTML = "<table border=1>"; Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 原因 javax.servlet.ServletException: ERROR: relation "member" does not exist (略) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 原因 org.postgresql.util.PSQLException: ERROR: relation "member" does not exist org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548) (略) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) ーーー ここまで ーーー 自分が行った手順なんですが、 1、postgresユーザで'sampledb'というdbを作り、そのなかにmemberという テーブルを作成し、select * from member; を実行したところテーブル はありました。 2、MyDBAccess.javaは参考サイトとほぼ同じです。 コンストラクタの設定のところを以下のようにしました。 ーーーーーーーーーーーー public MyDBAccess() { driver = "org.postgresql.Driver"; url = "jdbc:postgresql://localhost:5432/sampledb; user = "postgres"; password = "********"; } ーーーーーーーーーーーー コンパイルも通ったので TOMCAT_HOME/webapps/####/WEB-INF/classes/atmarkitに クラスファイルを置きました。 3、jspファイルはdbaccess.jspという名前でそのまま使いました。 TOMCAT_HOME/webapps/####/dbaccess.jsp 4、/usr/local/pgsql/data/postgresql.confの #listen_addresses = 'localhost' を listen_addresses = '*' に書き換え、その後に $ pg_ctl reload としました。 5、ブラウザから "http://localhost:8080/####/dbaccess.jsp" にアクセスするとエラーがでました。 例外の部分のエラーはいろいろいじっていると出たり出なかったりですが、 "relation "member" does not exist"というエラーは消えません。 自分でいろいろ調べてみたのですがうまくいかなくて行き詰まってしまいました。 どうか助言や解決策があれば教えてください。 お願いいたします。

  • EclipseでのJSP・Servlet開発について(文字化け)

    EclipseでJSP、Servletの開発をしております。 文字化けについての質問なのですが、ブラウザ上で表示される文字が 文字化けしてしまいます。JSPの頭に <%@page contentType="text/html; charset=SHIFT_JIS"%> と入れており、ブラウザでもエンコードはShift_JISとなっています。 自分なりに原因を調べたのですが、○○.jsp→○○_jsp.javaに変換?する際に 文字化けしているようで、Eclipse上でJSP、Servletを見ると普通なのですが、 ○○_jsp.javaは見事に文字化けしていました。 文字化けした○○_jsp.javaを削除して再度表示(_jsp.javaの再作成)も試みた のですが、同じ結果でした。 1ヶ月以上触っていないパッケージのソースも突然文字化けを起こしたので 原因も分からない状態です。 原因・直し方がお分かりの方、是非ともご指南下さい。 情報不足でしたら追記させて頂きますので、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • JSP&Servletについて

    いつもお世話になっております。 JSP&Servletについての質問です。 ある画面からパラメーターを入力してServletに渡し、 その計算結果をResult.jspの画面に返すというツールを作成しているのですが、なぜか漢字が含まれていると文字化けしてしまいます。 ServletのほうでsetContentTypeメソッドを使っていないからでしょうか? でもResult.jspのほうで以下のようにしているのでいけると思うのですが、、 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>Result</TITLE> </HEAD> <BODY> <H1>Result</H1> <% String result = (String)request.getAttribute("result"); if (result != null){ %> <%= result %> <% } %> </BODY> </HTML> たとえば結果として 2002年と返したい場合 2002?と返ってきてしまいます。 お願いします。

    • ベストアンサー
    • Java
  • JavaBeansについて・・・

    日頃お世話になっています。Beansを学んでいるのですが、聞きたいことがあります。まず下記の文で <Beans文> import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class bean_dbInsert implements Serializable { public bean_dbInsert(){} public void execute(){ try{ Class.forName("org.gjt.mm.mysql.Driver"); Connection db=DriverManager.getConnection("jdbc:mysql://localhost/jsp10?user=jsp10&password=jsp10&useUnicode=true&characterEncoding=Shift_JIS"); Statement sttSql=db.createStatement(); sttSql.execute("insert into softlist(nam,url,gdate,grade,memo) values('サイト名','http://***.***.com/','2004/9/15',5,'サイトの説明')"); sttSql.close(); db.close(); }catch(Exception e) { e.printStackTrace(); } } } という文があったとします。ここではDBにサイト名~サイトの説明を登録するというものなのですが、コマンドプロンプトでコンパイルが成功し、JSPで表示に成功したにも関わらず、DBにはこのサイトの情報が登録されていないのです。DB接続先等も確認し、再度やってみたのですが、一向に先に進みません。この状況では何が原因だと思われますでしょうか?意見等をお願いいたします。

  • JSP+Servletでのページングの常識

    JSP+Servletでのページングの実装方法について伺いたいと思い、 質問いたしました。 現在JSP+ServletでWebページを製作しておりますが、 ページングを行うデータの取得方法で悩んでおります。 データをDBから取得する際は、下記1と2のどちらが標準的な実装方法なのでしょうか??? 条件としては、レコード件数2000件のテーブルからデータを取得し、1ページ10件ずつ表示します。 また、APサーバとDBサーバの通信がボトルネックになることはない場合でお願いします 1.全件を最初に取得しておいて、ページ切り替えの際は、DB接続なしで表示する 2.ページに表示する件数分のみDBから取得し、ページ切り替えの際は、毎回必要な件数分取得する 1の方法ですと、常に全件をキャッシュしていることになり、パフォーマンスが心配です。 2の方法ですと、ページ制御が煩雑になりそうな気がします。

    • ベストアンサー
    • Java
  • servletからjspへの遷移時に文字化け

    質問します。 用件:servletからjspに遷移する際に文字化けが発生します。 環境: Eclipse3.7 java6 ApacheTomcat7.0 フレームワークはなし 内容: フォワードでTest.jspに遷移します。 RequestDispatcher requestdispatcher = request.getRequestDispatcher("/Test.jsp"); requestdispatcher.forward(request, response); Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。 (英数字は化けません。) servletを使用せず、Test.jspに直接アクセスすると文字化けが起きません。 servletで、Test.jspで適当なhiddenを作成し、servletでgetParameterをSystem.out.printしても 文字化けなどはおきません。 また、RequestDispatcherでは文字化けが起こりますが、 response.sendRedirect("/Test.jsp"); だと文字化けがおきません。 現状、sendRedirectとsessionを使用して値の受け渡しを行っておりますが、 RequestDispatcherを使用したいので困っております。 また文字コードは javaファイルそのものはSJIS jspは<%@ page language="java" contentType="text/html; charset=SJIS" %> となっております。 わかりにくい文章で申し訳ありませんが、ご回答の程よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう