Spring BootでWebアプリケーションを作りたい! 環境構築 + Hello World編 STS3.8.2(Eclipse) + Gradle(Buildship) + JSP

巷では流行っているSpring Boot。
どうしてもSpring Bootを使いこなしたい私です。
仕事のプロジェクトも全部Spring Bootになってしまえばいいのに(ぉぃ)

今回は、下記の環境でSpring BootによるMVCJSPで作っていきます。
Thymeleafはまた今度。

IDE STS 3.8.2
Gradle Buildship Gradle Integration 1.0(Plugin)

Gradleプラグインのインストール

初っ端からはまった。Eclipse Market Placeからインストールってどのサイト見ても書いてるんだけど、
「Gradle (STS) Integration for Eclipse」なんてプラグイン見つかりません。
どれをインストールしてよいのか分からず。

とりあえず、Gradle IDE Packをインストールしてみた。
f:id:yasay:20161209151209p:plain

再起動したらなんか警告でた。
f:id:yasay:20161209151235p:plain

訳:
STS gradleプラグインは最小限のメンテナンスであり、今後中止される可能性があります。
STS GradleからBuildshipへの移行プロセスを説明する文書がここにあります。

・・・つまりもうメンテしないから違うプラグインに移行してってことかな。

どうやら、Buildshipに移行してくれとのことです。
Migration guide from STS Gradle to Buildship · eclipse/buildship Wiki · GitHub

このPluginか!
f:id:yasay:20161209152009p:plain

Eclipseがエラーを検知したらしいけど、Enableにしようとしたらポップアップが消えちゃった・・。まぁいいや。
f:id:yasay:20161209153121p:plain

これでやっとGradleプラグインのインストールが完了。

demoプロジェクトを作ってみる。

Typeに"Gradle (Buildship)"を選択。
f:id:yasay:20161209153247p:plain

とりあえずWebプリケーションを作ってみたいので、Webを選ぶ。
f:id:yasay:20161209153834p:plain

雛形が作成されました。
f:id:yasay:20161209154211p:plain

ControllerとJSPファイルを追加する。

詳しくは分からないのですが、JSPを利用すると
Spring Bootの恩恵を最大限に受けられないらしく、
Thymeleafを使うことを推奨されています。
ということは、Spring MVCからSpring Bootへの移行って
あまり需要ないのかもしれないですね?

Spring Legacy Projectで作られるコードを元にして、
HomeControllerとJSPファイルを作成していきます。

  • HomeController.java
// HomeController.java
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}


JSPは"src/main"ディレクトリ配下に下記のディレクトリ構成を作って配置します。
f:id:yasay:20161209184505p:plain

<!-- home.jsp -->
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>
application.propertiesを修正する

jspファイルを読み込めるよう、設定を記述します。

  • application.properties
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
Gradleでtomcat-jasperライブラリを取得するよう変更する

Gradleをごにょごにょ記述するのはmavenより好きになれそう。

  • build.gradle
buildscript {
	ext {
		springBootVersion = '1.4.2.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

jar {
	baseName = 'demo'
	version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
	mavenCentral()
}

dependencies {
	compile('org.springframework.boot:spring-boot-starter-web')
	testCompile('org.springframework.boot:spring-boot-starter-test')
	compile('org.apache.tomcat.embed:tomcat-embed-jasper:8.5.6')
}

tomcat-embed-jasperのバージョン指定を変数に変更しようと思ったんですが、
うまくいきませんでした。これはGradle文法を学ぶ必要あり。もしよければプルリク下さい。

ライブラリを再インポートする

プロジェクトを右クリック「Gradle」→「Refresh Gradle Project」を実行
f:id:yasay:20161209191615p:plain

実行する

プロジェクトを右クリック「Run As」→「Spring Boot App」を実行
f:id:yasay:20161209191730p:plain

画面が表示されました!

f:id:yasay:20161209191818p:plain

GitHubソースコードを置きました。

備忘録がてらGitHubに置きました。
github.com


結論:Spring Boot使ってて楽しい!
次は下記のようなことにチャレンジしていきます。

  • Thymeleafを使う
  • ロギングの設定を行う
  • IntelliJ IDEAで同じことをやってみる
  • Jarファイルのデプロイ



おまけ:GradleのZipを直接ダウンロードして環境変数を通してみる。

Gradleのインストール

公式サイトからZipファイルをダウンロードしてきて、お好きな場所に保存
Gradle Build Tool

Gradleの環境変数の設定

GRADLE_HOMEにGradleのホームディレクトリを設定する
f:id:yasay:20161209144006p:plain

Pathに"GRALE_HOME\bin"を設定する
f:id:yasay:20161209144512p:plain

動作確認

無事にパスが通りました↓
f:id:yasay:20161209150041p:plain