
サーブレット&JSPの基本|JSPでリクエストパラメータを取得する
JSPでもrequestから値を取り出せる。暗黙オブジェクトを知って、フォーム送信の流れをつかもう
前回は、フォームから送信されたリクエストパラメータを、サーブレットクラスで受け取る方法を学習しました。
フォームの送信先は、サーブレットクラスだけではありません。JSPファイルを送信先にすることもできます。フォームのaction属性にJSPファイルのパスを指定すれば、送信ボタンをクリックしたときに、そのJSPファイルへリクエストを送れます。
JSPファイルでリクエストパラメータを取得する場合も、基本的な考え方はサーブレットクラスと同じです。送られてきた値はHttpServletRequestインスタンスに格納されており、request.getParameterを使って取り出します。
ただし、JSPにはサーブレットクラスと違って、doGetメソッドやdoPostメソッドを自分で書く必要がありません。それでもrequestを使えるのは、JSPには暗黙オブジェクトという特別な仕組みがあるためです。
この記事では、JSPでリクエストパラメータを取得する書き方と、requestを宣言せずに使える理由を、順番に確認していきます。
JSPファイルもフォームの送信先にできる
フォームの送信先には、サーブレットクラスだけでなくJSPファイルも指定できます。
サーブレットクラスに送信する場合は、action属性にサーブレットのURLパターンを指定します。一方、JSPファイルに送信する場合は、action属性にwebappからのパスを指定します。
送信先の指定方法
| 送信先 | action属性に指定する内容 |
|---|---|
| サーブレットクラス | URLパターン |
| JSPファイル | webappからのパス |
たとえば、studyプロジェクトのsrc/main/webappにseminar-confirm.jspを作成した場合、フォームの送信先としてseminar-confirm.jspを指定できます。
この場合、送信ボタンをクリックすると、フォームに入力された値がリクエストパラメータとしてseminar-confirm.jspへ送られます。
JSPでリクエストパラメータを受け取る流れ
フォームからJSPファイルへ送信されたデータは、サーブレットクラスへ送信したときと同じように、HttpServletRequestインスタンスに格納されます。
JSPファイルでは、requestという名前でHttpServletRequestインスタンスを利用できます。そのため、次のような流れでリクエストパラメータを取得できます。
| 順番 | 内容 |
|---|---|
| 1 | フォームに値を入力する |
| 2 | 送信ボタンをクリックする |
| 3 | JSPファイルへリクエストが送られる |
| 4 | リクエストパラメータがHttpServletRequestに格納される |
| 5 | JSPファイル内でrequest.getParameterを使って値を取り出す |
サーブレットクラスでは、doPostメソッドやdoGetメソッドの引数としてHttpServletRequest requestを受け取りました。
JSPファイルでは、requestを自分で宣言しなくても使えます。これはJSPに最初から用意されている暗黙オブジェクトだからです。
図1:フォームからJSPへリクエストパラメータを送る流れ

