
サーブレット&JSPの基本|Spring FrameworkによるWebアプリ開発の基本
ServletとJSPで学んだMVCの考え方を、Springでさらに実践的に。フレームワークの骨組みに沿って、迷わず作れるWebアプリ開発へ進もう
これまで、Servlet、JSP、リクエスト、レスポンス、スコープ、MVCモデル、DAO、データベースアクセスなど、JavaでWebアプリケーションを作るための基本を学習してきました。
これらの知識を使えば、小規模なWebアプリケーションを自分で設計し、作成できるようになります。
しかし、実際の開発現場では、1人だけで作るとは限りません。
複数人で分担して作業することが多く、担当者ごとに書き方やクラスの分け方が変わってしまうことがあります。
たとえば、ある人はJSPからDAOを呼び出してしまうかもしれません。
別の人はサーブレットから直接DAOを呼び出してしまうかもしれません。
また、モデルに書くべき処理をコントローラに入れてしまったり、画面表示用のJSPに処理を書き込みすぎたりすることもあります。
せっかくMVCモデルで役割を分けようとしても、開発者ごとに作り方がばらばらになると、プログラム全体の統一感が失われます。
統一感がなくなると、後から修正しづらくなり、不具合の原因にもなります。
そこで使われるのが、フレームワークです。
フレームワークは、Webアプリケーションを作るための基本的な骨組みを用意してくれる仕組みです。
その骨組みに沿って開発することで、チーム全体で作り方をそろえやすくなります。
今回学習するSpring Frameworkは、JavaのWebアプリケーション開発で広く利用されている代表的なフレームワークです。
Springは強力な機能をたくさん持っていますが、その根本には、これまで学んできたMVCモデルの考え方があります。
ServletやJSPで学んだ知識があれば、Spring MVCの基本的な考え方も自然に理解しやすくなります。
この記事では、フレームワークとは何か、Spring Frameworkにはどのようなモジュールがあるのか、Spring MVCではMVCモデルがどのように実現されるのか、そしてSpring BootとSpring Initializrを使ってSpringプロジェクトspring_studyを作成する流れを学習します。
フレームワークとは
フレームワークとは、アプリケーションを作るための骨組みを提供してくれる仕組みです。
Webアプリケーションを一から自由に作ろうとすると、クラスの分け方、リクエストの受け取り方、画面表示の方法、データの受け渡し方などを、すべて自分たちで決める必要があります。
自由度が高いことは良い面もあります。
しかし、チーム開発では、その自由さが作り方のばらつきにつながることがあります。
作り方がばらつく例
| 状況 | 起こりやすい問題 |
|---|---|
| JSPからDAOを直接呼び出す | 画面表示とデータベース処理が混ざる |
| サーブレットに処理を書きすぎる | コントローラが複雑になりすぎる |
| クラス名やパッケージ構成が人によって違う | プロジェクト全体の見通しが悪くなる |
| 画面遷移の作り方が統一されない | 修正時に流れを追いにくくなる |
| 共通処理の書き方がばらばらになる | 同じような処理が複数箇所に重複する |
フレームワークを使うと、開発者はあらかじめ用意された骨組みに沿ってプログラムを作ります。
そのため、完全に自由に作る場合と比べると、ある程度の制限があります。
しかし、この制限があることで、作り方を統一しやすくなります。
フレームワークは開発の骨組み
フレームワークを家づくりにたとえると、柱や梁などの基本構造があらかじめ用意されている状態に近いです。
開発者は、その構造に沿って部屋を作ったり、内装を整えたりしていきます。
つまり、フレームワークは、開発者が毎回迷いやすい部分をあらかじめ整えてくれます。
フレームワークが提供するもの
| 提供するもの | 内容 |
|---|---|
| 基本構造 | アプリケーション全体の作り方の土台 |
| 役割分担 | コントローラ、モデル、ビューなどを分けやすくする考え方 |
| 便利な機能 | リクエスト処理、オブジェクト管理、データベース連携など |
| 統一された作り方 | チーム全体で同じ考え方に沿って開発しやすくする |
| 品質を保つ仕組み | 作り方のばらつきを抑え、不具合を減らしやすくする |
フレームワークを使うと、開発者は骨組みそのものを毎回考える必要が少なくなります。
その分、業務ロジックや画面の仕様など、本来集中したい部分に力を注ぎやすくなります。
フレームワークを使うメリット
フレームワークを使う大きなメリットは、開発の進め方をそろえやすくなることです。
特にチーム開発では、担当者ごとに作り方が違うと、後から読んだ人が理解しづらくなります。
Springのようなフレームワークを使うと、コントローラ、サービス、ビューなどの役割を分けやすくなり、チーム全体で同じ方向を向いて開発できます。
フレームワークを使うメリット
| メリット | 内容 |
|---|---|
| 作り方を統一できる | チーム内でクラスの役割や配置をそろえやすい |
| 開発効率が上がる | よく使う仕組みを自分で毎回作らなくてよい |
| 品質を保ちやすい | 設計に反した実装を減らしやすい |
| 役割分担が明確になる | MVCモデルに沿った開発を進めやすい |
| 経験差を吸収しやすい | 開発者ごとの書き方の差を小さくできる |
フレームワークは、単に便利な道具を集めたものではありません。
開発の進め方や構造を整え、チーム全体で安定した品質を保つための仕組みでもあります。
図1:フレームワークはWebアプリ開発の骨組み

