HTTPプロトコルとServletの基礎

HTTPリクエストとレスポンスの構造

リクエストデータの構成

HTTPリクエストは以下の3つの主要部分で構成されます:

  1. リクエスト行: 最初の行で、メソッド(GET/POST等)、リソースパス、プロトコルバージョンを含む
  2. リクエストヘッダ: キー:値形式のメタデータ
    Host: example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    Accept: text/html,application/xhtml+xml
    Accept-Language: ja-JP
    Accept-Encoding: gzip, deflate
  3. リクエストボディ: POSTリクエスト専用で、送信データを格納

レスポンスデータの構成

  1. レスポンス行: プロトコルバージョン、ステータスコード、説明文
  2. レスポンスヘッダ: メタデータ
    Content-Type: text/html; charset=UTF-8
    Content-Length: 1024
    Cache-Control: max-age=3600
  3. レスポンスボディ: HTMLコンテンツ等の実データ

HTTPステータスコード

コード説明
200成功
302リダイレクト
404リソース未発見
500サーバー内部エラー

Servletの基本実装

Servletの作成手順

  1. Maven依存関係の追加:
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
  2. Servletクラスの実装:
    @WebServlet("/example")
    public class BasicServlet implements Servlet {
        public void service(ServletRequest req, ServletResponse res) {
            System.out.println("Servlet動作確認");
        }
        // その他のメソッド実装...
    }

Servletのライフサイクル

  1. 初期化: init()メソッド
  2. リクエスト処理: service()メソッド
  3. 終了処理: destroy()メソッド

HTTP専用Servletの実装

@WebServlet("/custom")
public class HttpCustomServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) {
        // GET処理ロジック
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse res) {
        // POST処理ロジック
    }
}

URLパターン設定

  • 完全一致: @WebServlet("/path/exact")
  • ディレクトリパターン: @WebServlet("/category/*")
  • 拡張子パターン: @WebServlet("*.action")

XMLによるServlet設定

<web-app>
    <servlet>
        <servlet-name>LegacyServlet</servlet-name>
        <servlet-class>com.example.LegacyImplementation</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LegacyServlet</servlet-name>
        <url-pattern>/legacy</url-pattern>
    </servlet-mapping>
</web-app>

タグ: HTTP Servlet Java Webアプリケーション

6月25日 22:19 投稿