この図から分かること
フォームから送信されたデータは、リクエストパラメータとしてアプリケーションサーバへ送られます。
送信先がJSPファイルであっても、リクエストパラメータはHttpServletRequestインスタンスに格納されます。JSPファイルでは、requestという暗黙オブジェクトを使って、その値を取り出せます。
つまり、フォームの送信先がサーブレットクラスでもJSPファイルでも、リクエストパラメータを取得する基本的な考え方は同じです。
JSPでリクエストパラメータを取得する書き方
JSPファイルでは、スクリプトレットの中でrequest.getParameterを使ってリクエストパラメータを取得できます。
日本語を含むデータを正しく扱うために、まずrequest.setCharacterEncodingで文字コードを指定します。そのあと、request.getParameterで必要な値を取り出します。
JSPでリクエストパラメータを取得する基本形
| 処理 | 役割 |
|---|---|
| request.setCharacterEncoding("UTF-8") | リクエストパラメータをUTF-8として扱う |
| request.getParameter("パラメータ名") | 指定した名前の値を取得する |
大切なのは、getParameterに指定する名前です。
この名前は、フォーム部品のname属性の値と一致させます。フォーム側でname属性にuserNameを指定している場合、JSP側ではrequest.getParameter("userName")と書きます。
JSPで値を取得して表示する例
ここでは、セミナー申込フォームから送られてきた名前と参加コースを、JSPファイルで取得する例を見てみましょう。
送信されるリクエストパラメータは、userNameとcourseという想定にします。
セミナー申込確認JSPの例
ファイル名: seminar-confirm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
request.setCharacterEncoding("UTF-8");
String userName = request.getParameter("userName");
String course = request.getParameter("course");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>セミナー申込確認</title>
</head>
<body>
<p><%= userName %>さんの申込内容を受け付けました。</p>
<p>参加コース:<%= course %></p>
</body>
</html>このJSPファイルでは、最初にpageディレクティブで文字コードを指定しています。
次に、スクリプトレットの中でrequest.setCharacterEncoding("UTF-8")を実行し、リクエストパラメータをUTF-8として扱うようにしています。
そのあと、request.getParameter("userName")で名前を取得し、request.getParameter("course")で参加コースを取得しています。
HTMLのbodyタグ内では、スクリプト式を使ってuserNameとcourseの値を表示しています。
サーブレットクラスで取得するときと考え方は同じ
JSPファイルでリクエストパラメータを取得する書き方は、サーブレットクラスで取得するときとよく似ています。
どちらの場合も、HttpServletRequestのgetParameterを使います。
サーブレットとJSPの取得方法の比較
| 項目 | サーブレットクラス | JSPファイル |
|---|---|---|
| 値を持っているもの | HttpServletRequest | HttpServletRequest |
| 取得に使うメソッド | request.getParameter | request.getParameter |
| 文字コード指定 | request.setCharacterEncoding | request.setCharacterEncoding |
| requestの用意 | doGetやdoPostの引数で受け取る | 暗黙オブジェクトとして使える |
| doGetやdoPost | 必要 | JSPファイルには直接書かない |
サーブレットクラスでは、doPostメソッドやdoGetメソッドの引数としてrequestを受け取ります。
JSPファイルでは、requestを宣言していないのに使えます。これは、JSPにあらかじめ用意されている暗黙オブジェクトだからです。
図2:サーブレットとJSPでのrequestの使い方の違い

この図から分かること
サーブレットクラスでもJSPファイルでも、リクエストパラメータはHttpServletRequestから取得します。
サーブレットクラスでは、doGetメソッドやdoPostメソッドの引数としてrequestを受け取ります。一方、JSPファイルでは、requestを宣言しなくてもそのまま使えます。
JSPのrequestは、暗黙オブジェクトとしてあらかじめ用意されています。そのため、スクリプトレットやスクリプト式の中で、すぐにrequest.getParameterを使えます。
暗黙オブジェクトとは
JSPには、暗黙オブジェクトという特別なオブジェクトがあります。
暗黙オブジェクトは、JSPファイルの中であらかじめ使えるように用意されているオブジェクトです。開発者が自分で宣言しなくても、スクリプトレットやスクリプト式の中で利用できます。
requestも、この暗黙オブジェクトの1つです。
そのため、JSPファイルの中では、次のようにrequestをそのまま使えます。
request.getParameter("userName")
サーブレットクラスのように、HttpServletRequest requestを自分で宣言しているわけではありません。JSPがサーブレットクラスへ変換される過程で、requestなどのオブジェクトが使えるように準備されている、と考えると分かりやすいです。
主な暗黙オブジェクト
JSPには、request以外にも複数の暗黙オブジェクトがあります。
| オブジェクトの名前 | オブジェクトの型 |
|---|---|
| pageContext | jakarta.servlet.jsp.PageContext |
| request | jakarta.servlet.http.HttpServletRequest |
| response | jakarta.servlet.http.HttpServletResponse |
| session | jakarta.servlet.http.HttpSession |
| application | jakarta.servlet.ServletContext |
| out | jakarta.servlet.jsp.JspWriter |
| config | jakarta.servlet.ServletConfig |
| page | java.lang.Object |
| exception | java.lang.Exception |
たくさんありますが、最初からすべてを覚える必要はありません。
まずは、JSPには宣言しなくても使える特別なオブジェクトがあること、そしてリクエストパラメータを取得するときにはrequestを使うことを押さえておきましょう。
この先の学習では、request、session、applicationのようなオブジェクトを扱う場面が出てきます。現時点では、requestはフォームから送られてきた値を取り出すために使える、と理解しておけば十分です。
図3:JSPの暗黙オブジェクトrequest

