JavaのHttpServletRequestクラスを初心者向けに徹底解説!
生徒
「JavaでHttpServletRequestっていうのを見たんですけど、これって何をするクラスなんですか?」
先生
「HttpServletRequestは、クライアントから送られてきたリクエスト情報を取得するためのクラスです。例えば、リクエストのパラメータやヘッダー情報、セッション情報などを扱うことができます。」
生徒
「リクエストの情報って具体的にどんなものがあるんですか?」
先生
「リクエストパラメータやURL、ヘッダー、Cookieなど、Webアプリケーションで必要な情報が含まれています。では、具体的に使い方を見ていきましょう!」
1. javax.servlet.httpパッケージとは?
「1. javax.servlet.httpパッケージとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
JavaでWebアプリケーションを作るとき、HTTP通信をそのまま扱うのは大変です。
そこで登場するのがjavax.servlet.httpパッケージです。HTTPリクエストとレスポンスを便利に扱うための道具箱のような存在で、
サーバーとクライアントのやり取りをサポートするクラスがまとめて用意されています。
代表的なクラスと役割を整理すると次のとおりです。
- HttpServlet:サーバー側の処理を記述する基本クラス。
doGetやdoPostでリクエストに応答します。 - HttpServletRequest:ユーザーが送ってきたリクエスト情報(パラメータ・URL・ヘッダーなど)を扱うクラス。
- HttpServletResponse:サーバーからHTMLやJSONなどのレスポンスを返すためのクラス。
このパッケージのおかげで、リクエスト処理の基礎が整い、開発者は実現したい機能に集中できます。
例えば、次のようにHttpServletを継承したクラスを作るだけで、Web画面からのアクセスを受け取れるようになります。
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("text/plain");
response.getWriter().println("Hello Servlet!");
}
}
難しい設定をしなくても、クライアントからのアクセスに応答できる仕組みが最初から整っているのが魅力です。 「Webサーバー」と聞くと難しそうに感じますが、このパッケージを使えば思ったよりシンプルに扱えます。
2. HttpServletRequestクラスとは?
HttpServletRequestは、ブラウザから届いた「問い合わせ用紙」のようなものです。 フォーム入力値(パラメータ)、アクセス先のURLやクエリ文字列、HTTPヘッダー、Cookie、そしてセッションの取得など、 Web画面から送られてくる情報をひとまとめに持っています。GET/POSTどちらのリクエストでも同じ感覚で扱えるため、 初心者でも動作を追いやすいのが特徴です。
主な用途(まずはここから):
- フォームから送信されたパラメータを取得する。
- リクエストURL・クエリ文字列・HTTPメソッドを確認する。
- クライアント情報(IPアドレス、User-Agent)を読む。
- セッションやCookieを使った状態管理につなげる。
以下は、よく使う取得処理を1か所にまとめた最小サンプルです。未入力でも落ちないように簡単なnull対策を入れています。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// パラメータ(未入力なら「ゲスト」にする)
String name = request.getParameter("name");
if (name == null || name.isBlank()) name = "ゲスト";
// 基本情報
String method = request.getMethod(); // "GET" / "POST" など
String query = request.getQueryString(); // 例: "name=Taro"
String clientIp = request.getRemoteAddr(); // アクセス元IP
String ua = request.getHeader("User-Agent"); // ブラウザ情報
response.setContentType("text/html; charset=UTF-8");
response.getWriter().println("<h1>Hello, " + name + "!</h1>");
response.getWriter().println("<p>Method: " + method + "</p>");
response.getWriter().println("<p>Query: " + (query != null ? query : "(なし)") + "</p>");
response.getWriter().println("<p>IP: " + clientIp + "</p>");
response.getWriter().println("<p>User-Agent: " + ua + "</p>");
}
}
まずは上のコードを動かし、「URLに?name=○○を付けると表示が変わる」「User-Agentでブラウザ判定ができる」など、
画面から届く情報の流れを体感してみてください。仕組みがつかめると、入力チェックやログイン処理へ自然に発展させられます。
3. HttpServletRequestの主なメソッド
HttpServletRequestは「届いた情報を取り出す道具箱」です。まずは頻出メソッドを押さえ、その場で値を確認する習慣をつけましょう。 下の表現だけで、フォーム入力・アクセス先URL・ヘッダー・Cookie・セッションまで一通り扱えます。
- getParameter(String name):フォームやクエリの1件の値を取得。
- getParameterValues(String name):チェックボックス等の複数値を配列で取得。
- getHeader(String name):HTTPヘッダー(User-Agentなど)を取得。
- getCookies():クライアントから届いたCookie配列を取得。
- getSession():現在のセッション(なければ作成)を取得。
- getMethod() / getRequestURI() / getQueryString():メソッド・パス・クエリを確認。
- getRemoteAddr():アクセス元IPアドレスを取得。
下記は「届いた情報をそのまま表示」する最小サンプルです。nullや未入力を想定し、落ちない書き方を心がけています。
@WebServlet("/inspect")
public class InspectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String name = defaultIfBlank(request.getParameter("name"), "ゲスト");
String[] tags = request.getParameterValues("tag"); // ?tag=a&tag=b のような複数値
String ua = request.getHeader("User-Agent");
Cookie[] cookies = request.getCookies();
HttpSession session = request.getSession(); // ログイン情報などを保存するときに使う
session.setAttribute("lastAccessName", name);
response.setContentType("text/plain; charset=UTF-8");
response.getWriter().printf("Method: %s%n", request.getMethod());
response.getWriter().printf("URI : %s%n", request.getRequestURI());
response.getWriter().printf("Query : %s%n", String.valueOf(request.getQueryString()));
response.getWriter().printf("IP : %s%n", request.getRemoteAddr());
response.getWriter().printf("Name : %s%n", name);
response.getWriter().printf("Tags : %s%n", tags == null ? "(なし)" : String.join(",", tags));
response.getWriter().printf("UA : %s%n", ua);
response.getWriter().printf("Cookie: %d 件%n", cookies == null ? 0 : cookies.length);
}
private String defaultIfBlank(String v, String def) { return (v == null || v.isBlank()) ? def : v; }
}
まずはブラウザのアドレス欄に/inspect?name=Taro&tag=a&tag=bと入力して挙動を確認してみましょう。
表示される文字列を手掛かりに、どのメソッドで何が取れるのかが直感的に理解できます。分岐や入力チェックは少しずつ追加すれば十分です。
4. HttpServletRequestを学ぶポイント
「4. HttpServletRequestを学ぶポイント」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
HttpServletRequestクラスを学ぶ際には、以下のポイントを押さえると理解が深まります:
- リクエストの流れを理解する:クライアントからサーバーへのデータ送信がどのように処理されるかを学びましょう。
- 基本的なメソッドを使いこなす:getParameterやgetHeaderを使ってリクエスト情報を取得する練習をしましょう。
- 応用的な処理に挑戦する:セッションやCookieを使ったユーザー管理を実装してみましょう。
- Servlet全体の理解を深める:HttpServletRequestとHttpServlet、HttpServletResponseの関係性を把握しましょう。
まずは簡単なサンプルコードを実行し、リクエストの仕組みを体験してみてください。
5. フォーム送信とHttpServletRequestの連携例
Webアプリケーションでは、フォームからデータを送信し、サーバー側で受け取って処理する場面がよくあります。
HttpServletRequestは、このときフォーム内の入力データを受け取る役目を持っています。
例えば、以下のようなフォームがあるとします。
<form action="/login" method="POST">
<input type="text" name="userId">
<input type="password" name="password">
<button type="submit">ログイン</button>
</form>
このフォームが送信されると、サーバー側のServletで次のように受け取れます。
String userId = request.getParameter("userId");
String password = request.getParameter("password");
このように、HTMLフォームとJavaのサーバー処理はname属性を使って連携しています。
仕組みが分かると、ログインや問い合わせフォームなどが簡単に作れるようになります。
6. セッション管理とリクエストの関係
HttpServletRequestは、ただデータを受け取るだけではなく、 ユーザーの状態を覚えておく「セッション管理」にも利用されます。
Webは通常「1回アクセスしたら終了」という仕組みですが、セッションを使うことで 「ログイン中」「買い物カゴに商品が入っている」などの情報を保持できます。
HttpSession session = request.getSession();
session.setAttribute("loginUser", userId);
セッションはログイン機能を作るときの基本中の基本です。
HttpServletRequestの役割はとても大きいことがわかりますね。
7. 例外が出たときの対処方法(初心者がつまずきやすいポイント)
「7. 例外が出たときの対処方法(初心者がつまずきやすいポイント)」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
初心者がHttpServletRequestを使うときに多いミスとして、 「パラメータ名が一致していない」「nullを想定していない」「文字化け」などがあります。
- getParameterの値がnull → name属性と一致しているか確認
- 日本語が文字化け → doPost内で
request.setCharacterEncoding("UTF-8")を設定 - NullPointerException → nullチェックを行う
String name = request.getParameter("name");
if (name == null || name.isEmpty()) {
name = "ゲスト";
}
こういったチェックを入れるだけで、安定したアプリ開発につながります。 エラーが出ても焦らず、入力値やパラメータ名を見直してみましょう。
まとめ
本記事では、Javaのjavax.servlet.httpパッケージと、HttpServletRequestクラスについて詳しく解説しました。HttpServletRequestクラスは、クライアントから送信されたリクエスト情報を処理するための中心的なクラスであり、Webアプリケーション開発において欠かせない役割を果たします。
特に、リクエストパラメータやヘッダー、セッション情報、Cookieの取得など、Webアプリケーションでよく使用される機能を簡単に実現できる点が特徴です。今回の内容を理解することで、Servletを使用したWebアプリケーションの基本的な仕組みを学ぶことができます。
以下は、HttpServletRequestの応用例を示したサンプルコードです:
@WebServlet("/userInfo")
public class UserInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userAgent = request.getHeader("User-Agent");
String sessionId = request.getSession().getId();
response.setContentType("text/html");
response.getWriter().println("<h1>Client Information</h1>");
response.getWriter().println("<p>User Agent: " + userAgent + "</p>");
response.getWriter().println("<p>Session ID: " + sessionId + "</p>");
}
}
このコードでは、クライアントのブラウザ情報(User-Agentヘッダー)やセッションIDを取得し、それをレスポンスとして表示しています。HttpServletRequestを使用することで、クライアントに応じた動的な処理が簡単に行えます。
生徒
「HttpServletRequestクラスの使い方がよく分かりました!特に、クライアントの情報を簡単に取得できるのが便利ですね。」
先生
「その通りです。クライアントから送信されたデータを処理する基本を押さえることで、Webアプリケーション開発の幅が広がりますよ。」
生徒
「次は、Cookieやセッションの扱い方について詳しく学びたいです。」
先生
「良いですね。Cookieやセッションはユーザー管理や認証において重要な役割を果たしますので、次回はそれについて詳しく解説しましょう!」