■プログラム構成■プログラム構成についてここではサーバー側の設計に踏み込んだ話をしていきます。具体的にはプログラム構成について説明します。 これまではJavaの文法説明や基本的なクラスの利用方法の説明に重点を置いてきました。そのためサーバーJavaの一番簡単な仕組みを利用し、全てJSPやサーブレットだけを使ったサンプルを作って説明しました。JSPはAPサーバー上でサーブレットに変換されるため、実質的にはサーブレットのみで説明してきたと思ってもらえればいいです。 具体的なコーディング方法の説明は後に回し、まずはプログラム構成図で説明します。
まず今まで説明してきた構成を図解するとこうなります。
これをもう一段掘り下げて考えます。
あまり良いとは言えない構成ある画面からサーバー処理を要求する手段として、ボタンが1つだけとは限りません。むしろ画面内に複数のボタンやリンクがあり、それぞれ別のサーバー処理を要求する方が普通でしょう。 これの一番単純な実装は全てのサーバー処理要求に1つのサーブレット/JSPを割り振る、というものです。図解するとこうなります。
これの何があまり良いとは言えないのか、それは
まあ共通ロジックはクラス分けをちゃんとすればいいのでしょうが、似たようなプログラムがあちこちに出てきそうなのは変わりません。
現実的な構成じゃあどうすればいいのかというと、常識的には1画面=1サーブレット/JSPにします。画面内に複数のサーバー処理要求(ボタンやリンク)があるとき、サーブレット側でどのサーバー処理が要求されたのかを判定します。
図中ではgetParameter("ボタン1")のように書いていますが、HTMLでの送信ボタン定義でname=パラメータで指定したボタン名です。 参考は「入力画面用のHTML」の送信ボタンです。 単純な画面であればこれでもいいでしょう。しかし実際の業務画面では、例えばボタンと業務処理が1:1で決まるとは限りません。同じボタンを押したときでも、他の入力域の値や選択項目の内容によって実行する業務処理が異なる状況もあり得ます。 またサーバー処理にはステートレス(stateless)とステートフル(stateful)があります。ステートレスはサーバー・クライアント間のやりとりが毎回完結するものです。 ステートフルはいわば会話型というものです。サーバー・クライアント間で複数回のやりとりが行われ、その途中経過の状態をサーバー側で保持します(セッション情報)。この場合は同じボタンを押したときでも、サーバ側の状態(セッション情報)によって実行する業務処理が異なる場合があり得ます。 そしてこれとは別に「■サーブレット編5」のサーブレット固有の問題で説明した、マルチスレッド環境下での問題があります。思わぬミスもあり得るしサーブレットではあまり複雑な処理をしない方がいいでしょう。 構成の基本形ではどうするかというとサーブレットは基本的な処理の振り分けに徹し、具体的な処理はクラスに分けましょう。これらを踏まえ次の形をサーバー側の基本構成とします。
クライアントからの処理要求、画面の送信内容等を調べるのは、とりわけ処理内容が少ないときはわざわざ別クラスにせずサーブレットの内部メソッドでも十分です。しかしここでは基本形として必ず要求解析の別クラスに分ける、という前提で説明していきます。 もう一度引いて全体を見る一応の基本形を説明しましたが、これで終わりではありません。また一段引いて全体を見直してみます。 これまでの所は処理部分を別クラスに分けたものの、要求を受けたサーブレットで処理をして結果も返す、という構造は変わっていません。 サーブレットが返す結果というのは『通常は』HTMLであり、すなわち画面定義です(違うパターンについては後で説明します)。 さて初期の業務系のWEBシステムではそれほど凝った画面ではありませんでした。HTMLも基本的な要素・使い方だけです。 しかし最近では企業内でしか使われない閉じた業務系システムであっても、利便性を考慮してそれなりの画面を作ることがあります。ましてや一般の利用者向けに作られた開いたシステムならなおさらでしょう。 特にユーザー・インターフェース設計担当としてWEBデザイナーが参加しているケースもあるかと思います。こうした場合は最近ならHTML5やCSS3を使った、それなりに複雑な画面定義になるでしょう。 そういうHTMLをサーブレットからprintやprintlnで出力するのは
そこで思い出してください、JSPの特徴を。JSPではHTMLコードの中にJavaプログラムコードが含まれています。ということは画面定義担当者が作ったHTMLコード中に、業務処理結果を反映させる最低限のJavaプログラムコードを埋め込めばいいということです。 これを踏まえて全体のプログラム構成を
これを踏まえたサーバー側のプログラム構成はこうなります。
さてサーブレットからJSPに制御を渡す方法にはforwardという方法とincludeという方法の2種類あります。その違いは
次ページではこの構成を実装するに必要な、これまで説明していなかった概念や方法について説明します。 |
Copyright © 2011 yok. All Rights Reserved.