JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■SpringMVC の小径 第5歩 Spring-MVC 初めの一歩
5-2)コントローラ作成
viewができたので、次はこのviewを制御するコントローラの説明です。
以前決定した「詳細設計」に基づき、コントローラクラスを配置する場所にコントローラを作成します。
Eclipse「ナビゲータ」の「src/main/java/jp/dip/arimodoki/cntl」を選択し、
マウス右ボタンクリックでメニューを表示し、
表示されたメニューから「新規」ー「ファイル」を選択します。

「新規ファイル」画面が開くので、ファイル名に「Hello.java」を入力して決定します。
Hello.java
「エディットビュー」に空の「Hello.java」が開くので、以下の内容を入力します。
src/main/java/jp/dip/arimodoki/cntl/Hello.java
※)上のHello.javaの内容は、自由にコピペしてもらって結構です。

では、すこし丁寧に説明します。

① @Controllerアノテーション宣言
  Spring-MVCに、このクラスはコントローラですと教えてあげるためのおまじないです。
  以前、「4-2)Spring-MVC設定」で、Spring-MV設定ファイル「applicationContext.xml」
  の、コンポーネントスキャン宣言を定義しましたが、Spring-MVCは、
  このコンポーネントスキャン宣言で指定されたパッケージ配下の、
  @Controllerアノテーションが宣言されているクラスをコントローラと認識して処理を行います。

② @RequestMappingアノテーション宣言
  処理すべきコントローラは、@Controllerで見つかりました。
  この@RequestMappingアノテーションは、ブラウザからリクエストされた
  URLパターンにマッチするメソッドを判定するためのアノテーション宣言です。
  「4-1)web.xml 設定」の、「リクエストパターン指定」で、「*.xhtml」を指定しました。
  ブラウザから、「http://localhost:8080/j_Labo/hello.xhtml
  とリクエストされた場合、URLパス名の拡張子に、xhtmlが付いているので、
  Spring-MVCのDispatcherServletは、HandlerMappingに処理を引き渡します。
  HandlerMappingは、URLパス名の拡張子 .xhtmlを取り除いた
  helloという名前でマッピングされたメソッドをコントローラクラスから検索します。
  マッピングされたメソッド(この場合、hello_view()というメソッド)が見つかれば、そのメソッドが実行されます。
  Spring-MVCは、@RequestMappingで宣言されたマッピング名を元にメソッドを検索するため、
  メソッド名自体は特にhelloである必要はなく、ぶっちゃけどんな名前でも構いません。
  (※ただし、Javaの命名規約に従って、メソッド名がクラス内で重複しなければですが)

   @RequestMappingアノテーションに指定するマッピング名は、アプリケーション全体でユニークでなければなりません。
    なぜなら同一名が重複するということは、URLも重複するということになるので、コントローラが発狂するのです。
    マッピング名は十分注意して設計する必要があります。


③ 処理結果の返却
  コントローラで処理された結果を、viewに返却します。
  「4-2)Spring-MVC設定」「Thymeleaf設定」の「suffix」プロパティで「html」を指定しました。
  ここで、コントローラメソッドのリターン値 ”hello” を指定すると、Spring-MVCは、
  "hello"に「suffix」html を付加して、"hello"+"html" = "hello.html" を
  「Thymeleaf設定」の「prefix」で指定された場所(WebContent)から検索し、
  このテンプレートの内容をブラウザに返却します。
  この例ではまだ、メソッド内では何も処理を行っている訳ではなく、単純に"hello.html”を返却しているだけです。

 

非常にシンプルなコントローラですね。
viewもできていることだし、ほんとに動くか次節で動作を確認してみましょう。

 

ちょ、ちょ、ちょっとマテクダサ~い。早すぎて足くじきそうです。
アルジャーノンだか、アテンションプリーズだかいう単語がよく理解できないんですが何のことデスか?
あぁ、アノテーションですね? 実は私も人に説明して理解してもらえるほど造詣が深くなかったので、
できればそのままスルーするつもりでしたが、痛いところを突かれました。
アノテーション(Annotation)を直訳すると、注釈や注記、注解などいわゆる「コメント」みたいな意味合いですが、
Javaにおけるアノテーションという意味では、Wikipediaなどで引いてみると
「データに対して関連する情報(メタデータ)を注釈として付与すること」となっています。
なんかよくわかりませんね。
私もどう説明したものか言葉に困りますが、砕けた言い方をすると、
いわゆる、//とか、/* */ のコメントと違い、Javaの一定のルールに従って
メタデータを付与されたアノテーション(注釈)を宣言すると、
そのクラス(やメソッド)はメタデータの情報に基づき特別なふるまいを行う。
とでも言えばわかりやすいでしょうか?

この例の場合ですと、Classに、@Controllerアノテーション宣言を付加することによって
このClassはコントローラとして仕事をするので、よろしくたのんますよ。とSpring-MVCに教えています。
メソッドにメタ情報付きで、@RequestMapping(value = "/hello")と宣言することによって
このメソッドは、"hello"という名前でマッピングしておくから、リクエストが来たら
ちゃんと私を見つけておくんなさい。とSpring-MVCにお願いしている訳です。

どうですかね?
少しはわかったかも?(自信なし)  ^^);