この図から分かること
フレームワークを使わずに自由に開発すると、担当者ごとに作り方がばらばらになりやすくなります。
JSPからDAOを直接呼び出したり、サーブレットに処理を書きすぎたりすると、MVCモデルの役割分担が崩れてしまいます。
フレームワークを使うと、Controller、Service、View、Modelなどの役割を整理しやすくなります。
一定の制限に従って作ることで、チーム全体の書き方をそろえやすくなり、保守しやすいWebアプリケーションを作りやすくなります。
フレームワークは編集者のような存在
フレームワークは、漫画家にとっての編集者のような存在だと考えると分かりやすいです。
漫画家が作品を作るとき、編集者は王道の構成や読者に伝わりやすい展開を提案します。
たとえば、主人公が旅に出る、ライバルと出会う、敗北する、修行する、再挑戦する、仲間が増える、というような流れです。
このような骨組みがあると、漫画家は物語全体の構成で迷いすぎず、キャラクターの魅力や具体的な場面づくりに集中できます。
Webアプリケーション開発でも同じです。
フレームワークは、アプリケーションの王道の構造を提供します。
開発者は、その構造に沿って、業務ロジックや画面、データの扱いに集中できます。
編集者とフレームワークの対応
| 漫画制作 | Webアプリケーション開発 |
|---|---|
| 編集者が物語の骨組みを示す | フレームワークがアプリケーションの骨組みを示す |
| 王道の展開を参考にする | MVCなどの定番構造に沿って作る |
| 漫画家は表現に集中する | 開発者は機能や業務ロジックに集中する |
| アシスタントや道具を整える | 便利な機能や開発支援機能を提供する |
| 品質を保ちながら制作する | 統一感と品質を保ちながら開発する |
フレームワークは、開発者の自由をすべて奪うものではありません。
むしろ、迷いやすい基本構造を整えることで、開発者が本来考えるべき部分に集中できるようにしてくれます。
Spring Frameworkとは
Spring Frameworkは、Javaでアプリケーションを開発するときによく利用されるフレームワークです。
特にWebアプリケーション開発では、多くのプロジェクトで使われています。
Spring Frameworkは、1つの大きな機能だけでできているわけではありません。
複数のモジュールと呼ばれる部品で構成されています。
開発するアプリケーションの内容に応じて、必要なモジュールを組み合わせて使います。
Spring Frameworkの代表的なモジュール
Spring Frameworkには、さまざまな機能を担当するモジュールがあります。
Spring Frameworkの代表的なモジュール
| モジュール名 | 説明 |
|---|---|
| Spring Core | 必要な部品であるオブジェクトの作成や管理を自動的に行う仕組みを提供する |
| Spring MVC | MVCパターンに基づいたWebアプリケーションを作るための機能を提供する |
| Spring Security | 認証やアクセス制限などのセキュリティ機能を提供する |
| Spring Data | データベースとのやり取りを簡単にする機能を提供する |
| Spring AOP | ログ出力やトランザクション管理など、横断的な処理を扱いやすくする |
| Spring Transaction | データベースのトランザクション管理をしやすくする |
| Spring Test | テスト環境を整え、JUnitなどとの連携をしやすくする |
Spring Coreは、Spring全体の基盤となるモジュールです。
そのため、Spring Frameworkを使うときには基本的に利用されます。
Spring MVCは、Webアプリケーション開発で特によく使われるモジュールです。
Spring Securityは、ログインやアクセス制限などのセキュリティ機能を扱うときに使います。
Spring Dataは、データベースとのやり取りを簡単にしたいときに役立ちます。
このように、Spring Frameworkは目的に応じて複数の機能を組み合わせて使う仕組みです。
モジュールを組み合わせて使う
Spring Frameworkを使って開発するといっても、すべてのモジュールを必ず使うわけではありません。
作るアプリケーションに必要な機能を選んで使います。
たとえば、Webアプリケーションを作るなら、Spring CoreとSpring MVCを使うことになります。
データベースを扱うなら、Spring Dataを組み合わせることがあります。
認証やアクセス制限が必要なら、Spring Securityを組み合わせることもあります。
モジュールの組み合わせ例
| 作りたいもの | 組み合わせ例 |
|---|---|
| 基本的なWebアプリケーション | Spring Core、Spring MVC |
| データベースを使うWebアプリケーション | Spring Core、Spring MVC、Spring Data |
| 認証機能のあるWebアプリケーション | Spring Core、Spring MVC、Spring Security |
| トランザクション管理が重要な業務システム | Spring Core、Spring Transaction |
| テストを重視するアプリケーション | Spring Core、Spring Test |
このように、Spring Frameworkは必要なモジュールを組み合わせて使います。
ただし、最初からモジュール名を細かく覚えすぎる必要はありません。
入門段階では、SpringはWebアプリケーション開発を効率よく進めるための仕組みであり、その中心にMVCの考え方がある、と押さえておくと理解しやすくなります。
Spring MVCとは
Spring Frameworkの中でも、Webアプリケーション開発に使われる中心的な仕組みがSpring MVCです。
Spring MVCは、その名前のとおり、MVCモデルに基づいてWebアプリケーションを作るための機能を提供します。
これまでServletとJSPで学習してきたMVCモデルでは、次のように役割を分けていました。
ServletとJSPで学んだMVCモデル
| 役割 | 担当 | 内容 |
|---|---|---|
| Model | Javaクラス、Logicクラス、DAOなど | アプリケーションの処理やデータを担当する |
| View | JSP | 画面表示を担当する |
| Controller | サーブレット | リクエストを受け取り、処理の流れを制御する |
Spring MVCでも、この考え方は大きく変わりません。
WebアプリケーションをModel、View、Controllerに分けて考えます。
ただし、Controllerの作り方が変わります。
これまでの学習では、開発者がサーブレットクラスを作ってコントローラとして利用していました。
Spring MVCでは、開発者が作るコントローラは通常のJavaクラスとして作成します。
その裏側では、DispatcherServletという特別なサーブレットが動いています。
DispatcherServletの役割
Spring MVCでは、開発者が作成したコントローラを直接サーブレットとして動かすのではありません。
内部では、DispatcherServletという特別なサーブレットがリクエストを受け取ります。
DispatcherServletは、受け取ったリクエストに応じて、どのコントローラを実行するかを判断します。
そして、開発者が作成したコントローラクラスを呼び出します。
DispatcherServletとコントローラ
| 部品 | 役割 |
|---|---|
| DispatcherServlet | リクエストを受け取り、適切なコントローラを呼び出す |
| コントローラクラス | 通常のJavaクラスとして作成し、処理の入口を担当する |
| サービスクラス | アプリケーションの主な処理を担当する |
| ビュー | JSPなどを使って結果を表示する |
ServletとJSPで学習したときは、LoginServletやMainServletのようなサーブレットを自分で作りました。
Spring MVCでは、リクエストを受け取る基本的な入口はDispatcherServletが担当します。
開発者は、その後に呼び出されるコントローラクラスを作成します。
この仕組みにより、開発者はサーブレットの細かい処理よりも、どのリクエストで何をするのかというアプリケーションの処理に集中しやすくなります。
図2:Spring MVCにおけるMVCモデルの実現イメージ

