感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Spring MVCの基本。コントローラを使ってメッセージをブラウザ(view)に表示してみる。

<スポンサーリンク>

アノテーション

・@Controller
コントローラークラスであることを示すためのアノテーション

・@RequestMapping
リクエストマッピングを指定するためのもの。
文字通り、リクエストされたアドレスとメソッドをマッピングするためのものだ。

valueはリクエストの値を指定する。リクエストされたアドレスを示す。
methodはHTTPメソッドの種類を指定する。

以下の記事がパラメータについては、詳しい。
https://sites.google.com/site/soracane/home/springnitsuite/spring-mvc/07-controllerno-chu-limesoddotonomappingu-fang-fa

コントローラのサンプル

上のアノテーションを使ったコントローラの例。
・sample.SampleControllerクラス

package sample;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class SampleController {
	
	@RequestMapping(value = "/hello" , method = RequestMethod.GET)
	public String hello(Model model) {
		model.addAttribute("message", "Hello! This is First Example!");
		return "showMessage";
	}
}

addAttributeは、Modelインスタンスに属性を追加するもの。
messageという属性に、"Hello! This is First Example!"という値を設定している。

これは、後述するJSPの${message}という部分で使うことができる。

return "showMessage"というのは、showMessage.jspを表示するという意味。
ビューの名前から拡張子を取ったものを指定している。

returnで拡張子とかパスを設定しなくても表示できる理由は、
mvc-configのプロパティで/WEB-INF/view/内にあるjsp拡張子のファイルをビューテンプレートとして扱うように指定しているからだ。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- Example: a logical view name of 'showMessage' is mapped to '/WEB-INF/jsp/showMessage.jsp' -->
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
</bean>

では、WEB-INF/view以下のshowMessage.jspを見てみる。

<!DOCTYPE html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
<html>
	<head>
		<meta charset="utf-8">
		<title>Welcome</title>
	</head> 
	<body>
		<h2>${message}</h2>
	</body>
</html>

これを表示させてみよう。

実際にリクエストしてみる

コントローラを作ったら、それをコントローラとSpringフレームワークに認識させる。
WEB-INF以下にあるmvc-config.xml
デフォルトで以下のようにコメントアウトされている記述がある。

<!-- Uncomment and your base-package here:
     <context:component-scan
        base-package="org.springframework.samples.web"/>  -->

このコメントアウトを外す。

 <context:component-scan
    base-package="sample"/>

これは何かというと、上の例で作ったコントローラのあるパッケージを指定しているのである。
コントローラはsampleというパッケージの中のSampleControllerというクラスだったので、
base-package="sample"
と指定した。

で、ここまでやった時点で、

http://localhost:8080/sample-spring/hello

にリクエストしてみると・・・
f:id:sho322:20140109222235j:plain
のように表示される。

参考