
サーブレット&JSPの基本|MVCモデルとサーブレット・JSPの役割
サーブレットは受付、Javaクラスは処理、JSPは表示。MVCモデルでWebアプリケーションの役割分担を理解しよう
サーブレットやJSPの基本を学ぶと、フォームからデータを送信したり、リクエストパラメータを取得したり、処理結果を画面に表示したりできるようになります。
ここまで学習すると、簡単なWebアプリケーションなら自分で作れるようになってきます。ブラウザに画面が表示され、フォームから送信した内容に応じて結果が変わると、Webアプリケーション開発の楽しさも感じられるはずです。
ただし、少し複雑なWebアプリケーションを作ろうとすると、1つのサーブレットや1つのJSPだけで処理をまとめる方法には限界が出てきます。
たとえば、ショッピングサイトのようなアプリケーションでは、商品検索、カートへの追加、注文確認、会員情報の表示など、さまざまな処理が必要になります。これらをすべて1つのファイルや1つの役割に詰め込んでしまうと、どこに何が書かれているのか分かりにくくなり、修正もしづらくなります。
そこで重要になるのがMVCモデルです。
MVCモデルは、アプリケーションをモデル、ビュー、コントローラという3つの役割に分けて作る考え方です。サーブレットとJSPを組み合わせてWebアプリケーションを作るときにも、この考え方が役立ちます。
この記事では、MVCモデルとは何か、3つの役割がどのように連携するのか、そしてサーブレット、JSP、一般的なJavaクラスがそれぞれどの役割を担当するのかを解説します。
1つのファイルだけで作る方法には限界がある
これまでの学習では、1つのリクエストを1つのサーブレットクラスまたはJSPファイルで処理する形が多く出てきました。
この方法は、基本を理解するにはとても分かりやすいです。リクエストを受け取り、処理を行い、HTMLを返す流れを1つの場所で確認できるからです。
しかし、アプリケーションが大きくなると、次のような問題が出てきます。
| 問題 | 内容 |
|---|---|
| 処理が長くなる | 入力チェック、計算、表示処理が同じ場所に集まりやすい |
| 修正箇所が分かりにくい | 画面を直したいのか、処理を直したいのか判断しにくい |
| 役割が混ざる | Javaの処理とHTMLの表示が混在しやすい |
| 拡張しにくい | 新しい機能を追加すると影響範囲が広がりやすい |
| 分担しにくい | Java担当と画面担当が同時に作業しづらい |
小さな練習プログラムでは問題にならなくても、本格的なWebアプリケーションでは、役割を整理して作ることが大切になります。
サーブレットとJSPは組み合わせて使う
サーブレットクラスとJSPファイルは、どちらを使ってもWebアプリケーションの処理を実現できます。
サーブレットでもHTMLを出力できますし、JSPでもJavaの処理を書くことができます。
しかし、実際の開発では、どちらか一方だけを使うのではなく、サーブレットとJSPを組み合わせて使うのが一般的です。
サーブレットとJSPの得意なこと
| 技術 | 得意なこと |
|---|---|
| サーブレット | リクエストの受付、入力値の取得、処理の呼び出し、画面遷移の制御 |
| JSP | HTMLを中心とした画面表示、処理結果の表示 |
サーブレットはJavaクラスなので、条件分岐や例外処理、処理の振り分けなどを書きやすいです。
一方、JSPはHTMLをそのまま記述できるため、画面表示を作るのに向いています。
それぞれの得意なことを活かして組み合わせることで、読みやすく、修正しやすいWebアプリケーションを作れるようになります。
図1:サーブレットとJSPを組み合わせる考え方