この図から分かること
Spring MVCでは、ブラウザから送られたリクエストをDispatcherServletが受け取ります。
DispatcherServletは、リクエストの内容に応じて、開発者が作成したコントローラを呼び出します。
コントローラは、必要な処理をサービスに依頼します。
サービスは、アプリケーションの中心となる処理を行います。
処理結果はビューに渡され、JSPなどを使って画面に表示されます。
これまでServletとJSPで学んだMVCモデルと同じ考え方を、Spring MVCではより統一された仕組みの中で実現できます。
Spring MVCのModel
Spring MVCでも、Modelの主な役割はこれまでと同じです。
Modelは、アプリケーションの主な処理と、その処理で扱うデータを担当します。
Springでは、アプリケーションの主な処理を担当するクラスをサービスと呼びます。
サービスは、ServletとJSPの学習で作成してきたLogicクラスに近い存在です。
Modelに関係するクラス
| 種類 | 内容 |
|---|---|
| Service | アプリケーションの主な処理を担当する |
| Entity | データベースのテーブルのレコードを表す |
| DTO | クラスや処理の間で受け渡すデータをまとめる |
| 通常のJavaクラス | 処理に必要なデータや部品を表す |
データベースのテーブルの1件分を表すクラスは、Entityと呼ばれます。
一方、画面や処理の間でデータを受け渡すために作るクラスは、DTOと呼ばれることがあります。
呼び方は用途によって変わりますが、共通しているのは、どちらもアプリケーション内で扱う情報をまとめるクラスだということです。
Spring MVCのView
Viewは、画面表示を担当します。
これまでの学習では、JSPを使って画面を表示してきました。
Spring MVCでも、ビューにはさまざまな技術を使うことができます。
この記事では、これまで学んできた内容を活かすために、JSPをビューとして使う前提で説明します。
Viewの役割
| 項目 | 内容 |
|---|---|
| 役割 | 処理結果を画面に表示する |
| 使用する技術 | JSPなど |
| 表示する内容 | コントローラやサービスから渡された結果 |
| 注意点 | 画面表示に集中し、業務処理を書きすぎない |
JSPは画面表示を担当します。
データベースアクセスや複雑な処理は、JSPに書くのではなく、サービスやDAOなどのモデル側に分けて考えます。
この考え方は、これまで学んできたMVCモデルと同じです。
Spring Bootとは
Spring Frameworkは便利ですが、開発を始めるために多くの設定が必要になります。
使うモジュールを選び、設定ファイルを準備し、プロジェクト構成を整える必要があります。
そこで登場するのがSpring Bootです。
Spring Bootは、Springを使ったアプリケーション開発を始めやすくするための仕組みです。
Springを道具箱にたとえるなら、Spring Bootはすぐに使えるスターターキットのようなものです。
必要な部品や設定があらかじめ整えられているため、複雑な初期設定を行わずに開発を始めやすくなります。
SpringとSpring Bootのイメージ
| 種類 | イメージ | 内容 |
|---|---|---|
| Spring Framework | 道具箱 | 便利な部品がたくさんあるが、選び方や設定が必要 |
| Spring Boot | スターターキット | よく使う部品や設定がまとまり、すぐ始めやすい |
Spring Bootでは、スターターと呼ばれる仕組みを使って、必要な機能をまとめて導入できます。
たとえば、H2 Databaseを使いたい場合、H2 Databaseのスターターを選ぶことで、手動でJDBCドライバを配置しなくても利用できるようになります。
Spring Initializrとは
Spring Bootでプロジェクトを作成するときに使うのが、Spring Initializrです。
Spring Initializrは、Springプロジェクトを作成するためのツールです。
プロジェクト名、使用するJavaのバージョン、プロジェクトの種類、利用する機能などを指定すると、必要な設定が整ったSpringプロジェクトを自動生成してくれます。
Spring Initializrで指定する主な情報
| 項目 | 今回の設定 |
|---|---|
| プロジェクト名 | spring_study |
| タイプ | Maven |
| Javaバージョン | 25 |
| Spring Bootバージョン | 4.0.x |
| 使用する機能 | H2 Database |
Spring Bootバージョンでは、4.0.xを選びます。
ただし、バージョン名の後ろにSNAPSHOT、M1、M2、RC1、RC2などが付いているものは選ばないようにします。
これらは正式版ではなく、開発途中や候補版として扱われる場合があるため、学習では安定したものを選ぶのが分かりやすいです。
Springプロジェクトを作成する
Springを使って開発する場合、これまで作成してきた動的Webプロジェクトではなく、Spring専用のプロジェクトを作成します。
この記事では、このプロジェクトをSpringプロジェクトと呼びます。
Eclipseでは、Springスターター・プロジェクトを使って作成します。
Springプロジェクト作成の流れ
| 手順 | 操作 |
|---|---|
| 1 | ファイルメニューを開く |
| 2 | 新規を選択する |
| 3 | Spring スターター・プロジェクトを選択する |
| 4 | プロジェクト名にspring_studyを入力する |
| 5 | タイプでMavenを選択する |
| 6 | Javaバージョンで25を選択する |
| 7 | 次へをクリックする |
| 8 | Spring Bootバージョンで4.0.xを選択する |
| 9 | 使用頻度高からH2 Databaseを選択する |
| 10 | 完了をクリックする |
| 11 | パッケージ・エクスプローラーにspring_studyが追加されたことを確認する |
H2 Databaseを選択しておくと、H2 DatabaseのJDBCドライバを手動で配置しなくても、プロジェクト内で利用できるようになります。
これまでの動的Webプロジェクトでは、WEB-INF/libにJARファイルを配置する作業を行っていました。
Spring Bootでは、スターターによって必要な依存関係をまとめて扱えるため、準備の手間が少なくなります。
Spring プロジェクトの作成方法
「ファイル」メニュー→「新規」→「Spring スターター・プロジェクト(Spring initialzr)」を選択します。

