Skip to content
Playground

0.はじめに

本講義では、Java で Web アプリケーション を作ります。Web アプリケーションは、ブラウザーからアクセスして利用するアプリケーションです。ネット書店、SNS、予約サイトなど、ブラウザーで URL を開いて操作するものはこれにあたります。

題材は書店アプリケーションです。ブラウザーで書籍一覧のページを開くと、在庫の書籍が表示されます。

書籍一覧
タイトル 価格
こころ 473円
吾輩は猫である 693円
ノルウェイの森 上 715円

この一覧は、ページにあらかじめ固定で書かれた内容ではありません。ページを開くたびに、サーバーがデータベースから現在の書籍を取得し、その都度一覧の画面を組み立てて返します。書籍を追加すれば、次にページを開いたときの一覧に反映されます。

本講義では、この「リクエストに応じて画面を組み立てて返す」処理を、一覧の表示・検索・書籍の登録の順に実装します。

Web アプリケーションは、クライアントサーバーデータベース の 3 つが連携して動作します。

クライアント・サーバー・データベースの 3 層構成

それぞれの役割は次の通りです。

役割本講義で使うもの
クライアント利用者が操作し、画面を表示するブラウザー
サーバー要求を受け取り、処理して画面を組み立てるTomcat + サーブレット(Java)
データベースデータを保存し、要求に応じて返すMySQL

ブラウザーがサーバーにリクエストを送ると、サーバーは必要なデータをデータベースから取得し、画面を組み立ててレスポンスとして返します。ブラウザーとサーバーの間で送受信されるのがリクエストとレスポンス、サーバーとデータベースの間で送受信されるのが SQL とその結果です。

クライアント・サーバー は、データベースの操作でも登場した構成です。そこではプログラムがデータベースに対するクライアントでした。Web アプリケーションのサーバーは、ブラウザーに対してはサーバーとしてレスポンスを返し、データベースに対してはクライアントとして SQL を送ります。

1-1. サーバーを構成するソフトウェア

Section titled “1-1. サーバーを構成するソフトウェア”

サーバーがリクエストを受け取ってレスポンスを返すまでの処理は、2 種類に分かれます。

処理内容
通信の処理受け取った通信から要求の内容を読み取り、結果を通信の形式に整えて返す。アプリケーションの種類によらず共通
ビジネスロジック要求に応じて返す内容を組み立てる。書籍一覧の取得や検索など、アプリケーション固有

通信の処理は、アプリケーションの種類によらず同じ内容です。これを個別に実装する必要はなく、専用のソフトウェアが担います。本講義で使う Tomcat が、リクエストの受け付けと、通信の読み取り・書き出しを担当します。

ビジネスロジックを記述するのが サーブレット です。サーブレットは、1 つのリクエストに対する処理を記述した Java のクラスで、「書籍一覧のリクエストに対し、データベースから書籍を取得して一覧の画面を返す」といった、アプリケーション固有の処理を担います。

Tomcat は通信の処理を担いますが、サーブレットに記述するビジネスロジックの内側にも、アプリケーションの種類によらず定型的に必要となる処理が多く残ります。

  • リクエストパラメーターの取得
  • 画面の組み立て
  • データベースとの接続・操作
  • 複数のリクエストにまたがる状態の保持

これらを個別に実装すると記述量が増え、誤りも混入しやすくなります。こうした定型処理を部品として提供し、アプリケーション固有の処理を記述するだけで動作する基盤が Web フレームワーク です。フレームワークが定型処理を担い、開発者はその上にアプリケーション固有の処理を実装します。

Java の Web フレームワークの代表が Spring Boot です。Spring Boot では Web アプリケーションに必要な部品があらかじめ組み込まれており、少ないコードで一覧の表示やデータの登録を実装できます。本講義は、最終的にこの Spring Boot で書店アプリケーションを実装することを目標とします。

Spring Boot を最初から使うと、少ないコードで動作する一方、フレームワークが内部で何を行っているかが把握しにくくなります。そのため本講義は 2 段階で進めます。

  1. サーブレットで基盤を理解する

    リクエストを受け取ってレスポンスを返す処理を、サーブレットで記述します。Web アプリケーションが動作する仕組みを、コードを通して把握します。

  2. Spring Boot で書き直す

    同じアプリケーションを Spring Boot で再実装し、少ないコードで記述できることを確認します。サーブレットで基盤を理解しておくことで、Spring Boot が内部で何を担っているかを把握できます。

開発に使う Spring Boot のプロジェクトを、VS Code の Spring Initializr で作成します。Spring Initializr は、必要なライブラリをまとめて取り込んだ Java プロジェクトの雛形を生成する機能です。JDBC のプロジェクトと同じ手順で、依存関係だけが変わります。

  1. Spring Initializr を開く

    コマンドパレット(Ctrl + Shift + P)で Spring Initializr: Create a Maven Project を選びます。

  2. プロジェクトの設定を選ぶ

    Java のバージョン、グループ名(com.example)、アーティファクト名(hello)を順に入力します。パッケージング形式は Jar を選びます。

  3. 依存関係に 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/ に置きます。

HelloApplication.java
package com.example.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}

main メソッドの SpringApplication.run が Tomcat を起動します。通常の Java プログラムと同様に、main メソッドの上に表示される Run | DebugRun で起動できます。起動すると、ターミナルに Started HelloApplication と出力され、ポート 8080 でリクエストを受け付ける状態になります。停止するには、ターミナルの停止ボタン(赤い四角)を押します。

この時点では応答するサーブレットが存在しないため、ブラウザーでアクセスしても画面は表示されません。サーブレットを実装して登録する手順は、次章で扱います。