Javaサーブレットのリクエストとは?HttpServletRequestを初心者向けに徹底解説
新人
「Webアプリを勉強していたら、サーブレットでリクエストという言葉が出てきたんですが、正直よく分かりません……」
先輩
「Webアプリの仕組みを理解するうえで、リクエストはとても大事な考え方なんですよ。」
新人
「HttpServletRequestというクラスも出てきました。これは何をするものなんですか?」
先輩
「ブラウザから送られてきた情報を、Javaのサーブレットで受け取るための箱のような存在です。順番に見ていきましょう。」
1. サーブレットにおけるリクエストとは?(HttpServletRequestの基本概念)
サーブレットにおけるリクエストとは、ユーザーがブラウザからWebアプリに対して送るお願いのことです。 たとえば、検索ボタンを押した、ログインボタンをクリックした、画面を表示した、こうした操作の一つ一つがリクエストになります。
プログラミング未経験の方でもイメージしやすいように例えると、リクエストは「お店で店員さんに注文を伝える行為」に近いです。 お客さんが「ラーメンを一つください」と伝えると、その内容を店員さんが受け取り、厨房に伝えます。 Webアプリでは、お客さんがブラウザ、店員さんがサーブレットにあたります。
Javaのサーブレットでは、このリクエスト情報を受け取るために
HttpServletRequestというクラスが用意されています。
このクラスには、ユーザーが送ってきた情報がすべて詰め込まれています。
HttpServletRequestは、URL、入力フォームの値、送信方法、ブラウザの種類など、
Webアプリを動かすうえで欠かせない情報をまとめて管理する重要な存在です。
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class SampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String method = request.getMethod();
System.out.println(method);
}
}
GET
上の例では、ブラウザから送られてきたリクエストの送信方法を取得しています。
GETは、画面表示やデータ取得でよく使われるリクエスト方法です。
2. なぜリクエスト情報の取得が重要なのか(Webアプリの仕組み)
Webアプリでは、ユーザーの操作に応じて処理内容を変える必要があります。 その判断材料になるのが、リクエスト情報です。 もしリクエストがなければ、Webアプリは何をすればよいのか分かりません。
たとえば、ログイン画面を考えてみましょう。 ユーザーが入力したユーザー名やパスワードは、リクエストとしてサーブレットに送られます。 サーブレットは、その情報を受け取り、正しいかどうかを確認します。
このときに使われるのが、HttpServletRequestの
パラメータ取得機能です。
パラメータとは、フォームなどから送信される「名前と値のセット」のことです。
String userName = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(userName);
System.out.println(password);
taro
password123
このように、リクエスト情報を取得できるからこそ、 Webアプリは「人によって違う動き」を実現できます。 これが、サーブレットとリクエストの関係が重要とされる理由です。
また、検索キーワードとしてよく使われる 「Java サーブレット リクエスト」 「HttpServletRequest 使い方」 といった内容も、すべてこの仕組みが土台になっています。
3. HttpServletRequestで取得できる主な情報一覧
HttpServletRequestでは、さまざまな種類の情報を取得できます。
初心者の方が最初に押さえておきたい代表的なものを、分かりやすく整理します。
まず代表的なのが、リクエストパラメータです。 これは、入力フォームやURLから送られてくるデータです。
次に重要なのが、リクエストメソッドです。 GETやPOSTといった送信方法を判別できます。 これにより、画面表示なのか、登録処理なのかを切り替えられます。
さらに、リクエストURLやURIも取得できます。 どの画面にアクセスされたのかを判断するために使われます。
他にも、クライアント情報として、 ブラウザの種類やIPアドレスを取得することも可能です。 セキュリティ対策やアクセス解析の基礎として使われます。
String requestURI = request.getRequestURI();
String remoteAddr = request.getRemoteAddr();
String userAgent = request.getHeader("User-Agent");
System.out.println(requestURI);
System.out.println(remoteAddr);
System.out.println(userAgent);
/sample/login
192.168.1.10
Mozilla/5.0
このように、HttpServletRequestは単なる補助クラスではなく、 Webアプリ開発の中心となる存在です。 初心者のうちから「リクエストとは何か」を正しく理解しておくことで、 JavaサーブレットやJSPの学習が一気に楽になります。
検索エンジンで調べるときも、 「HttpServletRequest 何ができる」 「サーブレット リクエスト 情報」 といったキーワードで探す人が多く、 それだけ重要なテーマであることが分かります。
4. リクエストパラメータの取得方法(getParameter・getParameterValues)
サーブレットで最も頻繁に使われる機能の一つが、リクエストパラメータの取得です。 リクエストパラメータとは、ユーザーが入力フォームやURLを通じて送信した値のことで、 Webアプリがユーザーの意図を理解するための重要な手掛かりになります。
HttpServletRequestでは、主に
getParameterとgetParameterValues
という二つのメソッドを使ってパラメータを取得します。
それぞれ役割が異なるため、正しく使い分けることが大切です。
まず、最も基本となるのがgetParameterです。
このメソッドは、指定した名前のパラメータを一つだけ取得するために使われます。
ログイン画面のユーザー名やパスワードなど、単一の値を扱う場合に適しています。
String userId = request.getParameter("userId");
String mail = request.getParameter("mail");
System.out.println(userId);
System.out.println(mail);
kato
kato@example.com
このように、フォームのname属性と同じ文字列を指定することで、
サーブレット側で値を受け取ることができます。
もし指定した名前のパラメータが存在しない場合は、
nullが返る点も初心者がつまずきやすいポイントです。
次に、複数の値をまとめて取得したい場合に使うのが
getParameterValuesです。
これは、チェックボックスや複数選択可能なリストなどでよく利用されます。
String[] hobbies = request.getParameterValues("hobby");
if (hobbies != null) {
for (String hobby : hobbies) {
System.out.println(hobby);
}
}
sports
music
reading
getParameterValuesは配列で値を返すため、
ループ処理と組み合わせて使うのが基本です。
初心者の方は、単一選択なのに配列で受け取ってしまったり、
逆に複数選択なのにgetParameterを使ってしまったりするミスが多いので注意しましょう。
リクエストパラメータの取得は、 「ユーザーの入力を正しく受け取れているか」を確認する最初の関門です。 ここを理解できると、フォーム処理や登録機能の実装が一気に分かりやすくなります。
5. リクエストヘッダ・メソッド・URL情報の取得方法
HttpServletRequestで取得できるのは、パラメータだけではありません。
ブラウザが送信してくるリクエストヘッダや、アクセスされたURL、
そして送信方法であるリクエストメソッドなども取得できます。
これらの情報は、処理の分岐やセキュリティ対策、 アクセス状況の把握など、実務に近い場面で重要な役割を果たします。
まず、リクエストメソッドの取得です。
getMethodを使うことで、GETかPOSTかを判別できます。
同じURLでも、画面表示と登録処理を切り替えたい場合によく使われます。
String method = request.getMethod();
if ("GET".equals(method)) {
System.out.println("画面表示処理");
} else if ("POST".equals(method)) {
System.out.println("登録処理");
}
登録処理
次に、URLやURIの取得です。
getRequestURLやgetRequestURIを使うことで、
どのパスにアクセスされたのかを確認できます。
画面遷移の制御やログ出力で役立ちます。
String requestURL = request.getRequestURL().toString();
String requestURI = request.getRequestURI();
System.out.println(requestURL);
System.out.println(requestURI);
http://localhost:8080/sample/login
/sample/login
また、リクエストヘッダの情報も重要です。
ヘッダには、ブラウザの種類や言語設定など、
クライアント環境に関する情報が含まれています。
代表的なものがUser-Agentです。
String userAgent = request.getHeader("User-Agent");
System.out.println(userAgent);
Mozilla/5.0
リクエストヘッダを取得できるようになると、 スマートフォンとパソコンで表示を切り替えたり、 不正アクセスを検知したりと、より高度な処理が可能になります。 初心者のうちは、「こんな情報も取れるのか」という理解で十分です。
6. セッションとリクエストの関係(HttpSessionとの違い)
サーブレットを学習していると、 リクエストと一緒に「セッション」という言葉が必ず登場します。 この二つの違いを理解することは、Webアプリ開発において非常に重要です。
リクエストは、一回の通信ごとに生成される情報です。 画面を表示した、ボタンを押した、こうした操作のたびに新しく作られ、 処理が終わると破棄されます。
一方、セッションはHttpSessionを使って管理され、
ユーザーごとに一定時間保持される情報です。
ログイン状態やユーザー情報を覚えておくために利用されます。
リクエストからセッションを取得するには、
getSessionメソッドを使います。
HttpSession session = request.getSession();
session.setAttribute("loginUser", "kato");
このようにして保存した情報は、次のリクエストでも参照できます。 つまり、リクエストは「一時的な箱」、 セッションは「しばらく覚えておく箱」と考えると分かりやすいです。
初心者がよく混乱するのは、 「リクエストに入れた情報は次の画面でも使えるのか」 という点です。 基本的に、リクエストは次の通信には引き継がれません。 複数画面で共有したい情報は、セッションに保存する必要があります。
ただし、セッションを使いすぎると、 メモリ消費が増えたり、管理が複雑になったりします。 「一時的な処理にはリクエスト、継続的な情報にはセッション」 という使い分けを意識することが大切です。
この違いを理解できると、 ログイン処理やカート機能など、 実践的なWebアプリの仕組みが一気に見えてきます。 サーブレット学習の中でも、特に重要なポイントとして押さえておきましょう。
7. HttpServletRequestを使った実装例と典型パターン
ここからは、HttpServletRequestを実際のサーブレット開発でどのように使うのか、初心者が最初に触れることの多い典型的な実装パターンを紹介します。 理論だけでなく、具体的な使いどころを知ることで、リクエストの役割がよりはっきりと理解できるようになります。
最も基本となるパターンは、入力フォームから送信された値を取得し、その内容に応じて処理を分岐する方法です。 ログイン処理や検索処理、登録画面など、多くのWebアプリで共通して使われています。
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String userId = request.getParameter("userId");
String password = request.getParameter("password");
if ("admin".equals(userId) && "secret".equals(password)) {
System.out.println("ログイン成功");
} else {
System.out.println("ログイン失敗");
}
}
ログイン成功
このように、リクエストパラメータを取得し、その値を使って条件分岐を行うのは非常によくある書き方です。 特に、getParameterで受け取った値は文字列として扱われるため、equalsメソッドで比較する点も重要なポイントです。
次に、URLやリクエストメソッドを使って処理を切り替えるパターンです。 同じサーブレットで複数の処理をまとめたい場合によく利用されます。
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String uri = request.getRequestURI();
if (uri.endsWith("/list")) {
System.out.println("一覧表示処理");
} else if (uri.endsWith("/detail")) {
System.out.println("詳細表示処理");
}
}
一覧表示処理
このような実装では、リクエストURIを確認することで、どの画面に対応した処理なのかを判断できます。 フレームワークを使わない素のサーブレット開発では、特に重要な考え方です。
さらに、リクエストスコープを利用した値の受け渡しも典型的なパターンの一つです。 サーブレットで取得した情報を、次のJSP画面で表示したい場合に利用されます。
request.setAttribute("message", "登録が完了しました");
request.getRequestDispatcher("/result.jsp").forward(request, response);
このように、HttpServletRequestは単に値を受け取るだけでなく、 処理結果を次の画面へ引き渡す役割も担っています。 実装例を通して見ると、リクエストがWebアプリの中心的な存在であることが実感できるはずです。
8. リクエスト情報取得でよくあるミスと注意点
HttpServletRequestは便利な一方で、使い方を誤ると不具合やバグの原因になります。 ここでは、初心者が特につまずきやすい代表的なミスと、その注意点を整理します。
まず非常に多いのが、パラメータが存在しない場合を考慮していないケースです。 getParameterは、指定した名前の値が存在しない場合、nullを返します。 この点を理解していないと、予期しないエラーが発生します。
String age = request.getParameter("age");
System.out.println(age.length());
このコードは、一見問題なさそうに見えますが、ageが送信されていなかった場合、例外が発生します。 そのため、nullチェックを行う習慣を身に付けることが重要です。
String age = request.getParameter("age");
if (age != null) {
System.out.println(age.length());
}
次に多いのが、文字化けに関するトラブルです。 特にPOSTリクエストで日本語を扱う場合、文字コードの指定を忘れると正しく値を取得できません。
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
この一行を処理の最初に書くだけで、文字化けの多くは防げます。 初心者のうちは、「日本語を扱うときは文字コードを意識する」という点を必ず覚えておきましょう。
また、GETとPOSTの違いを意識していないミスもよく見られます。 GETはURLにパラメータが表示されるため、機密情報の送信には向いていません。 パスワードや個人情報をGETで送ってしまうのは避けるべきです。
さらに、リクエストとセッションの混同も注意点の一つです。 「次の画面でも使えると思ってリクエストに値を入れたが、消えてしまった」という相談は非常に多くあります。 一時的な情報なのか、継続して使いたい情報なのかを常に意識しましょう。
これらのミスは、どれも基礎的な内容ですが、実際の開発現場では頻繁に発生します。 HttpServletRequestの性質を正しく理解することが、安定したWebアプリ開発への第一歩です。
9. Servletでリクエストを扱う際の重要ポイント総まとめ
ここまで、HttpServletRequestの基本から実装例、注意点までを詳しく見てきました。 最後に、サーブレットでリクエストを扱う際に、必ず押さえておきたい重要ポイントを整理します。
まず、リクエストは「一回の通信ごとに作られる一時的な情報」であるという点です。 この前提を理解していないと、画面遷移やデータ保持の設計で混乱しやすくなります。
次に、リクエストパラメータはすべて文字列として扱われる点です。 数値や真偽値として使いたい場合は、変換処理が必要になります。 この意識を持つだけで、バグを未然に防ぐことができます。
また、リクエストから取得できる情報は、パラメータだけではありません。 メソッド、URL、ヘッダ、クライアント情報など、多くの判断材料が含まれています。 これらを適切に使うことで、柔軟で安全なWebアプリを構築できます。
さらに、セッションとの使い分けも重要なポイントです。 短期間だけ使う情報はリクエストに、ユーザーごとに保持したい情報はセッションに保存する、 この基本ルールを守ることで、設計がシンプルになります。
初心者のうちは、HttpServletRequestのすべてを使いこなす必要はありません。 まずは、パラメータ取得とリクエストの流れをしっかり理解することが大切です。 その積み重ねが、フレームワーク学習や実務レベルの開発につながっていきます。
ServletとHttpServletRequestの関係を正しく理解できれば、 JavaによるWebアプリ開発の全体像が見えてきます。 この基礎をしっかり身に付けて、次のステップへ進んでいきましょう。