Javaの@WebServletとは?URLとServletを結び付ける仕組み|確認問題の回答例

このページは、Javaの@WebServletとは?URLとServletを結び付ける仕組みの確認問題の回答例です。
問題1:doGetを呼ぶURL
http://localhost:8080/lesson05/stock
/lesson05でアプリを選び、/stockでStockServletを選びます。アドレスバーからのGETリクエストなのでdoGetが呼ばれます。クラス名や.javaはURLに付けません。
問題2:HTMLをformsフォルダへ移した場合
action="stock" のままだと、送信先は http://localhost:8080/lesson05/forms/stock です。1つ上の階層に戻る相対パスを使います。
<form action="../stock" method="post">
<button type="submit">POSTの到着を確認する</button>
</form>
送信先は /lesson05/stock となり、StockServletのdoPostに届きます。action=”/stock”では /lesson05 が抜けるため、同じ意味にはなりません。
問題3:アノテーションを変えた場合
http://localhost:8080/lesson05/inventory
<a href="inventory">在庫を確認する</a>
<form action="inventory" method="post">
<button type="submit">POSTの到着を確認する</button>
</form>
これはHTMLがアプリ直下にある場合の記述です。新しいURLもStockServletが処理します。クラス名が同じでも、古い/lesson05/stockへの対応は残りません。他のマッピングがなければ古いURLは404になります。
問題4:doPostがない場合
| 操作 | 結果 |
|---|---|
| リンクのクリック | GETなのでdoGetが動き、「在庫を確認しました。」と表示される。 |
| フォームの送信 | POSTなので、対応するdoPostを実装していないこのServletでは405になる。 |
mainを追加しても解決しません。Servletの処理を呼ぶのはコンテナであり、POSTを受けるならdoPostを実装します。URLからServletを選ぶ段階と、HTTPメソッドで処理を振り分ける段階を分けて考えます。