プロジェクト名(半角英数)を「名前」に入力し、以下の開発環境に関する設定を選択し、「次へ」をクリックします。
-プロジェクト名: spring_study
- タイプ: Maven
- Javaバージョン: 25

Spring Bootのバージョンと、「使用頻度高」でプロジェクトに組み込む機能(スタータ)を選択し、「完了」をクリックします。
- Spring Bootバージョン: 4.1.x
※バージョンの後ろにSNAPSHOT、M1、M2、RC1、RC2といった英字がついているものは選択しない。
- 使用頻度高: H2 Databaseを選択(H2 DatabaseのJDBCドライバを手動で配置しなくても、プロジェクト内で利用できるようになります)

パッケージ・エクスプローラーにSpringプロジェクトが追加されていることを確認します。
クリックして展開すると下図のような構成になっています。

図3:Spring Initializrでspring_studyプロジェクトを作成する流れ

この図から分かること
Spring Bootでは、Spring Initializrを使ってSpringプロジェクトを作成します。
プロジェクト名、タイプ、Javaバージョン、Spring Bootバージョン、使用する機能を指定すると、必要な設定が整ったプロジェクトが作成されます。
今回のプロジェクト名はspring_studyです。
タイプはMaven、Javaバージョンは25、Spring Bootバージョンは4.0.xを選びます。
使用する機能としてH2 Databaseを選ぶことで、H2 Databaseをプロジェクト内で利用できる状態にできます。
Springプロジェクトの構成
Springプロジェクトを作成すると、パッケージ・エクスプローラーにspring_studyプロジェクトが追加されます。
プロジェクトを開くと、src/main/javaの中にベースパッケージが作成されています。
今回のサンプルでは、ベースパッケージ名をcom.example.demoとします。
このベースパッケージの中に、controllerやmodelなどのサブパッケージを作成して、役割ごとにクラスを配置します。
Springプロジェクトのパッケージ構成例
src/main/java
└─ com.example.demo
├─ controller
│ └─ コントローラクラス
└─ model
└─ サービスクラスcontrollerパッケージには、リクエストを受け取るコントローラクラスを配置します。
modelパッケージには、アプリケーションの処理を担当するサービスクラスや、データを表すクラスを配置します。
このように、Springプロジェクトでも役割ごとにパッケージを分けて整理します。

