Servlet/JSP 基礎編08 JSPのリクエスト処理

作成するプログラム

この記事では、JSPからリクエストパラメータを取得して、利用する方法を解説したいと思う。
そして、それを理解するための例として、テキストボックスに入力した内容をリクエストパラメータとして、処理し、画面に表示するプログラムと、入力内容を変数として扱い、計算結果を画面に表示するプログラムを作成する。

プログラム1

テキストボックスに入力した内容をリクエストパラメータとして処理し、画面に表示するプログラムを作成するために、まず、入力用のJSPファイル、出力用のJSPファイルを作成する。

入力用のJSPファイルを作成する。下記がそのプログラムである。

<%@page contentType="text/html; charset=UTF-8" %>
<%@include file="../header.html" %>

<p>お名前を入力してください</p>
<form action="greeting-out.jsp" method="post">
<input type="text" name="user">
<input type="submit" value="確定">
</form>

<%@include file="../footer.html" %>

 <p>タグで「お名前を入力してください」と表示し、下にテキストボックスを設置する。テキストボックスの横に、確定ボタンを設置し、押すと、リクエストが送られる。

送られたリクエストはformタグに書かれている、「greeting-out.jsp」が処理をする。

リクエストを処理する「greeting-out.jsp」を作成する。下記がそのプログラムである。

<%@page contentType="text/html; charset=UTF-8" %>
<%@include file="../header.html" %>

<% request.setCharacterEncoding("UTF-8"); %>
<p>こんにちは、<%=request.getParameter("user"%>さん! </p>

<%@include file="../footer.html" %>

まず、リクエストとレスポンスとの文字エンコーディングを正し、<p>タグの中に、文字と、スクリプトレットの中で「getParameterメソッド」を利用する。

スクリプトレットさえ使えば、サーブレットと方法は全く同じである。

実際のブラウザでの画面は以下となる。

f:id:kouki-matsuura:20200828110912p:plain

リクエストに対し、返ってきたレスポンスは以下である。

 

こんにちは、あああさん!

 

「こんにちは、〇〇さん!」と表示されていることが分かる。

プログラム2

次は、入力内容を変数として扱い、計算結果を画面に表示するプログラムを作成する。

このプログラムでは、テキストボックスを3つ使用する。

〇〇円 × 〇〇個 + 送料〇〇円=

のような感じで入力欄を設置し、このリクエストを送れば、計算し、結果を返すプログラムを作成する。

まず、入力欄のJSPページは以下である。

<%@page contentType="text/html; charset=UTF-8" %>
<%@include file="../header.html" %>

<form action="total-out.jsp" method="post">
<input type="text" name="price">
円×
<input type="text" name="count">
個+送料
<input type="text" name="souryou">
円=
<input type="submit" value="計算">
</form>

<%@include file="../footer.html" %>

 formタグで「total-out.jsp」を指定する。リクエストはこのファイルで処理される。

inputタグを3つ用意し、単品の金額、個数、送料を入力してもらい、最後に計算ボタンを押すと、リクエストが送られる。

ここで一つ、注意点があり、この3つの欄に数値以外のものが入力されると、エラーが出てしまうので、このエラーを想定したページも用意しなければなりません。

エラーページを作成するには、「isErrorPage属性」が必要となる。これを利用すると、例外処理を記述することができる

実際のプログラムが以下である。

<%@page contentType="text/html; charset=UTF-8" %>
<%@include file="../header.html" %>

<%@page isErrorPage="true" %>

<p>数値を入力してください</p>

<p><%=exception %></p>

<%@include file="../footer.html" %>

 まず、ページディレクティブの中で「isErrorPage属性」をtrueにする。これで、例外処理の暗黙オブジェクトが利用できる。

使い方としてはスクリプトレットの中に式の形式で「exception」と書くだけでエラー内容が表示されるようになる。このページはこれで終わりである。

さいごに、最も重要な、「total-out.jsp」を作成する。

<%@page contentType="text/html; charset=UTF-8" %>
<%@include file="../header.html" %>

<%@page errorPage="total-error.jsp" %>

<%
request.setCharacterEncoding("UTF-8");
int price = Integer.parseInt(request.getParameter("price"));
int count = Integer.parseInt(request.getParameter("count"));
int souryou = Integer.parseInt(request.getParameter("souryou"));
%>

<%=price %>円×<%=count %>個+送料<%=souryou %>=<%=price*count+souryou %>

<%@include file="../footer.html" %>

 ページディレクティブに「errorPage」と書かれているが、これはエラーページの設定であり、エラーが発生した場合に表示されるファイルを書く。「total-error.jsp」は一つ上の例外処理を記述しているページである。

次に、スクリプトレットの中で「getParameterメソッド」で、リクエストパラメータを受け取り、「price*count+souryou」で計算をし、表示している。

結果は以下である。

f:id:kouki-matsuura:20200828113503p:plain

計算結果は次のようになった。

 

100円×100個+送料100=10100円

 

10100円となっており、「100 * 100 + 100」がしっかりと計算されていることが分かる。

ちなみに、入力欄で数字以外のものを入力したときに返ってきたものも載せておく。

 

数値を入力してください

java.lang.NumberFormatException: For input string: "aaa"

 

「exception」と書くだけで、エラー内容が表示されていることが分かる。

さいごに

今回はJSPにおけるリクエストの処理方法を解説した。

これで、サーブレットにおける処理とJSPにおける処理を紹介した。

次回からは、サーブレットJSPの両方を使って、様々な機能を紹介していきたいと思う。