この図から分かること
サーブレットとJSPは、どちらか一方だけを使うものではありません。
サーブレットはリクエストを受け取り、必要な処理を呼び出したり、次に表示する画面を決めたりする役割に向いています。JSPはHTMLを自然に書けるため、画面表示に向いています。
このように役割を分けることで、Javaの処理とHTMLの表示が混ざりにくくなります。結果として、あとから修正したり機能を追加したりしやすくなります。
MVCモデルとは
MVCモデルとは、アプリケーションを3つの役割に分けて作る考え方です。
MVCは、Model、View、Controllerの頭文字を並べたものです。
日本語では、モデル、ビュー、コントローラと呼びます。
MVCモデルは、ユーザーが画面上で操作するアプリケーションを、整理して作るための代表的な構造です。Webアプリケーションでも、画面を表示し、ユーザーの操作を受け取り、処理を実行して結果を返すため、MVCモデルの考え方が役立ちます。
MVCモデルの3つの要素
| 要素 | 読み方 | 役割 |
|---|---|---|
| Model | モデル | アプリケーションの主な処理や、処理に関わるデータを担当する |
| View | ビュー | ユーザーに対して画面を表示する |
| Controller | コントローラ | ユーザーからの要求を受け取り、モデルやビューへ指示を出す |
MVCモデルでは、それぞれの要素が担当する役割を決めます。
モデルは処理を担当します。ビューは表示を担当します。コントローラは要求を受け取り、全体の流れを制御します。
MVCモデルを身近な役割で考える
MVCモデルは、最初は少し抽象的に感じるかもしれません。
その場合は、会社の仕事分担のように考えると分かりやすいです。
| MVCの要素 | 会社でたとえると | 内容 |
|---|---|---|
| コントローラ | 受付兼指示係 | 依頼を受け取り、必要な部署へ指示を出す |
| モデル | 実務係 | 実際の計算や処理を行う |
| ビュー | 表示係、案内係 | 結果を分かりやすく見せる |
たとえば、ユーザーが検索を行った場合、コントローラが検索リクエストを受け取ります。次に、モデルへ検索処理を依頼します。モデルが処理を行い、その結果をコントローラへ返します。最後に、コントローラはビューへ結果の表示を依頼します。
このように、役割を分けることで、誰が何を担当しているのかが分かりやすくなります。
MVCモデルの処理の流れ
MVCモデルでは、ユーザーの要求を受けてから結果を表示するまで、次のような流れで処理が進みます。
| 順番 | 処理の流れ |
|---|---|
| 1 | ユーザーが検索などの機能を要求する |
| 2 | コントローラが要求を受け付ける |
| 3 | コントローラがモデルに処理を依頼する |
| 4 | モデルが処理を実行する |
| 5 | コントローラがビューに結果表示を依頼する |
| 6 | ビューが結果画面を表示する |
| 7 | ユーザーが結果を見る |
この流れでは、コントローラが全体の入口になります。
ユーザーのリクエストを受け取ったコントローラは、自分ですべての処理を行うのではなく、必要に応じてモデルに処理を依頼します。そして、処理結果をビューへ渡し、画面として表示します。
図2:MVCモデルの処理の流れ

