Webの基本

公開日: 2026-07-29 10:34 更新日: 2026-07-29 10:34 1850文字 10 min read ... ページビュー

本稿では、フロントエンド、バックエンド、データベース、サーバの分業、フロントエンドとバックエンドの統合と分離を含むWebアプリケーションの基本的な構成と開発モードを体系的に紹介する。MVC階層アーキテクチャにおけるView、Controller、Modelの各階層の責任を強調し、HttpServletRequest、HttpServletResponse、HttpSession、Cookie、ServletContextなどのサーブレットAPIのコアコンポーネントの使用方法と注意事項を詳細に説明し、リクエスト処理、セッション管理、データ共有、セキュリティ設定などの重要な実践を強調した。

Webの基本

Webアプリケーションの基本構成

Webアプリケーションは通常、フロントエンド、バックエンド、データベース、Webサーバーなどのコンポーネントで構成されます。

  • **フロントエンド:ブラウザ内で動作し、ページの表示、ユーザーインタラクション、および一部のデータ処理を担当します。一般的なテクノロジには、HTML、CSS、Java Script、jQuery、Bootstrapがあります。

  • バックエンド:サーバー内で動作し、リクエストの受信、ビジネスの処理、データベースへのアクセス、結果の返しを担当します。Java Webの一般的な技術にはサーブレットとSpring MVCがある。

  • インターフェイス:リクエストアドレス、リクエストモード、パラメータフォーマット、レスポンスフォーマットを規約し、フロントとリアが連携できるようにします。

フロントとフロントの統合開発

フロントページとバックエンドプログラムは、同じプロジェクトまたは同じサーバーアプリケーションにデプロイされます。通常、サービスが開始されると、ページリソースとバックエンドインタフェースは一緒に動作します。

このパターンでは、バックエンドはビジネスデータの処理に加えて、ページジャンプとサーバーサイドのページレンダリングを担当することがあります。フロントエンドとバックエンドは、同じプロジェクト構造とページテンプレートに強く依存しているため、結合度は通常高くなります。

ログインページの例:

image-001
image-001

前後端の分離開発

フロントエンドとバックエンドは2つの比較的別々のアプリケーションとして開発およびデプロイされます。フロントエンドはページの表示、ユーザーインタラクション、ルーティングジャンプを担当し、バックエンドはビジネス処理とデータアクセスを担当します。

両者はインターフェイスドキュメントに従ってデータを交換し、一般的なデータ形式はJSONです。通常、フロントエンドはリクエストデータをバックエンドに送信し、バックエンドはJSON 結果を返し、フロントエンドは結果に基づいてページを更新します。

このパターンは、コードとデプロイメントへの直接依存を減らし、バックエンドの並列開発をサポートしますが、両者はインターフェイス規約に従う必要があります。

image-002
image-002

MVCの階層パターン

MVCはアプリケーションの責任をモデル、ビュー、コントローラに分割します。

image-003
image-003

Viewビューレイヤー

データの表示とユーザーアクションの受信を担当。フロントエンド統合プロジェクトでは、ビューはJSPまたはHTMLテンプレートであることができます。フロントエンド分離プロジェクトでは、ビューは通常、スタンドアロンのフロントエンドアプリケーションによって実装されます。

Controllerコントローラレイヤ

クライアントリクエストの受信、リクエストパラメータの読み取り、ビジネス層の呼び出し、処理結果のクライアントへの返却を担当します。

フロントエンド統合モードでは、コントローラはページビューを返します。フロントエンド分離モードでは、コントローラは通常、JSONデータを返します。

Modelモデルレイヤー

ビジネスデータと処理ロジックを担当します実際のJava Webプロジェクトは、通常、次のように分割され続けます。

  • Serviceレイヤビジネスロジックとトランザクションを処理します。

  • DAOまたはリポジトリ層データベースまたはその他のデータソースへのアクセス。

MVCは責任の分割を記述し、実際のプロジェクトの具体的な階層はフレームワークやビジネス規模に応じて調整できます。

Servlet API

サーブレットAPIは、HTTPリクエストの処理、HTTPレスポンスの生成、セッションの管理、WebアプリケーションコンテキストへのアクセスのためにJava Web 開発に必要な一連のインタフェースとクラスを提供する。

Maven 依存関係の追加

次の依存関係は、javax.servlet名前空間ベースのサーブレット4.0プロジェクトに適用されます。

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

providedは、コンパイル時にこの依存が必要であることを示しているが、ランタイムは通常 Tomcatなどのサーブレットコンテナによって提供される。

サーブレットの作成

サーブレットは注釈を介してURLパスとマッピングできます。クライアントが対応するパスにアクセスすると、サーブレットコンテナは対応するメソッドを呼び出します

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/test")
public class TestController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 读取请求参数
        // 调用业务层
        // 将结果写入响应
        System.out.println("客户端访问了 /test,执行了 TestController 的 service 方法");
    }
}

