• ベストアンサー

Servlet+JSPを使ったWEBアプリ構造について

現在TOMCAT6.xにて生産管理システムの前段として在庫管理システムを開発しようとしています。雛形等は無く1から作成していこうと思っているのですが、システム全体の構造をどのようにするか結論が出ていない状況です。別の開発で行った構造をベースにしようかとも考えてもいます。プロジェクトメンバーと話し合った結果、2つに分かれました。 でも共通部分は同じ所があり、MVC構造(本来とは違うかもです)という所までは一緒です。 その2つの案とは、 (1)1つの機能毎(若しくは画面単位)に1つのコントローラー(サーブレット)を持たせ、そのサーブレットからモデルのインスタンス化及びDBへのアクセス(ここはもしかしたらマネージャークラス、若しくはDAOを持たせてそこで処理)を行ったり、結果をレスポンスするJSPを呼び出したりする方法。 (2)1つのサーブレットだけ作成し、そこからJSPを直ぐに呼び出し、JSPにてモデルやDBへアクセスしたりするDAO及びマネージャクラスの生成をし業務処理した後、そのJSP上で結果を返す方法(要はFrontControllerパターン)。 これは、今回に限らず他のシステムではどのような構造になっているのか、とても興味があります。 (1)がベストなのか(2)がベストなのか、はたまた「うちのシステムでは、こっちのほうがトレンドで用いてますよ」というご意見を頂ければ助かります。 本来なら、私が知っている限りの中で(1)と(2)のメリットとデメリットを書くべきかと思いますが、素のままのご意見をいただければと思います。 宜しくお願いします。

  • Java
  • 回答数4
  • ありがとう数7

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

  • ベストアンサー
  • gigamac
  • ベストアンサー率57% (8/14)
回答No.4

Strutsを導入するのがベストかと思いますが、諸事情があるみたいで大変ですね。私は(2)がお勧めです。FrontControllerパターンとView-Helperパターンを導入されてはいかがでしょうか? ・FrontControllerパターンのメリットとしまして「全てのリクエストを集中管理できる」。 ・View-Helperパターンのメリットとしまして「業務ロジックをビューから分離し易い」。 どちらかというと、J2EEの世界に入ってしまうのですが、では、ビジネスロジックはどうするかというと、TO(Transfer Object)を用います。 また、DBや通信等はDAOパターンで決まりです。 詳細はインターネット検索をかけると出てきますので、そちらを参考にしてみてください。 この手法以外にはGoFパターン等ありますが、私は用いたことが無いのでなんともです。

mintia007
質問者

お礼

ご回答ありがとうございます。 なるほど。EJBをお勧めという事でしょうか。 検討材料としてプロジェクト内で話し合ってみます。 新たな選択肢を提供いただき、ありがとうございます。

その他の回答 (3)

  • hegemon
  • ベストアンサー率72% (21/29)
回答No.3

MVC構造というのなら、(1)のほうが近いですね。(2)では、結局JSPがコントローラの部分まで担当してしまうので、処理と画面の分離が困難になりそうです。 ただ、よくあるMVCの構成では、下記のように入り口だけは(2)のようになります。 1.Controlとして、一つのサーブレットがPOSTされたデータを受けとる 2.入力ごとに適切なModelクラスを選び、データを渡して処理を行う 3.処理が済めば、JSPへフォワードする 4.Viewを構成するJSPが、表示するデータをモデルクラスから受け取り、HTMLを生成する Coltrolは、入力に応じるべきModelと、処理結果を表示すべきViewを選び出し、呼び出すことに専念。 Modelはひたすらデータ処理に、Viewは画面表示に専念する。 Strutsなど、こうした仕組みを提供しているフレームワークを使うのがお勧めです。

mintia007
質問者

お礼

ご回答ありがとうございます。 確かにその通りなのです。(2)はView部分に業務ロジック的なプログラミングを強いられます。そうなると、デザイナーとプログラマーとの喧嘩となり苦労してきた経験もあります。できればJSPには極力ロジックを載せたくないと私も思っています。 >>Strutsなど、こうした仕組みを提供しているフレームワークを使うのがお勧めです。 実は検討材料としてStrurs2を入れようかという話もあったのですが、クライアント様の担当者様がシステム開発部門にいまして、その方がサーブレット&JSPしか知らないので、かたくなにNGといってきているのです。Strutsの重宝さをプレゼンとかしたのですがダメでした><。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