この図から分かること
MVCモデルでは、ユーザーからの要求をコントローラが受け取り、モデルに処理を依頼し、ビューに表示を依頼します。
モデルは実際の処理を担当し、ビューは結果を画面として表示します。コントローラは、リクエストを受け付けて全体の流れを調整する役割です。
このように担当を分けることで、処理、表示、制御が混ざりにくくなります。どこを修正すればよいかが分かりやすくなり、保守や拡張がしやすくなります。
MVCモデルのメリット
MVCモデルの大きなメリットは、役割を分けることでプログラムの見通しがよくなることです。
すべての処理を1つのサーブレットや1つのJSPにまとめてしまうと、入力値の取得、計算処理、画面表示が混ざってしまいます。最初は動いていても、あとで機能を追加したときに修正が難しくなります。
MVCモデルでは、役割ごとに担当を分けるため、変更したい内容に応じて見る場所を絞りやすくなります。
役割分担によるメリット
| メリット | 内容 |
|---|---|
| 修正しやすい | 表示だけを変えたい場合はビューを中心に確認できる |
| 拡張しやすい | 新しい処理を追加するときに役割を整理しやすい |
| 分担しやすい | Java処理担当と画面作成担当で作業を分けやすい |
| 見通しがよい | 処理、表示、制御の場所が分かりやすい |
| 保守しやすい | 影響範囲を考えやすくなる |
MVCモデルは、最初から完全に理解するのが難しい考え方です。
特に、まだ開発経験が少ない段階では、なぜここまで分ける必要があるのか実感しにくいかもしれません。
それでも、本格的なWebアプリケーションでは役割分担が大切になるため、まずは形として覚えていくことが大切です。
WebアプリケーションでのMVCの担当
サーブレットとJSPを使ったWebアプリケーションでは、MVCモデルの役割を次のように対応させて考えます。
| MVCの要素 | Webアプリケーションで担当するもの | 主な役割 |
|---|---|---|
| コントローラ | サーブレットクラス | リクエストを受け取り、処理の実行や画面表示を指示する |
| モデル | 一般的なJavaクラス | アプリケーションの主な処理やデータを担当する |
| ビュー | JSPファイル | HTMLとして結果画面を表示する |
この対応は、サーブレットとJSPを組み合わせて開発するときの基本パターンです。
リクエストを受けるのはサーブレットクラス、処理を担うのは一般的なJavaクラス、レスポンスの画面表示を担当するのはJSPファイル、と考えると整理しやすくなります。
コントローラはサーブレットクラスが担当する
コントローラは、ユーザーからの要求を受け取る役割です。
Webアプリケーションでは、ブラウザから送られてくるリクエストを最初に受け取り、必要な処理を呼び出し、次にどの画面を表示するかを決めます。
この役割には、サーブレットクラスが向いています。
サーブレットクラスはJavaを中心に書くため、次のような処理を行いやすいです。
| コントローラで行う処理 | 内容 |
|---|---|
| リクエストの受付 | ブラウザから送られた要求を受け取る |
| パラメータの取得 | request.getParameterなどで入力値を取得する |
| 処理の呼び出し | モデルに必要な処理を依頼する |
| 遷移先の判断 | 成功画面や失敗画面など、表示先を決める |
| 例外処理 | 問題が起きたときの対応を行う |
JSPファイルでもリクエストを受け取ることはできますが、複雑な制御や例外処理を多く書くには向いていません。
そのため、MVCモデルではサーブレットクラスがコントローラを担当します。
モデルは一般的なJavaクラスが担当する
モデルは、アプリケーションの主な処理や、処理に関わるデータを担当します。
たとえば、検索処理、計算処理、登録内容の管理、処理結果の保持などがモデルの役割です。
Webアプリケーションでは、モデルを一般的なJavaクラスとして作成します。
ここでいう一般的なJavaクラスとは、HttpServletRequestやHttpServletResponseのようなWebアプリケーション専用のクラスやインタフェースに依存しないクラスのことです。
モデルを一般的なJavaクラスにする理由
| 理由 | 内容 |
|---|---|
| 処理を分離できる | Web画面とは別に、処理の中身を整理できる |
| 再利用しやすい | 同じ処理を別の場所でも使いやすい |
| 分担しやすい | Webアプリケーションに詳しくない人でも処理部分を担当しやすい |
| テストしやすい | 画面やリクエストに依存しない処理として確認しやすい |
モデルは、Web画面に直接表示する役割ではありません。ユーザーの要求に応えるための処理やデータを担当する部分です。
この役割をサーブレットやJSPから分けておくことで、アプリケーション全体の構造が分かりやすくなります。
ビューはJSPファイルが担当する
ビューは、ユーザーに対して画面を表示する役割です。
Webアプリケーションでは、処理結果をHTMLとして表示する必要があります。この画面表示にはJSPファイルが向いています。
JSPファイルはHTMLをそのまま書けるため、画面の構造を作りやすいです。サーブレットクラスでもHTMLを出力できますが、out.printlnを大量に書く必要があり、画面が複雑になるほど読みづらくなります。
JSPがビューに向いている理由
| 理由 | 内容 |
|---|---|
| HTMLをそのまま書ける | 画面の構造が分かりやすい |
| 表示内容を確認しやすい | ブラウザに出る形をイメージしやすい |
| 画面担当者が扱いやすい | Java中心のサーブレットより画面作成に向いている |
| 表示処理に集中できる | コントローラやモデルの処理と分けやすい |
ビューは、処理の結果をユーザーに見せるための担当です。
サーブレットが制御を行い、モデルが処理を行い、JSPが表示を行う。この分担が、サーブレットとJSPを使ったMVCモデルの基本になります。
図3:サーブレット・Javaクラス・JSPの役割分担

