はじめに
HTTP(HyperText Transfer Protocol)は、WebブラウザとWebサーバー間でデータをやり取りするための通信プロトコルです。JSPやServletはHTTPを利用してリクエストを受け取り、レスポンスを返すことでWebページを表示しています。
そのため、HTTPの仕組みを理解することで、画面表示やフォーム送信、データの受け渡しなど、Webアプリケーションが動作する流れを正しく理解できるようになります。JSPでWebアプリケーションを開発する際には、このHTTPの仕組みを理解することが非常に重要です。
HTTPリクエストとレスポンス
HTTPは、WebブラウザとWebサーバーが通信を行うためのプロトコルです。各リクエストを独立して処理するステートレスな仕組みを採用しており、通信内容は人が読めるテキスト形式でやり取りされます。また、クライアントがリクエストを送信し、サーバーがレスポンスを返すリクエスト/レスポンスモデルによって通信が行われます。
HTTPリクエストの構造
JSPアプリケーションにアクセスすると、ブラウザは以下のようなHTTPリクエストを送信します。
HTTPリクエストは、WebブラウザがWebサーバーへ送る要求の内容です。最初のリクエストラインには、どの操作を行うかを表すメソッド(GET)、アクセス先のパス(/index.jsp)、通信に使用するHTTPのバージョンが記述されます。
GET /index.jsp HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
続くヘッダーには、アクセス先やブラウザの情報などの追加情報が含まれます。また、POSTメソッドでは、フォームに入力した値などのデータがボディに格納され、サーバーへ送信されます。
- リクエストライン:メソッド(GET)、パス(/index.jsp)、HTTPバージョン(HTTP/1.1)
- ヘッダー:Host, User-Agentなどの追加情報
- ボディ:POSTメソッド時などに送信されるデータ
HTTPレスポンスの構造
サーバーからのレスポンスは以下のようになります。
HTTPレスポンスは、Webサーバーがブラウザからのリクエストに対して返す応答です。最初のステータスラインには、HTTPのバージョン、処理結果を表すステータスコード(200など)、その内容を示すステータステキスト(OKなど)が記述されます。
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
<html>...</html>
続くヘッダーには、データの種類や文字コードなどの情報が含まれます。最後のボディには、ブラウザへ表示するHTMLや画像などの実際のデータが格納されています。
- ステータスライン:HTTPバージョン、ステータスコード(200)、ステータステキスト(OK)
- ヘッダー:Content-Typeなどのメタデータ
- ボディ:HTMLコンテンツなど
主要なHTTPメソッド
HTTPメソッドは、Webサーバーへ「どのような処理をしてほしいか」を伝えるための命令です。JSPやServletでもこれらのメソッドに対応した処理を実装できます。
GET:データの取得に使用(URLにパラメータが表示される)
GETはデータを取得する際に使用され、送信した値はURLに表示されます。JSPではrequest.getParameter()を使って値を取得できます。
POST:データの送信に使用(ボディにデータが含まれる)
POSTはフォームに入力した内容などをサーバーへ送信する際に使用され、データはリクエストボディに含まれるためURLには表示されません。
PUT/DELETE:RESTful APIで使用(JSPでも利用可能)
PUTはデータの更新、DELETEはデータの削除を行う際に利用され、RESTful APIを開発する場面でよく使われます。
HTTPステータスコード
HTTPステータスコードは、Webサーバーがリクエストの処理結果をブラウザへ伝えるための番号です。
200 OKは正常に処理が完了したことを表します。302 Foundは別のページへ移動するリダイレクトを意味し、JSPではresponse.sendRedirect()で利用されます。
404 Not Foundは指定したページが存在しない場合に返されます。500 Internal Server Errorはサーバー内部でエラーが発生したことを表し、JSPやServletのプログラムに問題がある場合などによく発生します。
- 200 OK:成功
- 302 Found:リダイレクト(JSPの
response.sendRedirect()など) - 404 Not Found:ページが見つからない
- 500 Internal Server Error:サーバー側エラー(JSPのスクリプトレット内エラーなど)
JSPとHTTPの関係
JSPは、Webブラウザから送られたHTTPリクエストを受け取り、その内容に応じたHTMLを動的に生成して返す技術です。その際、JSPではHTTP通信を扱うための暗黙オブジェクトが利用できます。
requestオブジェクト:HttpServletRequestのインスタンス
requestオブジェクトはフォームの入力値やURLパラメータなどのリクエスト情報を取得するために使用します。
responseオブジェクト:HttpServletResponseのインスタンス
responseオブジェクトは画面の表示やリダイレクトなど、ブラウザへ返すレスポンスを制御します。
sessionオブジェクト:HttpSessionのインスタンス
sessionオブジェクトはログイン情報などを保存し、ユーザーごとの状態を管理するために利用されます。
実践例:JSPでのHTTPパラメータ取得
このプログラムでは、HTTPリクエストで送信されたデータをJSPで受け取る方法を学びます。フォームに名前を入力して送信すると、request.getParameter(“name”)を使用して入力された値を取得します。
値が存在する場合は「こんにちは、○○さん!」と表示し、何も送信されていない場合は入力を促すメッセージを表示します。フォームはmethod=”post”でデータを送信しており、JSPは受け取ったリクエストに応じて表示内容を動的に変更しています。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>HTTPパラメータの例</title>
</head>
<body>
<%
// GETまたはPOSTで送信されたパラメータを取得
String name = request.getParameter("name");
if(name != null) {
out.println("<h1>こんにちは、" + name + "さん!</h1>");
} else {
out.println("<h1>名前を入力してください</h1>");
}
%>
<form method="post" action="">
名前: <input type="text" name="name">
<input type="submit" value="送信">
</form>
</body>
</html>
このように、HTTPリクエストとJSPを組み合わせることで、ユーザーの入力に応じたWebページを作成できます。
まとめ
HTTPプロトコルの理解はJSPによるWebアプリケーション開発の基礎です。リクエストとレスポンスの流れ、主要なHTTPメソッド、ステータスコードを把握しておくことで、より効果的なJSPアプリケーションを開発できるようになります。JSPが提供する暗黙オブジェクト(request, response, sessionなど)を活用し、HTTPの特性を活かしたWebアプリケーションを作成しましょう。
次のステップとして、セッション管理やクッキーの扱い、GETとPOSTの適切な使い分けなど、より深いHTTPの知識を学んでいくと良いでしょう。