せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

Springのチュートリアル〜第1回 SpringMVCその1

今日はServing Web Content with Spring MVCを動かしてみます。

ダウンロードは↓から。

Getting Started · Serving Web Content with Spring MVC

作るコードもリンク先にあるので、ここには書いたりしません。

ソースの作成

このチュートリアルは3つのクラスを作ります。
コピペすれば一瞬ですが、量も大したことないので全部打ち込んで試してみることをおすすめします。

  • 実行するmainメソッドを持つクラス
  • Controllerクラス
  • ビューであるテンプレートファイル(html)

まずはControllerクラスです。
@Controllerアノテーションを付ける。
URLとの紐付けは@RequestMapping("/greeting")で行う。
Spring3.2とあまり違いはなさそう。

ビューとなる部分は、JSPじゃなくてThymeleafというテンプレートエンジンを使います。
ネームスペースに

<html xmlns:th="http://www.thymeleaf.org">

と書いて、置換する部分は

<p th:text="'Hello, ' + ${name} + '!'" />

と書くだけでOKです。

実行

実行する方法は2つあります。

  • WARを作って配備する
  • mainメソッドを呼び出す

今回の推奨は当然後者です。 mainメソッドを呼び出すとこんなロゴが出てSpringBootが起動します。

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::             (v0.5.0.M6)

起動が完了するとhttp://localhost:8080/greeting/にアクセスして作成したアプリケーションが呼び出されます。
動いているのはSpringBootに内蔵されたTomcatです。
http://localhost:8080/にアクセスすれば、Tomcatの404画面が出てきます。

Executable Jarの作成

build.gradleを修正することで、実行可能なJarファイルを作れます。
java -jarで実行すると、mainメソッドを実行した時と同じようにTomcatが起動します。
Jarファイルの大きさは10MB程度。
TomcatやSpringのlibraryがぎっしり入っています。

Manifestファイルはこんなかんじです。

Manifest-Version: 1.0
Start-Class: hello.Application
Spring-Boot-Version: 1.0.0.RC1
Main-Class: org.springframework.boot.loader.JarLauncher

JarLauncherクラスについては別の機会に見ていこうと思います。

制約?

mainメソッドを持つApplicationクラスは@ComponentScanアノテーションが付加されています。
このアノテーションが付いている場合、Springは同一パッケージを検索してコンポーネントを探し出します
今回作成したControllerクラスとApplicationクラスのパッケージを変えてみると、Tomcatは起動しますがコンポーネントはパッケージが違うのでロードされません。
なので、http://localhost:8080/greeting/にアクセスしても404になります。

Applicationクラスで違うパッケージのControllerを指定できるといいのになぁ。

出来ました。
@ComponentScanにパッケージを指定できます。

@ComponentScan(basePackages="hello.component")

クラスのフィルターなどもできるので、起動が遅い場合は指定してみるとかできますね。

まとめ

SpringBootを使うことで、面倒な環境設定をせずにWebアプリケーションを作成することができます。
NetBeansGlassfishに比べれば学習にかかるコストは小さいと思います。

ただ「本番はWebLogicを使う開発」みたいなものにはあまり利点を生かせないかも。
アプリケーションサーバを使用する開発はJava EE、Herokuなどクラウド環境で動かす場合はSpringというように、住み分けができると面白いかも。