この図から分かること
サーブレットとJSPを使ったWebアプリケーションでは、MVCモデルの役割を具体的なファイルやクラスに対応させて考えます。
コントローラはサーブレットクラスが担当します。リクエストを受け取り、必要な処理を呼び出し、どの画面を表示するかを決めます。
モデルは一般的なJavaクラスが担当します。アプリケーションの主な処理やデータを扱います。
ビューはJSPファイルが担当します。処理結果をHTMLとしてユーザーに表示します。
この3つを分けることで、Webアプリケーションの構造が整理され、保守や拡張がしやすくなります。
サーブレットだけで作る場合の難しさ
サーブレットクラスだけでも、リクエストを受け取り、処理を行い、HTMLを出力することはできます。
しかし、HTMLを出力するにはout.printlnを何度も書く必要があります。画面が複雑になると、Javaコードの中にHTML文字列が大量に並び、読みにくくなります。
サーブレットだけで画面を作る場合
| 困りやすい点 | 内容 |
|---|---|
| HTMLが読みにくい | out.printlnが多くなる |
| 画面修正が大変 | HTMLの一部を直すだけでもJavaコードを探す必要がある |
| デザイン担当が扱いにくい | Javaの知識が必要になりやすい |
| 処理と表示が混ざる | 制御処理とHTML出力が同じ場所に集まりやすい |
そのため、画面表示はJSPに任せるほうが自然です。
サーブレットは制御を担当し、JSPは表示を担当する。この分担が、Webアプリケーションを作りやすくする基本になります。
JSPだけで作る場合の難しさ
JSPファイルだけでも、リクエストパラメータを取得したり、Javaの処理を書いたりできます。
しかし、JSPに複雑な処理をたくさん書くと、HTMLとJavaコードが混ざりすぎて、逆に読みにくくなります。
JSPだけで処理まで行う場合
| 困りやすい点 | 内容 |
|---|---|
| Java処理が増える | 画面の中に複雑な処理が混ざる |
| 役割が分かりにくい | 表示担当なのか処理担当なのか曖昧になる |
| 修正しづらい | 画面修正と処理修正が同じファイルに集中する |
| 見通しが悪くなる | HTMLの中に条件分岐や例外処理が増えやすい |
JSPはHTMLを表示するのが得意ですが、複雑な制御や処理をまとめる場所としては向いていません。
そのため、処理の受付や制御はサーブレットへ、主な処理はJavaクラスへ、表示はJSPへ分ける考え方が重要になります。
最初は形から覚えてよい
MVCモデルは、開発経験が少ない段階では少し難しく感じるかもしれません。
なぜ3つに分ける必要があるのか、なぜサーブレットとJSPを組み合わせるのか、最初はすぐに実感できないこともあります。
それでも、まずは次の基本パターンを覚えておくとよいでしょう。
MVCモデルとWebアプリケーションの基本パターン
| 役割 | 担当 |
|---|---|
| リクエストを受ける | サーブレットクラス |
| 主な処理を行う | 一般的なJavaクラス |
| レスポンス画面を表示する | JSPファイル |
この形は、サーブレットとJSPを使ったWebアプリケーション開発の基本的な考え方になります。
最初は完全に理解できなくても問題ありません。実際にいくつかのプログラムをMVCモデルに沿って作っていくうちに、役割を分ける便利さが少しずつ見えてきます。
これから意識したい黄金パターン
これから本格的なWebアプリケーションを作っていくときは、次の流れを意識すると理解しやすくなります。
| 流れ | 担当 |
|---|---|
| ユーザーがリクエストする | ブラウザ |
| リクエストを受け取る | サーブレットクラス |
| 必要な処理を行う | 一般的なJavaクラス |
| 表示する画面を作る | JSPファイル |
| ユーザーが結果を見る | ブラウザ |
サーブレットは受付と制御、Javaクラスは処理、JSPは表示。この3つの役割分担を、まずは基本形として覚えておきましょう。
MVCモデルは、複雑なWebアプリケーションを作るための土台になります。これから先の学習では、この基本形に沿ったプログラムを見ながら、少しずつMVCモデルに慣れていくことが大切です。
