Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
生徒
「先生、Jakarta サーブレットのプログラムを見ているとHttpServletRequestっていうクラスがよく出てくるんですけど、これは何に使うんですか?」
先生
「いいところに気が付いたね。HttpServletRequestは、ブラウザから送られてきたリクエストの情報を受け取るためのとても重要なオブジェクトなんだよ。」
生徒
「リクエストって具体的にはどんな情報が入っているんですか?」
先生
「例えばフォームに入力したデータや、アクセスしてきたURLの情報、ブラウザの種類やリモートアドレスまで、たくさんの情報が入っているんだ。では基本的な使い方を一緒に見ていこう。」
1. HttpServletRequestとは?
HttpServletRequestは、Jakarta サーブレットAPIに用意されているインターフェースで、ブラウザなどのクライアントから送られてきたHTTPリクエストの中身を受け取るための窓口のような存在です。サーブレットが動作するとき、このオブジェクトを通してリクエスト情報にアクセスします。
HTTPリクエストには、フォームに入力された値だけでなく、アクセスされたURL、使用しているブラウザの情報、送信方法(GETやPOST)など、さまざまな情報が含まれています。これらを一つずつ取り出して処理するのがHttpServletRequestの役割です。
初心者向け:何が入っているの?
初めて学ぶ方は、「リクエスト=ユーザーからのお願い」とイメージすると分かりやすくなります。ユーザーがボタンを押したり、URLにアクセスしたりすると、その内容がまとめてサーブレットに渡されます。
// フォームから送信された値を取得する例
String name = request.getParameter("username");
このように、HttpServletRequestを使うことで、ユーザーが入力した値をJavaの変数として扱えるようになります。まずは「リクエストの中身を受け取るためのオブジェクト」という点をしっかり押さえておくことが大切です。
2. リクエストパラメータの取得
Webアプリで最もよく使うのが、ユーザーが画面に入力した値を受け取る処理です。HttpServletRequestにはgetParameterメソッドが用意されており、フォームのname属性を指定するだけで簡単に値を取得できます。
例えば、ログイン画面や問い合わせフォームでは、名前やメールアドレスといった情報がリクエストパラメータとして送信されます。
// フォームに入力された値を受け取る例
String name = request.getParameter("username");
String email = request.getParameter("email");
このように書くことで、ブラウザから送信された「username」や「email」の内容を、そのままJavaの変数として扱えるようになります。
初心者向け:値が取得できないときは?
もし値が取得できない場合は、HTML側のname属性と、getParameterに指定した文字列が一致しているかを確認してみましょう。ここがズレていると、正しくデータを受け取れません。
まずは「フォームのnameとJava側の指定は必ず同じ」という点を覚えておくと安心です。
3. 複数パラメータや配列の扱い
チェックボックスや複数選択のリストボックスのように、同じ項目名で複数の値が送られてくるケースがあります。こういった場合にgetParameterを使うと、最初の1件だけしか取れないことがあるため、getParameterValuesでまとめて受け取るのが基本です。
// チェックボックスなどで複数選択された値を配列で受け取る
String[] hobbies = request.getParameterValues("hobby");
取得できた値は配列に入るので、選ばれた数だけデータが並びます。例えば「サッカー」と「音楽」を選んだ場合は、配列の中に2つの文字列が入ります。
初心者向け:安全に扱うコツ
何も選ばれずに送信されたときは、getParameterValuesの結果がnullになる場合があります。そのため、使う前に「値があるか」を軽く確認しておくとエラーを避けやすくなります。
if (hobbies != null) {
for (String hobby : hobbies) {
// 選ばれた趣味を1つずつ処理できる
}
}
まずは「複数の入力は配列で受け取る」という感覚を押さえておくと、アンケートや登録フォームでも迷いにくくなります。
4. リクエストURLやパスの取得
WebアプリケーションではアクセスされたURLの情報を利用することもよくあります。HttpServletRequestには次のような便利なメソッドがあります。
getRequestURL():アクセスされた完全なURLgetRequestURI():リクエストのURI部分getContextPath():アプリケーションのコンテキストパスgetServletPath():呼び出されたサーブレットのパス
String url = request.getRequestURL().toString();
String uri = request.getRequestURI();
String context = request.getContextPath();
String servlet = request.getServletPath();
これらを使えばログの記録やリダイレクト処理を柔軟に行うことができます。
5. リクエストヘッダの取得
リクエストヘッダにはブラウザの種類や言語設定、クライアントの詳細情報が含まれています。getHeaderメソッドを使うことでこれらを確認できます。
String userAgent = request.getHeader("User-Agent");
String language = request.getHeader("Accept-Language");
例えばユーザーエージェントを確認すれば、アクセスしているのがスマートフォンなのかPCなのかを判別できます。
6. リクエストメソッドの判定
サーブレットでは、アクセスがGETリクエストかPOSTリクエストかを判定する必要があります。これはgetMethodメソッドで簡単に確認できます。
String method = request.getMethod();
if ("GET".equalsIgnoreCase(method)) {
// doGet相当の処理
} else if ("POST".equalsIgnoreCase(method)) {
// doPost相当の処理
}
これによりリクエストの種類ごとに処理を分けることができます。
7. リモートアドレスとセッション情報
アクセスしてきたユーザーのIPアドレスやセッション情報を取得することも可能です。これによりログ管理やセキュリティ対策を行うことができます。
String ip = request.getRemoteAddr();
HttpSession session = request.getSession();
getRemoteAddrでクライアントのIPを取得でき、getSessionでセッションオブジェクトを取得できます。
8. 実行例のイメージ
例えばフォームから名前を送信するとサーブレットで次のように表示できます。
String name = request.getParameter("username");
response.getWriter().println("あなたの名前は " + name + " です");
あなたの名前は 山田太郎 です
9. 覚えるべきポイント
HttpServletRequestの基本操作は、Jakarta サーブレットでWebアプリを開発する上で避けて通れない基礎です。リクエストパラメータの取得、URLやパスの操作、リクエストヘッダやメソッドの判定、セッション管理まで幅広い機能を理解しておけば、ログイン機能やショッピングカートなど、実践的なWebアプリケーションの基盤を作れるようになります。
まとめ
Jakarta サーブレットで利用されるHttpServletRequestは、Webアプリケーションにおけるリクエスト処理の中心となる非常に重要なインターフェースです。フォーム入力の受け取り、URL情報やパス情報の取得、リクエストヘッダの確認、リクエストメソッドの判定、そしてリモートアドレスやセッション管理など、あらゆる機能の基盤として機能します。これらの操作を理解することで、ユーザーの入力を受け取り動的に処理を行うアプリケーションの構築が可能になり、ログイン機能や絞り込み検索などの実践的機能に応用できます。とくに、getParameterやgetParameterValuesの使い分けを覚えると、複数選択やチェックボックスなどの複雑なフォーム処理が自在に扱えるようになります。
URLやパスを扱うメソッドであるgetRequestURL、getRequestURI、getContextPath、getServletPathは、ログ出力や遷移処理に役立ち、アクセス状態の管理にも欠かせません。また、ヘッダ情報はブラウザ判定やアクセス元の推測に利用でき、スマートフォンかPCかを切り替えるような処理にも応用が可能です。さらに、セッション管理やIPアドレス取得はセキュリティ対策にも直結するため、信頼性の高いWebアプリケーションを実装するための基礎知識として欠かせません。
以下では、本記事で学んだ要点を振り返りながら、典型的なサーブレット処理のサンプルコードを掲載しています。これらのコードは実際の開発現場でもそのまま役立つ構成となっており、Jakarta サーブレットの学習を深める際の参考になります。
基本操作をまとめたサンプルコード
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 基本パラメータ取得
String username = request.getParameter("username");
String email = request.getParameter("email");
// 複数値の取得
String[] hobbies = request.getParameterValues("hobby");
// URL 情報の取得
String url = request.getRequestURL().toString();
String uri = request.getRequestURI();
String context = request.getContextPath();
String servletPath = request.getServletPath();
// ヘッダ情報
String agent = request.getHeader("User-Agent");
// リクエストメソッド判定
String method = request.getMethod();
// セッションとIPアドレス
HttpSession session = request.getSession();
String ip = request.getRemoteAddr();
response.setContentType("text/plain; charset=UTF-8");
response.getWriter().println("ユーザー名:" + username);
response.getWriter().println("メール:" + email);
response.getWriter().println("アクセスURL:" + url);
response.getWriter().println("IPアドレス:" + ip);
}
このようなサンプルコードを参考にすると、リクエストオブジェクトの操作イメージが具体的につかみやすくなります。フォーム入力、URL解析、セッション制御など、Webアプリケーションに必要な一連の処理がどのように流れるのかを理解しておくと、実務でも迷わず実装できるようになります。とくに、HttpServletRequestが提供する情報の幅広さを理解しておくことで、ログの最適化、ページ遷移の制御、ユーザーごとの画面切り替え、アクセス制御といった応用的な実装にもつながります。
Jakarta サーブレットの世界では、こうした基礎的なメソッド群を自由に扱えるほど開発効率と表現力が上がり、複雑な機能を組み合わせたシステムも自然に作れるようになります。サーバーサイドプログラミングにおける基礎として、ぜひ今回の内容をしっかりと身につけておくとよいでしょう。Webアプリケーションがどのようにユーザーと通信し情報を処理しているのか、その流れを深く理解することが、今後の成長に確実につながっていきます。
生徒:「今日学んだHttpServletRequestって、すごくたくさんの情報を扱えるんだって分かりました!」
先生:「そのとおりです。リクエストパラメータだけでなく、URL、ヘッダ、メソッド、セッション、IPアドレスまで全部扱えるのが魅力なんですよ。」
生徒:「たしかに、これだけできるとログインページや検索画面も簡単に作れそうですね。」
先生:「はい、Webアプリケーションの多くはこのクラスを基盤にして組み立てられています。基本を理解しておくと応用もぐっと楽になりますよ。」
生徒:「URLを取得するメソッドやヘッダ情報の扱いも便利ですね。スマホ判定とかにも使えそう!」
先生:「その発想はすごく大事です。使い方次第でいろいろな実装が可能になりますから、ぜひ応用してみてください。」
生徒:「これでサーブレットの流れがかなり理解できました。もっといろいろ試してみたいです!」
先生:「素晴らしい意欲ですね。次はHttpServletResponseについても学んで、さらに理解を深めていきましょう。」