サーブレットインスタンスは通常、コンテナによって作成および管理されます。HTTPリクエストはリクエストオブジェクトとレスポンスオブジェクトのセットに対応しますが、複数のリクエストが同じサーブレットインスタンスによって処理される可能性があるため、単一のリクエストからのデータをサーブレットインスタンスフィールドに保存しないでください。

HttpServletRequestリクエストオブジェクト

HttpServletRequestは、クライアントが送信するHTTPリクエストをカプセル化します。一度リクエスト処理が終了すると、そのリクエストオブジェクトは通常使用されなくなります。

通常の操作は以下の通り

  • 取得要求方法request.getMethod()

  • 要求 URLの取得request.getRequestURL()

  • コンテキストパスの取得request.getContextPath()

  • 要求ヘッダーを取得request.getHeader("请求头名称")

  • 単一の要求パラメータを取得しますrequest.getParameter("参数名")

  • 同じ名前の複数のパラメータを取得しますrequest.getParameterValues("参数名")

  • 要求範囲属性request.setAttribute("name", value)を保存します。

  • 要求範囲属性の読み取りrequest.getAttribute("name")

リクエスト属性は、サーバ内転送時にデータを渡すためによく使用され、そのライフサイクルは通常現在のリクエストのみを上書きします。

HttpServletResponse応答オブジェクト

HttpServletResponseは、ステータスコード、レスポンスヘッダ、文字エンコーディング、レスポンスボディを設定するために使用されます。

response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write("响应给浏览器的数据");

通常の操作は以下の通り

  • レスポンスステータスコードを設定します。

  • Response Headerを設定する

  • 応答コンテンツタイプと文字エンコーディングを設定します。

  • 文字ストリームまたはバイトストリームでレスポンスボディを書き込みます。

  • Redirectの実行

HttpSessionセッション·オブジェクト

HttpSessionは、クライアントセッションに関連するデータをサーバ側で保持するために使用されます。request.getSession()が最初に呼び出されたときに、現在のセッションが存在しない場合、コンテナは通常新しいセッションを作成します。

HttpSession session = request.getSession();
session.setAttribute("test", "test");
Object value = session.getAttribute("test");

ブラウザは通常、セッションクッキーを介してセッションIDを運び、後続のリクエストを同じHttpSessionに関連付けることができます。

セッションは、タイムアウト、アクティブな無効化、またはサーバー処理の後に破棄されます。タイムアウト時間はサーバーまたはアプリケーションの構成によって決まり、20 分に固定されません。

クッキーとは、サーバーからブラウザに送信され、ブラウザがルールに従って保存する小さなデータです。ブラウザーが一致するアドレスにアクセスすると、リクエストとともにクッキーをサーバーに送信できます。

クライアントにCookieを书き込む

Cookie cookie = new Cookie("username", "tom");
cookie.setMaxAge(3600);
response.addCookie(cookie);

リクエストからのCookieの読み取り

Cookie[] cookies = request.getCookies();

if (cookies != null) {
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName());
        System.out.println(cookie.getValue());
    }
}

クッキーは、セッション識別、環境設定などの情報を保存するためによく使われます。クリアテキストパスワードなどの機密データをクッキーに直接保存しないでください。認証情報は、HttpOnlySecureSameSiteなどのセキュリティ属性とサーバー側検証メカニズムと組み合わせる必要があります。

ServletContextアプリケーションコンテキスト

ServletContextは、現在のWebアプリケーションの実行コンテキストを表します。通常、アプリケーションの開始時に作成され、アプリケーションの停止時に破棄されます。同じWebアプリケーションには通常 1つのServletContextしかありません。

ServletContext context = getServletContext();
context.setAttribute("name", "abcde");
Object value = context.getAttribute("name");

アプリケーションスコープのプロパティは、同じWebアプリケーション内の複数のサーブレットおよび複数のリクエストで共有できます。複数のスレッドから同時にアクセスされる可能性があるため、可変共有データを保存する際にはスレッドセーフを考慮する必要がある。

共通のスコープ比較

オブジェクト標準範囲一般的な用途
ServletRequest1つのリクエストデータの転送、現在のリクエスト処理結果の保存
Session1つのクライアントセッションログインステータス、セッションレベルのユーザーデータ
ServletContextWebアプリケーション全体アプリケーションレベルの共有構成または共通データ
Cookie(クッキー)ブラウザ規則による保存[ぶらうざじゅんにほぞん]セッション識別、ユーザー設定などの少量のデータ

気に入ったならばコメントを残してくださいね~

... ページビュー
© 2026 跨越星轨的客 @Hoshiumi
Powered by theme astro-koharu · Inspired by Shoka