ベースパッケージとは
Springプロジェクトを作成するときには、パッケージ名を指定します。
このパッケージは、ベースパッケージと呼ばれます。
ベースパッケージは、Springアプリケーションの中心になるパッケージです。
開発者は、このベースパッケージの中にサブパッケージを作り、クラスを配置していきます。
ベースパッケージ内に作る主なパッケージ
| パッケージ | 役割 |
|---|---|
| com.example.demo.controller | コントローラクラスを配置する |
| com.example.demo.model | サービスクラスやデータを表すクラスを配置する |
ServletとJSPの学習では、servletパッケージやmodelパッケージを作成していました。
Springでも、役割ごとにパッケージを分ける考え方は同じです。
違いは、Springプロジェクトではベースパッケージの下にサブパッケージを作っていく点です。
動的Webプロジェクトとの違い
これまでの学習では、動的Webプロジェクトを作成し、ServletとJSPを使ってWebアプリケーションを作ってきました。
Springを使う場合は、Spring専用のプロジェクトを作成します。
動的WebプロジェクトとSpringプロジェクトの違い
| 項目 | 動的Webプロジェクト | Springプロジェクト |
|---|---|---|
| 主な作成方法 | Eclipseの動的Webプロジェクトとして作成する | Spring Initializrで作成する |
| コントローラ | サーブレットクラスとして作成する | 通常のJavaクラスとして作成する |
| リクエスト受付 | 開発者が作ったサーブレットが受け取る | DispatcherServletが受け取り、コントローラを呼び出す |
| 依存関係 | JARをWEB-INF/libに配置する場合がある | スターターでまとめて設定しやすい |
| 代表的な構成 | servlet、model、dao、WEB-INF/jspなど | com.example.demo配下のcontroller、modelなど |
Springプロジェクトでは、開発者がすべてのサーブレットを直接作るのではありません。
DispatcherServletが中心になり、開発者が作成したコントローラクラスを呼び出します。
ただし、MVCモデルの考え方は変わりません。
コントローラ、モデル、ビューの役割を分ける点は、これまで学んできた内容とつながっています。
Springで学習を進めるときの見方
Spring Frameworkは多くの機能を持つため、最初は難しく見えるかもしれません。
しかし、最初からすべてのモジュールや仕組みを細かく理解しようとする必要はありません。
まずは、これまで学んだMVCモデルと対応させて考えると分かりやすくなります。
Springを理解するための対応表
| これまでの学習 | Springでの考え方 |
|---|---|
| サーブレット | DispatcherServletとコントローラクラス |
| Logicクラス | Serviceクラス |
| JavaBeans | EntityやDTO |
| JSP | ViewとしてのJSP |
| 動的Webプロジェクト | Springプロジェクト |
| JDBCドライバの手動配置 | スターターによる依存関係の準備 |
Springは、これまで学んだことを否定するものではありません。
むしろ、ServletとJSPで学んだMVCモデルを、より統一された形で実践しやすくするための仕組みです。
ここまでで押さえたいこと
Spring Frameworkは、JavaのWebアプリケーション開発で広く利用されるフレームワークです。
フレームワークは、アプリケーション開発の骨組みを提供し、作り方を統一しやすくします。
Spring Frameworkには、Spring Core、Spring MVC、Spring Security、Spring Data、Spring AOP、Spring Transaction、Spring Testなどのモジュールがあります。
Webアプリケーション開発では、特にSpring MVCが重要です。
Spring MVCでは、DispatcherServletがリクエストを受け取り、開発者が作成したコントローラを呼び出します。
ModelはサービスやEntity、DTOなどとして作成します。
ViewにはJSPなどを使えます。
Spring Bootを使うと、Springの複雑な初期設定を少なくし、開発を始めやすくなります。
Spring Initializrを使えば、spring_studyのようなSpringプロジェクトを作成できます。
これまで作成してきた動的Webプロジェクトとは違い、SpringではSpring専用のプロジェクトを作成します。
ただし、MVCモデルの考え方は共通しています。
ServletとJSPで学んだ内容を土台にして、Spring FrameworkによるWebアプリケーション開発へ進んでいきましょう。
