WebブラウザでのDBアクセスの処理を関数で行いたいのですが。

[戻る]
なおぞう 2016/04/12(火) 21:26:13
初めてJAVAでのWebアプリケーションを開発することになり、実現方法が分からずここで
相談させていただきます。よろしくお願いします(長い事誰も質問されていないようなの
で反応して頂けるのか心配ですが)

Apache,Tomcat、JAVAなどはインストールしました。開発環境はできていると思います。
一応NetBeansもインストールしましたが、いまいち使い方(プロジェクト生成方法)が分
からない状態なので、テキストエディタで開発しようと思っています。

実現したい事はたくさんあるのですが、まずはDB(Postgresql)への接続になります。

DBへのアクセスをする関数をクラスでまとめたいのです。
HTML文を書く(?)index.jspがあるとして、そこの中で

【想像:index.jsp】
import MyClass  <<===自分で作ったJAVAクラス←この宣言の仕方も分からないです
<HTML>
<BODY>
 MyClass posgreAccess = new MyClass();  //自分で作ったJAVAクラスのオブジェクトを生成


  String strSql= "Select *from tbl_meibo";
 ResultSet rs =  posgreAccess.SelectExecute(strSql); //この関数内でDB接続をし
て、SQL文を実行して結果を返す

 while (rs.next()) {
    System.out.println(rs.getString("name"));
  }

</BODY>
</HTML>

みたいな感じにしたいのですが実現可能なのか、どのようにJAVAクラスを作って、jspで
呼べば良いのか全く分からず途方に暮れています。
作成しようと考えているDBにアクセスするJAVAクラスの関数は、もっと細かくDB接続関数
DBConnect()というのも用意したいのですが、JAVAクラスの中で、Connection conn; を外
部変数としてログアウト処理するまで所持できるのかなども分かりません。

このようなDBアクセスの実現方法はあり得ないというような返答でも助かります。

しま 2016/04/13(水) 16:33:47
*.jsp を使うのもいいのですが、 AJAX でDBの操作を行うように通信する方が
今なら分かりやすいかもしれません。
*.html から jQuery でも何でもいいので ajax 通信経由で アプリケーションサーバー
に要求を送信し、結果を JSON 形式で返してもらうことにするのです。
こうすると jsp でのように画面と画面に表示する時のDB操作とが一体になることが無
いので、私には分かりやすいと思います。
(Apache/TOMCAT なら Action.do にお願いするのかな?)
JSON 形式で返ってきた結果を表示したい
 <table><div id="myTABLE"></div></table> 又は
 <div id="myTABLE"><table></table></div>
内に構築すれば表(又は、グリッド)表現形式で取得した内容が表示できます。
こうすれば、画面の内容の更新とページ遷移とが別々になり、制御しやすくなると考えて
います。

又、DBを扱うクラスを用意したいということについて言えば、あまり大きなクラスでは
なく、最小限度必要な機能を提供するものにしておくのが良いと思います。
出来るだけ、ビューやストアードプロシジャーやファンクションやでDB操作することで
柔軟性が高くなるでしょう。
いわゆるビジネスロジックに手を入れなければならない場合、 java ソースに手を入れて
デプロイ(配布、配置)し直すのと。ストアードプロシジャーを修正するのとでどちらが
楽でしょうか?

DBとの接続は JNDI を用いてデーターソースを使うと簡単に記述出来ると思います。

以上、大雑把に私の考えを述べました。お役に立ちますでしょうか???

なおぞう 2016/04/13(水) 17:02:57
>しま様

アドバイスありがとうございます。
昨日初めてJAVAをPCにインストールしたのですが…JSONとか、ajaxやら何もかもが初耳で
混乱状態です。AJAXでのDBアクセスについても調べてみたいと思います。(拡張子jspも
昨日、初めて知りました)Webアプリ開発自体素人なので。

