JavaのServletからModelクラスを呼び出すには?入力値を渡して処理結果を受け取る方法|確認問題の回答例

Schoo Java入門 中級 第5回 サーバーサイドアプリケーションの実装基礎

このページは、JavaのServletからModelクラスを呼び出すには?入力値を渡して処理結果を受け取る方法の確認問題の回答例です。各問題は本文の元の仕様から独立して考えます。

問題1:12,000円を送ったときの値

段階型と値
getParameterで取得String型の文字列 “12000”
Modelの引数へ渡すint型の12000
Modelの戻り値int型の500
Servletのdiscountint型の500

getParameterで受け取った文字列をintに変換してから渡します。戻り値は支払金額11,500ではなく割引額500です。Servletのamountは12,000のままであり、戻り値をdiscountに受け取ります。

問題2:割引条件と割引額を変更する

DiscountModelの負の値を拒否する処理は残し、その後の判定部分を次のように変えます。

if (amount >= 15000) {
    return 800;
}
return 0;

14,999円は0、15,000円は800が返ります。メソッド名・引数・戻り値の型は変わらないため、本文のServletの呼び出しとJSPの数値表示はそのまま使えます。条件を説明する文言やテストの期待値も、新しい仕様に合わせて確認します。

問題3:戻り値を受け取って表示側へ渡す

int discount = model.calculateDiscount(amount);
request.setAttribute("discount", discount);

元の2行では、戻り値を受け取らずに0をrequestへ入れていました。修正後はModelが返した500をdiscountに代入し、その値をJSPへ渡します。Model内でprintlnを書き足す修正ではありません。

問題4:不正な入力をどこで扱うか

入力問題を見つける場所Modelを呼ぶか
未入力Servletのtext == nullまたはtext.isBlank()呼ばない。
abcServletのInteger.parseIntでNumberFormatExceptionが起きる呼ばない。数値への変換が完了しないため。
-1Modelのamount < 0でIllegalArgumentExceptionを投げる呼ぶ。-1は整数へ変換できるが、Modelの受け付ける条件に合わない。

Modelが通知したIllegalArgumentExceptionはServletがcatchし、固定のエラーメッセージをJSPへ渡します。ブラウザの入力欄で通常は送信が止まる場合でも、サーバー側にその値が届いたケースとして考えます。

元の記事に戻る

JavaのServletからModelクラスを呼び出すには?入力値を渡して処理結果を受け取る方法