読者です 読者をやめる 読者になる 読者になる

ことばアルバム

にわかエンジニアのにわか備忘録

Java8 + Spring4 + Spring Boot + Thymeleaf でJavaのWebアプリ

そもそもがJavaエンジニアなので、java8も一応触っておかなきゃなと思い。
あと、フレームワークのSpringも4系が出たので一応触っておかなきゃなと思い。
噂によると、SpringBootというやつを使えば楽に開発できると聞き、最近はThymeleafというテンプレートエンジンがイケてると聞き、そんないろいろがあって試してみました。


Java8

なんかラムダ式が使えるようになったとかStreamが良い感じとか聞きました。
ここからJDKJREを入手。


Spring4

java8に対応したり、WebSocketに対応したり、いろいろ進化したらしい。
ここからSpring Tool Suite(Springが最初から入ったEclipse)を入手。バージョンは3.5系から。


SpringBoot

Springの各ライブラリ(aopだとかcontextだとか)をひとまとめにしてくれたものらしい。
かつ、tomcatとかjettyとかも一緒に用意してくれるからサーブレットコンテナを別に用意しなくていいらしい。


Thymeleaf

Javaのテンプレートエンジン。
今までFreeMarkerを使ってたのですが、最近はこっちらしい。
調べるといろいろ出てくる。


準備

JDKJRE準備して、sts側で使われてるのが1.8.0とかになってる事を確認して、mavenのバージョンも3.0.3とかになってることを確認。

 

Package Explorerのところで右クリック→NewSpring Starter Projectstyleのところでwebにチェックを入れてFinish


pom.xml

必要なライブラリをdependenciesに追加。
JettyよりTomcat!って人はspring-boot-starter-jetty要らないし、exclusionsも無くて大丈夫。
javaのバージョンは1.8に変更。

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring4</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <start-class>demo.Application</start-class>
        <java.version>1.8</java.version>
    </properties>

Controller

ディレクトリ構成はこんな感じ

f:id:is4cafe:20140403152501p:plain

SampleControllerを作っていく。
新しく@Controller以外に@RestControllerが使えるようになった!的なのを見かけるけど、@RestController付けると@RequestMappingついてるメソッドに@ResponseBodyがくっついちゃってテンプレートエンジン使ってのレンダリングがされなくなるから要注意。

package demo;

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

@Controller
public class SampleController {
    
    @RequestMapping("/")
    public String home(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "home/hello";
    }

}

html

hello.htmlはこんな感じ。
Thymeleaf活かしきれてない。

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

実行

必要なものをinstall

mvn install

パッケージ化

mvn package

実行

java -jar target/MyApp-0.0.1-SNAPSHOT.jar

localhost:8080/にアクセス

f:id:is4cafe:20140403153001p:plain


かなり楽にJavaのアプリケーション作れました。
これは楽しいかもしれない。
次はjava8的な部分やSpring4的な部分を試していきたいです。