楽なのは(2)よね。 新しい機能を追加するときに アプリケーションを設定しなおすわずらわしさがないわ。 ログも一箇所にまとめやすいし とても"作り手"に都合がいいわ。 でも私なら(1)を採用する方向で持っていこうとするわ。 (1)の場合、基盤のメニューも別アプリになるとは思うし いろいろ実装上面倒だけど ・後日追加する生産管理システムを追加しても  既存の在庫管理システムに影響がない。   *もし同じアプリケーションにした場合    万が一の不具合で両方とも止まってしまう可能性あるわ。 ・別VM上での運用も容易に可能   *負荷が高い場合、考慮したいわね。 共通コンポーネントの管理や、アプリケーション間のデータのやり取りを いろいろ考えておかないといけないけど その点さえクリアしてしまえば"運用は"かなり楽になるわ。 また、別々にすることの利点として、 片方だけ動かして片方を使わない なんて使い方もシンプルよね。 さらに新しい機能を追加することもやりやすいし 仕様変更による影響も片方だけになる。 大規模になるときほど分けたときの利点が大きいわ。 でも逆に小規模だともともと運用が楽なので 一緒にした方がいいかもしれないわね。 とりあえず私の意見はここまで。

mintia007
質問者

お礼

ご回答ありがとうございます。 確かにその通りだと思います。 ちなみに別なシステム構造などご存知でしたら、ご教授いただけると助かります。

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.1

昔よく議論になりましたが、僕の個人的な意見としては(1)だと思います。 分散開発もしやすいし、設計書も書きやすいし。 デメリットとしては、名前空間が狭くなるとか、やたらファイルが多くなるなどですよね? 開発速度を考えると(2)と考えるかもしれませんが、よほど似た処理、 もしくは、簡単な処理の画面遷移でこうする場合はありかもしれませんが、 (1)と(2)が混在するのは良くないと思います。

mintia007
質問者

お礼

ご回答ありがとうございます。 (1)ですか。私も実は機能で分離できるので平行開発というメリット部分で良いなーと思うのですが、(2)を押しているメンバーは画面管理がし易いという面と画面=機能という切り分けができて良いという意見もあります。例えば画面番号(Z01-001とか付けて)と設計書の機能番号と一致させ、機能-画面-設計書と言う形で同一管理するなんていう事ができると言っています。(1)はどちらかというと、設計書-サーブレット-JSPという管理になります。私はこちらがこのみなのですけど。んーーー難しいですね。