とりあえず、クラスを作ってそれにSQL文を投げて実行するという考えは不可能ではない
ということですね…。
確かにプロシージャでいろいろ用意したほうが勝手が良いですね。ただ、作業を分担して
まして、プロシージャでいろいろやってもらうとプロシージャ担当の人に負荷がかかり過
ぎてしまうのでできたら私が作るJAVAクラスで対応したいと思っています。
とはいえそれ以前に、クラスの作り方とか全く分かってないのですが

JAVA Webアプリでposgresqlにアクセスしているサンプルを探した
<http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/servlet_jsp_s01.htm>のですが、
それをまるっとコピーしてみたら、
import javax.servlet.*;
import javax.servlet.http.*;


とかが無いというエラーが出て、tomcatフォルダを見ても見つからないし、commonという
フォルダに在るとか書いてあるサイトがあったけど見つからない…と、本当に手も足も出
ない状態です。
クラス化より手前の 素直にJAVA Webアプリでposgresqlにアクセスするという事さえ実
現できてません。


Eclipse Marsも入れたのですが、tomcatのアイコンが出なくて途方に暮れてます。

なおぞう 2016/04/13(水) 17:32:33
>しま様
jQueryは、javascriptの派生みたいなもので、AJAXはジャバスクリプトのHTTP通信機能を
利用するもの?なのですね。
開発要件は、JAVAで開発する事。なので、やっぱりjspとなります。

しま 2016/04/13(水) 18:24:07
WEBアプリケーションで javascript を使わないというのは少し極端すぎると思います。

入力画面で何かたとえば、得意先コードや商品コードを入力したら
そのコードに対する得意先名や商品名などを表示したい場合、
それぞれの要求毎に submit ボタンを操作するとしても
商品コード入力が確定したことは誰かが submit ボタンを押さなければ分かりませんが
商品コードの入力テキストボックスの隣に submit ボタンを配置するのでしょうか?
javascript なら onchange が捕まえられるので、こっそり画面上では見えない submit 
ボタンが押せます。
そして javascript を使えば AJAX なら submit などという強力な手段を使わないで、
データー通信だけが行えます。

このように、javascript を使うことは html で表現できることを広げることなのです。
java で開発することと何の矛盾もしないと考えます。

java で開発するのはサーバー側の処理でしかありません。

それから WEB アプリの場合 画面の見た目は CSS を上手く使うことが大切です。

しま 2016/04/13(水) 19:14:55
>JAVA Webアプリでposgresqlにアクセスしているサンプルを探した
><http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/servlet_jsp_s01.htm>のですが
、

あなたが示したページは古すぎます。
間違っているわけではありませんが、あなたの環境と違いすぎることが考えられます。
java のバージョンを見ても分かると思います。

以下のページを参考にしてください
ほかにもあると思いますが java は 1.7 以降、できれば 1.8 以降が望ましいでしょう

http://blog.zdrv.com/archives/291

http://cmemo.net/articles/java/eclipse-%E3%81%A7-postgresql-%E3%81%AB%E6%8E%A5%E
7%B6%9A%E3%81%99%E3%82%8B/

https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

http://blogs.yahoo.co.jp/kensinisnek/11707751.html

なおぞう 2016/04/13(水) 19:16:27
>しま様

ご返答ありがとうございます。
java,javascriptは混在して使って良いってことなのですね。
私の担当がJAVAクラスで関数を作り、DBとのやり取り系を行うので、画面担当がどのよう
に開発するのかは分かりません。
私の作るクラスの中でjQuery(javascript)を使って関数を作って、画面側で関数呼び出
しをすれば良いというだけならそれで良いのかもしれません。
混ぜて(?)使えるWeb言語って難しいです…。

先ほどまでエラーが出ていたサンプルプログラムのimportに関しては環境設定でパスを設
定してコンパイルができました。
>javac test_postgresql.java
で、test_postgresql.class ができましたが、これをどうやってブラウザで表示すれば良
いのか分からないのです。ここかなって処においても動かないのです。tomcat配下のいろ
いろなフォルダにコピーしまくっています。

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT
http://localhost:8080/test_postgresql


