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

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

このページは、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メソッドで処理を振り分ける段階を分けて考えます。

元の記事に戻る

Javaの@WebServletとは?URLとServletを結び付ける仕組み