Java8 + Spring4 + Spring Boot + Thymeleaf でJavaのWebアプリ
そもそもがJavaエンジニアなので、java8も一応触っておかなきゃなと思い。
あと、フレームワークのSpringも4系が出たので一応触っておかなきゃなと思い。
噂によると、SpringBootというやつを使えば楽に開発できると聞き、最近はThymeleafというテンプレートエンジンがイケてると聞き、そんないろいろがあって試してみました。
Java8
なんかラムダ式が使えるようになったとかStreamが良い感じとか聞きました。
ここからJDKとJREを入手。
Spring4
java8に対応したり、WebSocketに対応したり、いろいろ進化したらしい。
ここからSpring Tool Suite(Springが最初から入ったEclipse)を入手。バージョンは3.5系から。
SpringBoot
Springの各ライブラリ(aopだとかcontextだとか)をひとまとめにしてくれたものらしい。
かつ、tomcatとかjettyとかも一緒に用意してくれるからサーブレットコンテナを別に用意しなくていいらしい。
Thymeleaf
Javaのテンプレートエンジン。
今までFreeMarkerを使ってたのですが、最近はこっちらしい。
調べるといろいろ出てくる。
準備
JDKとJRE準備して、sts側で使われてるのが1.8.0
とかになってる事を確認して、mavenのバージョンも3.0.3
とかになってることを確認。
Package Explorer
のところで右クリック→New
→Spring Starter Project
→style
のところで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
ディレクトリ構成はこんな感じ
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/
にアクセス
かなり楽にJavaのアプリケーション作れました。
これは楽しいかもしれない。
次はjava8的な部分やSpring4的な部分を試していきたいです。