tips1. AbstractController

ログイン処理で、SpringMVCの動作を見ていただいたことと思います。
ところで、HTMLからパラメータを受け取らない、単純な動作を行うには SimpleFormControllerを
継承するのは、面倒だと思いませんか? 例えば logout処理。

logout処理ですることは、sessionを破棄して、login.jspに戻ることです。
早速、実装例を示します。

/action/logout.html

http://localhost:8080/SpringWeb2/action/logout.html に対して、id="logoutCtrl"を割り付けます。
SpringWeb2-servlet.xmlに以下のように追記してください。

LogoutCtrl.java追加

次に com.jxpath.springweb.login に LogoutCtrl.java を下記のように追加します。

menu.jspの改造

最後に menu.jspに、http://localhost:8080/SpringWeb2/action/logout.htmlへの入り口を追加します。

動作確認

では、mvn コマンドでビルドして、Tomcatを再起動してください。
ログインした画面( menu.jsp )に Logoutリンクが増えていて、押すと LogoutCtrl.handleRequestInternal()
メソッドがコールされて、続けて、LoginCtrl.formBackingObject()がコールされるはずです。

Logout処理のからくり

LogoutCtrl.javaが継承している AbstractControllerクラスは、HTTP/GET も HTTP/POSTも
両方とも、handleRequestInternal() メソッドをコールして、その戻り値である ModelAndView を
表示します。

AbstractControllerクラスは、SimpleFormControllerと違って、formViewメンバ変数も、successViewメンバ変数も
定義されていないので、自分で、nextPageメンバ変数を追加しました。

forward:/action/login.html

ところで、id="logoutCtrl" の定義で、nextPageの設定に、見慣れない forward: というキーワードが
ついていますね。実は、ModelAndView は jsp を表示するためだけのものではなく、URLを指定することも
できたりします。

つまり、http://localhost:8080/SpringWeb2/action/logout.html を処理すると、自動的に
http://localhost:8080/SpringWeb2/action/login.html を実行させることができるのです。

その際、HTTP/GET か HTTP/POSTかは、 /action/logout.html の時の設定を引き継ぎます。
今回の logout呼び出しは aタグのリンクだったので、HTTP/GET となっていました。

SimpleFormControllerとAbstractController

管理人の経験上、SpringMVCで Webアプリのコントローラを作るときには、このどちらかを
使うことになると思いますし、この2つで十分に事足りると思います。

使い分けは、以下の判断でよいと思います。

  • 受信するパラメータがある場合 → SimpleFormController
  • 受信するパラメータがない場合 → AbstractController