サーブレットJSPを学ぼう!#9

公開日: 2023/10/11

前回は簡単なWebアプリケーションを作れるようになりました。

しかし、それだけでショッピングサイトのような複雑なWebアプリケーションを作るのは難しく、開発の効率もよくありません。


今回は、Webアプリケーションを本格的に作成するための知識を学びます。

これまでの学習内容を使ってWebアプリケーションの開発の練習をしていきます。


前回までは、1つのリクエストを1つのサーブレットクラスまたは、JSPファイルで処理をしていましたが本格的なアプリケーションを開発するには、より効果的な方法があります。

実際の開発現場でも採用されている、Webアプリケーションの模範的な構造と開発手法を学びたいと思います!

1. MVCモデル


サーブレットクラスとJSPファイルはどちらを用いても同じ処理を実現できます。

とはいえ、Webアプリケーションの開発の現場ではいずれか片方だけを使うわけではありません、実際は、サーブレットクラスとJSPファイルを組み合わせてWebapurike-syonn wo作成するのが一般的です。


両社のよいところを引きだすことで、効率よく開発ができるのです。

サーブレットクラスとJSPファイルを組み合わせて開発するときに、参考になるのが「MVCモデル」です。


まずは、このMVCモデルの学習から始めましょう!

1-1. MVCモデルとは

MVCモデルとは、GUIアプリケーションのための模範的な構造です。

ざっくり言えば、「ユーザーがボタンなどを使って操作するアプリケーション」です。

こんな内部構造でつくればいいことあるよというお手本や、ガイドラインのようなものと認識しましょう。

私たちが本書で学習しているサーブレットやJSPによるWebアプリケーションもGUIアプリケーションなので、まさにこのMVCモデルが有効なのです。


MVCモデルではアプリケーションを3つの要素、モデル、ビュー、コントローラに分けて開発することを定めています。

各要素はは担当すべき役割がきめられており、ほかの役割は担いません。


①モデル アプリケーションの重たる処理や処理に係るデータを格納する

②ビュー ユーザに対しての画面の表示を行う

③コントローラ ユーザーからの要求を受け取り、処理の実行をモデルに依頼し、その結果の表示をビューに依頼する


これらの要素が1~7のように連携してアプリケーション機能をユーザーに提供します。

1ユーザーがアプリケーションの提供する機能を要求する
2コントローラが要求を受け付ける
3コントローラがモデルに処理の実行を依頼する
4モデルが処理を実行する
5コントローラが結果の表示をビューにいらいする。
6ビューがユーザの要求の結果を表示する
7ユーザは要求の結果を見る


いわば、コントローラは受付指示係、モデルは実務係、ビューは表示係といったとこで、このように役割を分担しておくことで、どの要素に手をくわえたらよいかが明確になり、アプリケーションの保守拡張をしやすくするというメリットがあります。


では、サーブレットやJSPを用いたWebアプリケーションで、MVCモデルをどのように実現するかを、もう少し具体的に紹介していきます。

ユーザーからの要求をうけて、全体の制御を行うコントローラは、サーブレットクラスが担当します。

リクエストの受け付けはJSPファイルでもできますが、コントローラ役には複雑な制御や例外処理が求められます。

そのような処理はJavaga主体のサーブレットクラスの方が適しています。


ユーザーの要求にこたえる処理や、その処理に関係するデータを表すモデルは、一般的なJavaクラスが担当します。

ここでいう一般的なクラスとはHttpServletのようなWebアプリケーションに関するクラスやインターフェースを含まないクラスの事です。

そのようなクラスにモデルの役割を受け持たせることで、Webアプリケーションの知識がない人でも、モデルの開発に参画できるようになります。


出力を行うビューは、HTMLの出力をとくいとするJSPファイルがたんとうします。

サーブレットクラスでもHTMLの出力はできますが、println()を大量に必要とするため処理が煩雑になってしまいます。

また、JSPファイルはHTMLをそのままかけるので、Webページのデザイン担当にJavano知識がなくても画面の作成ができるという利点もあります。

1-2. 処理の転送

MVCモデルで開発する場合、コントローラのサーブレットクラスが、ビューのJSPファイルに処理結果の表示を依頼する必要があります。

しかし、JSPファイルは、Javaクラスのようにnewで生成して呼び出すわけにもいきません。


これを解決するのが、フォワードです。

フォワードを使用すると、処理を別のサーブレットクラスやJSPファイルに転送できます。


サーブレットクラスからJSPファイルにフォワードすることで、出力処理の担当をJSPファイルにします。

1-3. JSPファイルへの直接リクエストを禁止する

MVCモデルに従ってWebアプリケーションを作ると、ブラウザからリクエストされるのは基本的にサーブレットクラスになります。

JSPファイルはサーブレットクラスからフォワードされて動くのが前提になるので、ブラウザから呼び出されるとエラーや不具合が発生してしまいます。


そこで、フォワード先としてしかりようしないJSPファイルはブラウザから直接リクエストできないように対策する必要があります。