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をPOST400。「数量は1〜99の整数で入力してください。」
数量3をPOST200。「合計: 1500円」
同じURLへGET405。POST専用の設計を変更していないので、今回の入力検証の修正失敗ではない。

修正版は想定される入力不正を検証し、500になる前に案内を返します。404や405は別の観点の問題なので、数値変換の修正だけですべての番号が消えるわけではありません。

元の記事に戻る

JavaのServletで404・405・500エラーが出たら?原因と確認する場所