Java | Web 基礎・HTTP・REST:Web 全体像 - 動的コンテンツ

Java Java
スポンサーリンク

動的コンテンツを一言でいうと

動的コンテンツは、
「リクエストのたびにサーバー側で中身を“その場で作って返すコンテンツ」 です。

誰がアクセスしたか
いつアクセスしたか
どんな条件でアクセスしたか

によって、返す内容が変わるものはすべて動的コンテンツです。
Java で Web アプリを書くとき、あなたが主に作るのはこの「動的コンテンツ」を生み出す仕組みです。


静的コンテンツとの違いをまずイメージする

静的コンテンツは「いつも同じ」

静的コンテンツは、ファイルの中身が固定です。
/about.html にアクセスしたら、誰がいつ見ても同じ内容が返ってきます。
会社概要ページ、ロゴ画像、CSS、JavaScript ファイルなどが典型です。

サーバーはディスクからファイルを読んで、そのまま返すだけ。
Java の処理は関与しません。

動的コンテンツは「その場で決まる」

一方、動的コンテンツは、
リクエストの内容やユーザーごとに中身が変わります。

ログインしているユーザー名を表示する
ユーザーごとに違うマイページを表示する
検索条件に応じて結果一覧を変える
日付や時間によって表示内容を変える

こういったものはすべて、サーバー側で「その場で中身を作って返す」=動的コンテンツです。


Java で動的コンテンツを作る流れ

1. ブラウザからリクエストが飛んでくる

例えば、「ユーザー一覧ページ」を開くとき、ブラウザはこんなリクエストを送ります。

GET /users HTTP/1.1
Host: example.com

この時点では、まだ「何を返すか」は決まっていません。
サーバー側の Java コードが、これから中身を決めます。

2. Java コードがデータを取りに行く

Spring MVC を例にすると、こんなコントローラを書きます。

@GetMapping("/users")
public String listUsers(Model model) {
    var users = userService.findAll(); // DB からユーザー一覧を取得
    model.addAttribute("users", users);
    return "users/list"; // テンプレート名
}
Java

ここでやっていることはシンプルで、
リクエストを受ける
サービスを呼んでデータベースからデータを取る
テンプレートに渡すデータを model に詰める

という「中身を準備する」処理です。

3. テンプレートエンジンで HTML を組み立てる

"users/list" というテンプレート(Thymeleaf など)には、こんな感じの HTML が書かれています。

<table>
  <tr th:each="user : ${users}">
    <td th:text="${user.id}"></td>
    <td th:text="${user.name}"></td>
  </tr>
</table>

テンプレートエンジンは、
model に入っている users の中身を見て、
実際の HTML に展開します。

例えば、ユーザーが 2 人なら、最終的にはこんな HTML になります。

<table>
  <tr>
    <td>1</td>
    <td>Alice</td>
  </tr>
  <tr>
    <td>2</td>
    <td>Bob</td>
  </tr>
</table>

この「テンプレート+データから最終 HTML を作る」処理こそが、
動的コンテンツ生成の中核です。


動的コンテンツは HTML だけではない

JSON を返す API も動的コンテンツ

最近の Web アプリでは、
画面はフロントエンド(JavaScript)が担当し、
サーバーは JSON を返す API になることが多いです。

例えば、ユーザー一覧 API はこう書けます。

@RestController
@RequestMapping("/api/users")
class UserApi {

    @GetMapping
    List<UserResponse> list() {
        var users = userService.findAll();
        return users.stream()
                    .map(UserResponse::from)
                    .toList();
    }
}
Java

この場合、サーバーは HTML ではなく JSON を返します。

[
  { "id": 1, "name": "Alice" },
  { "id": 2, "name": "Bob" }
]

これも、
リクエストのたびに DB からデータを取って JSON を組み立てているので、
立派な動的コンテンツです。

ファイルダウンロードも動的になり得る

例えば、
「検索結果を CSV でダウンロード」
「請求書 PDF を生成してダウンロード」

といった機能も、
サーバー側でその場でファイルを生成して返すので、
動的コンテンツの一種です。


動的コンテンツで特に重要な設計視点

1. 「誰によって」「どんな条件で」変わるかを意識する

動的コンテンツは、
ユーザーごと
権限ごと
リクエストパラメータごと
時間帯ごと

など、さまざまな条件で中身が変わります。

設計するときは、
「何がトリガーで中身が変わるのか」
「どのレイヤーでそれを判定するのか(コントローラ/サービス/テンプレート)」
を意識して分けることが大事です。

例えば、
「このユーザーは管理者かどうか」
といった判定はサービス層やセキュリティ層で行い、
テンプレートでは「渡されたフラグに応じて表示を変える」だけにする、など。

2. 動的にしなくていいものは静的にする

何でもかんでも動的にすると、
サーバー負荷が増え、コードも複雑になります。

会社概要ページ
固定のヘルプページ
ほとんど変わらない画像や CSS

こういったものは静的コンテンツにしておき、
本当にユーザーや条件によって変わる部分だけを動的にする。

この「どこまで動的にするか」の線引きが、
実務ではかなり重要です。

3. キャッシュをどうするか

動的コンテンツは、
毎回サーバーで処理する必要がありますが、
場合によっては「結果を一時的に覚えておく(キャッシュする)」こともできます。

例えば、
毎回同じ検索条件で大量のデータを取る
ランキングページのように、数分に一度しか変わらない

こういったものは、
アプリ側や CDN でキャッシュすることで、
「見た目は動的だけど、実装としてはキャッシュをうまく使う」
という設計もあり得ます。


初心者がまず押さえるべき動的コンテンツのイメージ

あなたの言葉で整理すると、こうなります。

動的コンテンツとは、
リクエストのたびにサーバー側(Java)が
データベースなどから情報を取り、
テンプレートや JSON 生成を通じて
その場で中身を作って返すコンテンツ。

ユーザーごと・条件ごとに中身が変わる画面や API はすべて動的コンテンツで、
Java で Web アプリを書くということは、
この動的コンテンツをどう設計し、どう生成するかを考えること。

タイトルとURLをコピーしました