0.はじめに
本講義では、Java で Web アプリケーション を作ります。Web アプリケーションは、ブラウザーからアクセスして利用するアプリケーションです。ネット書店、SNS、予約サイトなど、ブラウザーで URL を開いて操作するものはこれにあたります。
題材は書店アプリケーションです。ブラウザーで書籍一覧のページを開くと、在庫の書籍が表示されます。
書籍一覧
タイトル 価格こころ 473円吾輩は猫である 693円ノルウェイの森 上 715円この一覧は、ページにあらかじめ固定で書かれた内容ではありません。ページを開くたびに、サーバーがデータベースから現在の書籍を取得し、その都度一覧の画面を組み立てて返します。書籍を追加すれば、次にページを開いたときの一覧に反映されます。
本講義では、この「リクエストに応じて画面を組み立てて返す」処理を、一覧の表示・検索・書籍の登録の順に実装します。
1. Web アプリケーションの構成
Section titled “1. Web アプリケーションの構成”Web アプリケーションは、クライアント・サーバー・データベース の 3 つが連携して動作します。
それぞれの役割は次の通りです。
| 層 | 役割 | 本講義で使うもの |
|---|---|---|
| クライアント | 利用者が操作し、画面を表示する | ブラウザー |
| サーバー | 要求を受け取り、処理して画面を組み立てる | Tomcat + サーブレット(Java) |
| データベース | データを保存し、要求に応じて返す | MySQL |
ブラウザーがサーバーにリクエストを送ると、サーバーは必要なデータをデータベースから取得し、画面を組み立ててレスポンスとして返します。ブラウザーとサーバーの間で送受信されるのがリクエストとレスポンス、サーバーとデータベースの間で送受信されるのが SQL とその結果です。
クライアント・サーバー は、データベースの操作でも登場した構成です。そこではプログラムがデータベースに対するクライアントでした。Web アプリケーションのサーバーは、ブラウザーに対してはサーバーとしてレスポンスを返し、データベースに対してはクライアントとして SQL を送ります。
1-1. サーバーを構成するソフトウェア
Section titled “1-1. サーバーを構成するソフトウェア”サーバーがリクエストを受け取ってレスポンスを返すまでの処理は、2 種類に分かれます。
| 処理 | 内容 |
|---|---|
| 通信の処理 | 受け取った通信から要求の内容を読み取り、結果を通信の形式に整えて返す。アプリケーションの種類によらず共通 |
| ビジネスロジック | 要求に応じて返す内容を組み立てる。書籍一覧の取得や検索など、アプリケーション固有 |
通信の処理は、アプリケーションの種類によらず同じ内容です。これを個別に実装する必要はなく、専用のソフトウェアが担います。本講義で使う Tomcat が、リクエストの受け付けと、通信の読み取り・書き出しを担当します。
ビジネスロジックを記述するのが サーブレット です。サーブレットは、1 つのリクエストに対する処理を記述した Java のクラスで、「書籍一覧のリクエストに対し、データベースから書籍を取得して一覧の画面を返す」といった、アプリケーション固有の処理を担います。
2. Web フレームワーク
Section titled “2. Web フレームワーク”Tomcat は通信の処理を担いますが、サーブレットに記述するビジネスロジックの内側にも、アプリケーションの種類によらず定型的に必要となる処理が多く残ります。
- リクエストパラメーターの取得
- 画面の組み立て
- データベースとの接続・操作
- 複数のリクエストにまたがる状態の保持
これらを個別に実装すると記述量が増え、誤りも混入しやすくなります。こうした定型処理を部品として提供し、アプリケーション固有の処理を記述するだけで動作する基盤が Web フレームワーク です。フレームワークが定型処理を担い、開発者はその上にアプリケーション固有の処理を実装します。
Java の Web フレームワークの代表が Spring Boot です。Spring Boot では Web アプリケーションに必要な部品があらかじめ組み込まれており、少ないコードで一覧の表示やデータの登録を実装できます。本講義は、最終的にこの Spring Boot で書店アプリケーションを実装することを目標とします。
2-1. 講義の進め方
Section titled “2-1. 講義の進め方”Spring Boot を最初から使うと、少ないコードで動作する一方、フレームワークが内部で何を行っているかが把握しにくくなります。そのため本講義は 2 段階で進めます。
-
サーブレットで基盤を理解する
リクエストを受け取ってレスポンスを返す処理を、サーブレットで記述します。Web アプリケーションが動作する仕組みを、コードを通して把握します。
-
Spring Boot で書き直す
同じアプリケーションを Spring Boot で再実装し、少ないコードで記述できることを確認します。サーブレットで基盤を理解しておくことで、Spring Boot が内部で何を担っているかを把握できます。
3. プロジェクトの準備
Section titled “3. プロジェクトの準備”開発に使う Spring Boot のプロジェクトを、VS Code の Spring Initializr で作成します。Spring Initializr は、必要なライブラリをまとめて取り込んだ Java プロジェクトの雛形を生成する機能です。JDBC のプロジェクトと同じ手順で、依存関係だけが変わります。
-
Spring Initializr を開く
コマンドパレット(
Ctrl + Shift + P)でSpring Initializr: Create a Maven Projectを選びます。 -
プロジェクトの設定を選ぶ
Java のバージョン、グループ名(
com.example)、アーティファクト名(hello)を順に入力します。パッケージング形式はJarを選びます。 -
依存関係に Spring Web を追加する
依存関係の選択画面で Spring Web を選びます。これにより、Tomcat を含む Web アプリケーション用の部品がプロジェクトに追加されます。選択後、生成先のフォルダーを指定し、生成されたプロジェクトを開いて作業します。
生成されたプロジェクトの主なファイルは、次の構成です。
Directoryhello/
Directorysrc/main/java/com/example/hello/
- HelloApplication.java
Directorysrc/main/resources/
- application.properties
- pom.xml
HelloApplication.java が、@SpringBootApplication の付いたメインクラスです。以降で作成するサーブレットなどの Java ファイルは、このクラスと同じ src/main/java/com/example/hello/ に置きます。
package com.example.hello;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplicationpublic class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); }}main メソッドの SpringApplication.run が Tomcat を起動します。通常の Java プログラムと同様に、main メソッドの上に表示される Run | Debug の Run で起動できます。起動すると、ターミナルに Started HelloApplication と出力され、ポート 8080 でリクエストを受け付ける状態になります。停止するには、ターミナルの停止ボタン(赤い四角)を押します。
この時点では応答するサーブレットが存在しないため、ブラウザーでアクセスしても画面は表示されません。サーブレットを実装して登録する手順は、次章で扱います。