関連するQ&A

  • javaサーブレットでjspへのフォワード処理と、ファイルに出力処理を行いたいのですが。。

    今javaサーブレットとjspでツール作成中です。 DBにアクセスして、その内容をCSVファイルに書き出すというツールなのですが、サーブレットではjspにフォワードという処理と、ファイルに出力という処理の二つを同時に行うことができるのでしょうか。 たくさんの本やサイトにそれぞれ片方の処理だけする場合は載っているのですが、両方を並行して処理させる場合のサーブレットの書き方がわかりません。。 jspからの情報をもとにサーブレットでDAOを生成、DBにアクセスし、検索結果をDTO(一行の情報はBean)に格納し、それをサーブレットからjspにフォワード&CSV出力というものを作りたいと思っています。 よろしくお願いします。

  • jsp/サーブレット

    jsp サーブレットを勉強しています。 jspに入力された値を サーブレットに投げます。 サーブレットからjavaクラスに値を投げて javaクラスで値が正しいかどうかを判断します。 その結果をサーブレットに投げて、 サーブレットからjspに投げて jspで結果を表示する。というのは理解できました。 しかし私が行いたいのは、 クライアントがjspにアクセスしたときに、 javaクラスにある値をjspに表示させたいというものです。 この場合はサーブレットに何も投げるものがないのですが、 jsp→サーブレット→javaクラス→サーブレット→jsp このようにサーブレットを使って表示させるには、 どのようなプログラムを書いたらいいのでしょうか。 わかりにくい説明で大変申し訳ないですが、 具体的なプログラムを教えていただけるとありがたいです。 また、参考になりそうなURLがありましたら教えてください。 よろしくお願いします。

  • 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はなんパターンか変えてやってみましたが、できません・・・。 どうすればうまくサーブレットを作って実行できるのでしょうか? 宜しくお願いします。

  • 初めての、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
  • 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を使わない開発環境でという条件付で、どなたか業務経験のある方、この疑問に答えていただけないでしょうか?

  • JSPで「処理中」をブラウザに表示

    サーブレット+DB、JSPでプログラムをしています。 以下の質問(CGIが対象です) http://www.okweb.ne.jp/kotaeru.php3?q=173368 と似たようなことを、JSPで行うにはどうしたらよいでしょうか。 サーブレットの処理中(長い処理)に、「処理中」のメッセージを表示して、終了したら完了ページに飛ばしたいのです。 「処理中」の表示はJSPでもJavaScriptでも、サーブレットから直接出力しても構いません。 さらに言えば、サーブレットではfor文で処理を回しているので、「○%完了」などが表示できたら最高です。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Servlet/JSP、MySQLでwebチャットを趣味で作っています

    Servlet/JSP、MySQLでwebチャットを趣味で作っています。 入室、書き込みなどの処理は出来たのですが、CGIチャットなどにあるようなチャット参加者、ROM人数の表示方法がわかりません。 例えば、 アクセスした人のIPをすべてデータベースに登録し、その中からチャット参加者の名前、人数を読み出して参加者として表示する。 一定時間アクセスの無いIPをデータベースから削除し、残った人から参加者の人数を引きROM人数とする。 という方法を考えましたが、データベースへのアクセスが頻繁になってしまう気がして悩んでいます。 サーブレット/JSPの知識はそれほどなく、ネットにもサンプルが乏しいため、一般的な方法も良くわかりません。 どなたか丁寧な解説をしていただけると助かります。 よろしくおねがいします。

    • ベストアンサー
    • Java
  • JSP、サーブレットの初期処理

    最初に、あるページをアクセスした時に、 サーブレットで最初の1回目のアクセス時のみ特定の処理をする。 その結果をJSPに返す という事を行いたい場合、 どのような関数(仕組み)? を利用すれば良いのでしょうか? また、その場合にあるイベント(ボタン押下等)でも 初期処理の処理を行う と言う事は可能でしょうか? (関数コールなどで初期処理と同じ箇所に書かれたソースを利用したい) JSP、サーブレット初心者です。よろしくお願いします。

    • ベストアンサー
    • Java
  • 静的ページからのサーブレット起動について

    今、JSPとサーブレットの勉強を行っております。 サーブレット側でデータを取得して JSP側で表示を行いたいと思っているのですが フォームアクション等を行わずに、JSP⇒サーブレット⇒JSPと 実施する事は可能でしょうか? URLアクセス ⇒ JSPからサーブレットの処理を呼び出し ⇒ サーブレットから クラスを利用してデータを取得 ⇒ JSPへデータを渡して表示   というように、URLアクセスのみで一連の処理を行いたいです。 サーブレットからJSPにセッション経由でデータを渡して表示する事や JSPからクラスを利用する方法では成功していますが できるだけMVCモデルに準拠した方法で行いたく思っており かつ、コントローラとしてサーブレットを使ってみたくて このような事に挑戦しております。 可能かどうかだけでもわかると非常に有難いですので ご存知の方、どうかよろしくお願い致します。

    • ベストアンサー
    • Java
  • コントローラの役割はJSPにはやらせないですよね?

    コントローラの役割を、HttpServletだけでなくjspにやらせる構成も 正しい思想の1つなのでしょうか?? 「コントローラ」は、 基本「依頼と、依頼結果をもとにした次の依頼」をする。 という風に役割を捉えていました。 例えば Aに処理依頼をしたあと、 処理が成功したから今度はBに処理依頼をして、 その結果データが 1件以上だったらCに依頼をして、 0件だったら次はDに処理を依頼する。 のような。 そして、それはHttpServletのところにやらせるものなのかと捉えています。 (※間違っているのかもですが。。) しかし、 書こうと思えば、サーブレットを撤廃して、 画面遷移は、x.jsp ⇒ y.jsp ⇒ z.jsp と、サーブレットを介さずにチェーンを作ることも可能だと思います。 (1)そういう仕組もわりと一般的なのでしょうか? (2)jspになんでもやらせすぎると、それぞれのソースが、 ◆A:プレゼンテーション層としての処理なのか?(イテレータでの描画とか) ◆B:ファンクション層の処理なのか?(例えば入力チェック処理など) ◆C:コントローラ層の処理なのか? (各結果を元に、次にどこの処理にどういうデリゲートするのか等処理) がパッと分かりにくく、カオスになりやすいと思っています。 そんな風になるくらいだったら、 コントローラはサーブレットにさせた方が良いと思うのですが、あえて全てJSPにさせるメリットもあったりするのでしょうか? ◆確認 画面遷移は、コントローラの役割だと思っていたのですが、 もしかしたらそこが間違っているのでしょうか? (WEB系の開発かどうかでも違うのかもですが。) .

専門家に質問してみよう