この図から分かること
JSPファイルでは、requestなどの暗黙オブジェクトがあらかじめ用意されています。
そのため、スクリプトレットやスクリプト式の中で、requestを宣言せずに使えます。requestの中には、フォームから送られてきたリクエストパラメータが格納されています。
JSPでリクエストパラメータを取得できるのは、この暗黙オブジェクトrequestが利用できるためです。
request.getParameterを使うときの注意点
JSPでrequest.getParameterを使う場合も、サーブレットクラスで使う場合と同じ注意が必要です。
特に、フォーム部品のname属性とgetParameterに指定する名前が一致しているかを確認しましょう。
確認したいポイント
| 確認項目 | 内容 |
|---|---|
| フォーム側のname属性 | JSP側で取得したい名前と一致しているか |
| request.getParameterの引数 | name属性と同じ名前を指定しているか |
| 文字コード指定 | getParameterより前にsetCharacterEncodingを実行しているか |
| 大文字小文字 | userNameとusernameを混同していないか |
| 送信先 | action属性がJSPファイルを指しているか |
たとえば、フォーム側でname属性がuserNameなのに、JSP側でrequest.getParameter("name")と書くと、userNameの値は取得できません。
getParameterで指定した名前のリクエストパラメータが存在しない場合はnullが返されます。
JSPではdoGetやdoPostを書かない
サーブレットクラスでは、GETリクエストを処理する場合はdoGetメソッド、POSTリクエストを処理する場合はdoPostメソッドを作成しました。
一方、JSPファイルでは、通常の書き方としてdoGetメソッドやdoPostメソッドを自分で書くことはありません。
JSPファイルは、リクエストされるとアプリケーションサーバによってサーブレットクラスへ変換されます。その内部処理の中で、リクエストを受け取り、JSPに書かれた内容を実行します。
そのため、JSPファイルでは、スクリプトレットの中でrequestを使ってリクエストパラメータを取得できます。
サーブレットとJSPの書き方の違い
| 比較項目 | サーブレット | JSP |
|---|---|---|
| 作成するファイル | Javaクラスを作成する | JSPファイルを作成する |
| 主な役割 | リクエストを受け取り、Javaで処理を行う | HTMLを中心に画面を表示する |
| HTMLの書き方 | out.printlnを使ってHTMLを1行ずつ出力する | HTMLをそのまま記述できる |
| Javaコードの書き方 | doGetメソッドやdoPostメソッドの中に処理を書く | スクリプトレット内にJavaの処理を書く |
| リクエストパラメータの取得 | doGetまたはdoPostの引数で受け取ったrequestを使う | 暗黙オブジェクトのrequestをそのまま使う |
| requestの用意 | HttpServletRequest requestをメソッドの引数で受け取る | 宣言しなくてもrequestを利用できる |
| 実行メソッド | GETならdoGet、POSTならdoPostが実行される | JSPファイル内にdoGetやdoPostを直接書かない |
| URLの指定 | @WebServletで設定したURLパターンを指定する | webappからのパスとファイル名を指定する |
| 画面作成のしやすさ | HTMLが多いとコードが長くなりやすい | HTML中心なので画面構造を把握しやすい |
| 向いている処理 | 入力値の取得、判定、処理の振り分け | 処理結果の表示、HTML画面の作成 |
JSPではdoGetやdoPostを書かないため、フォームの値を取得する処理を短く書けます。
ただし、JSPで直接リクエストパラメータを取得する方法は、あくまで仕組みを理解するために紹介される書き方です。
JSPファイルでリクエストパラメータ値を取得しない考え方
ここまで、JSPファイルでリクエストパラメータを取得する方法を見てきました。
ただし、MVCモデルに沿った設計では、JSPファイルでリクエストパラメータを直接取得することは原則として行いません。
MVCモデルでは、リクエストパラメータの取得や処理はサーブレットなどが担当し、JSPは画面表示を担当する、という役割分担で考えます。
MVCモデルでの役割の考え方
| 役割 | 担当する内容 |
|---|---|
| サーブレット | リクエストを受け取り、パラメータを取得し、処理を行う |
| JSP | 処理結果を表示する |
| request | 送信データや表示用データを受け渡すために使われる |
今回の内容は、JSPでもrequest.getParameterを使えば値を取得できる、という仕組みを理解するためのものです。
実際の設計では、JSPに処理をたくさん書くのではなく、サーブレットとJSPの役割を分ける考え方が大切になります。
現時点では、JSPには暗黙オブジェクトがあり、requestを宣言せずに使えること、そしてJSPでもgetParameterでリクエストパラメータを取得できることを押さえておきましょう。