このclassを呼ぶJSPを作るのが普通なのでしょうか。(JSPからのclassの呼び方が分かり
ませんが)
こんな低レベルなところが分からないので必死でネットで探しているところです。

しま 2016/04/13(水) 19:41:07
>java,javascriptは混在して使って良いってことなのですね。
>私の担当がJAVAクラスで関数を作り、DBとのやり取り系を行うので、画面担当がどのよ>に開発するのかは分かりません。
>私の作るクラスの中でjQuery(javascript)を使って関数を作って、画面側で関数呼び出
>しをすれば良いというだけならそれで良いのかもしれません。

まだよく分かってらっしゃらないようですが、WEBアプリで言う jsp は java で生成する
 html 文書です
つまり、ブラウザーで表示し、動作させるためのものです。
<% から %> までの間が、サーブレットでの作業を記述している部分です
あと、taglib を使って form 内の値のやり取りもします。

この辺が分かっていないのなら jsp はさわれません。
Action.java や ActionForm.java や、必要な *.java を触ることになるでしょう。
この場合、純粋に java の知識だけが必要です。

なおぞう 2016/04/14(木) 09:54:51
>しま様
いろいろと助言ありがとうございます。
JAVAの基礎から勉強しようと思います。

tetrapod 2016/04/14(木) 10:10:03
# オイラも java はまったくやったこと無いけど

Web Application とはどういうものか理解したうえで事を始めないとわけわかになる。
http がどういう性質を持つプロトコルなのか、とか知っておくべき前提事項が多い。

web server 側アプリ (たぶん今回なおぞう氏が作るのはこっち)
役目: HTML 文書を動的に生成する (この部分に Java や PHP を使うことが多い)
例:
・商品Aの残数をデータベースから引き出し、残が0個なら購入不可能で×を生成
・商品Bの残数をデータベースから引き出し、残が10個未満なら△を生成
・商品Cの残数をデータベースから引き出し、残が10個以上なら○を生成
・買える商品に限り個数入力が可能となるような javascript を HTML 内部に生成
・「セッション」なるものを生成・維持・管理・破棄

web server (Apache HTTPD とか IIS とか)
役目:動的に生成された HTML 文書、静的に生成済み HTML 文書などを効率よく顧客に提供

ここまでがサーバ側の処理、この下はクライアント(顧客)側の処理

web user agent (IE, Chrome, Firefox 等)
提供された HTML 文書を人間に見やすく表示
提供された HTML 文書中の javascript を解釈・実行
Cookie を受け取り、返信することで「セッション」維持に協力する

----

なおぞう氏ひとりでサーバ側アプリケーションの全部を担当するはずも無いので、
・どの辺の処理をやってほしいのか
を上司に聞いてみるといい。

データベースから商品の残数や個数を引き出すだけならそんなに難しい話ぢゃない。
(と思う)

なおぞう 2016/04/14(木) 18:24:05
>tetrapodさま

こちらでも助言ありがとうございます。
今日一日基本から勉強をして、なんとかEclipseの使い方とか、どこにclassを置くとか、
web.xmlの意味が分かったところです。
でもまだまだですね。
sessionとか、わけわかめ。です。
サーバ側(DBとのやり取り)は全部私が担当のようです。
単にPostgresSQLとやり取りをする関数を作るだけですから、JAVA、javascriptやWebのい
ろいろを理解できてる人なら簡単なのだと思います。

社内でも初のWebアプリ開発(JAVA)ですので、誰に聞くこともできないですし、サンプル
がないかなぁーと探しながら理解を進めているところです。

なおぞう 2016/04/15(金) 20:18:09
[[解決]]
解決ではないですが、とにかく不勉強という事で閉じます。

古いスレッドには追加発言できません。