JavaのServletで404・405・500エラーが出たら?原因と確認する場所|確認問題の回答例
JavaのServletで404・405・500エラーが出たら?原因と確認する場所の確認問題の回答例です。原因・確認する情報・修正後の結果を対応させて見直してください。
問題1:クラス名ではなくURL設定と比較する
NetworkのRequest URL、コンテキストパス /lesson05、@WebServlet(“/order-preview”)を比較します。送信先は /lesson05/order-preview です。Javaのクラス名OrderPreviewServletをURLに使う設定にはなっていません。
<form action="order-preview" method="post">
アプリ直下のorder-form.htmlなら、この相対URLで正しい場所へ送れます。修正後は数量3をフォームからPOSTし、200と合計1500円を確認します。
問題2:アドレスバーからのアクセスはGET
URLは正しくても、アドレスバーからはGETが送られます。このServletはdoPostだけなのでGETを受け付けず405になります。今回はorder-form.htmlを開き、method=”post”のフォームから送信して確認します。
POSTで200、直接GETで405という結果は、今回のPOST専用の設計に合っています。エラーを消すためだけにdoGetからdoPostを呼ぶのではなく、GETで提供する処理が必要かを設計から判断します。
問題3:HTMLのnameと取得名が一致していない
NetworkのPayloadではcount=3になり、quantityは送られていないはずです。getParameter(“quantity”)はnullを返し、エラー再現用コードのInteger.parseInt(null)がNumberFormatExceptionを通知します。数値3そのものが原因ではありません。
<input id="quantity" name="quantity" type="text"
inputmode="numeric">
このサンプルではHTMLのnameをquantityへ合わせます。idだけを変更しても、送信するパラメータ名は直りません。加えて修正版のnull確認を残し、パラメータが届かないリクエストにも対応します。
問題4:入力の問題とHTTPメソッドの問題を分ける
| 操作 | 期待する結果 |
|---|---|
| 数量abcをPOST | 400。「数量は1〜99の整数で入力してください。」 |
| 数量3をPOST | 200。「合計: 1500円」 |
| 同じURLへGET | 405。POST専用の設計を変更していないので、今回の入力検証の修正失敗ではない。 |
修正版は想定される入力不正を検証し、500になる前に案内を返します。404や405は別の観点の問題なので、数値変換の修正だけですべての番号が消えるわけではありません。