【Spark Framework】初期設定 ~ 環境構築(Gradle Project)からHello Worldまで / 旧版 ~

■ Spark Framework

 * 分散処理エンジン Apache Sparkとは異なる

特徴

 * 軽量フレームワーク
 * Java EEを使わない
 => JSP/Servletを使わない。Tomcat上に動かさずにすみ、サーバ(Jetty)も内包されている

周辺ツール

 * ビルド管理       : Maven, Gradle
 * Viewテンプレート : FreeMarker, Verocity, Mustache複数をサポート

公式サイト

http://sparkjava.com/
https://sparktutorials.github.io/2015/04/03/setting-up-spark-with-gradle.html

■ 環境構築

 * 以下のサイトを参考にした
https://sparktutorials.github.io/2015/04/03/setting-up-spark-with-gradle.html
http://hibiso.net/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AA%E3%81%97%E3%81%8C%E3%81%97-spark%E7%B7%A8/
2017/11/03追記
 * 本記事では、プラグインとして、「STS Gradle」を使っているが、
   「Buildship」の方がいい。理由については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/37204914.html

今回作成する環境下

2017/11/01:バージョンがあがったのでリニューアルした
 * OS              : Windows10
 * Java            : Java1.8
 * Eclipse         : Oxygen.1a Release (4.7.1a) (以前は「Neon Release (4.6.0)」)
 * ビルド ツール   : Gradle
 * Spark Framework : Spark v2.6 (以前は「Spark v2.5」)

準備

[a] Gradle IDE for Eclipse のインストールする(一度だけでいい)
a-1) Eclipseの[Help]-[Eclipse Marketplace…]-[Search]を選択し、
     Find欄に「Gradle」を入力し、Enterキー押下
a-2) 「Gradle IDE Pack X.X.X」(今回は「Gradle IDE Pack 3.8.X+1.0.X+2.2.X」)を探し、
     「Installed」ボタン押下
# 以前は「Gradle IDE Pack 3.8.X+1.0.X」
a-3) 後はインストールして、Eclipseを再起動する

Hello World を作成する

[1] プロジェクト(Gradle Project)を作成する

1-1) Eclipseの[File]-[New]-[Other]-[Gradle (STS)]-[Gradle (STS) Project]を選択し、
     「Next」ボタン押下
1-2) 以下を入力し、「Finish」ボタン押下
 + Project Name   : 任意(今回は「SampleSpark」)
 + Sample project : Java Quickstart

【出力結果】
[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks: 
[sts]      :cleanEclipse
[sts]      :eclipse
[sts] -----------------------------------------------------
:cleanEclipseClasspath UP-TO-DATE
:cleanEclipseJdt UP-TO-DATE
:cleanEclipseProject UP-TO-DATE
:cleanEclipse UP-TO-DATE
:eclipseClasspath
:eclipseJdt
:eclipseProject
:eclipse

BUILD SUCCESSFUL

Total time: 0.352 secs
[sts] -----------------------------------------------------
[sts] Build finished succesfully!
[sts] Time taken: 0 min, 0 sec
[sts] -----------------------------------------------------

[2] ビルドスクリプト「build.gradle」の修正

2-1) Eclipseの対象プロジェクト直下にある「build.gradle」を開く

【修正前】
dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

【修正後】
dependencies {
    compile 'com.sparkjava:spark-core:2.6.0'
    compile 'org.slf4j:slf4j-simple:1.7.25'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

2-2) Eclipseの対象プロジェクトを右クリックし、[Gradle (STS)]-[Refresh Dependencies]を選択

2-3) Eclipseの対象プロジェクト内の「src/main/java」配下にある「org.gradle」パッケージを削除する

[3] 「Hello World」を作成する

3-1) Eclipseの対象プロジェクト内の「src/main/java」を右クリックし、
     [New]-[Other]-[Class]を選択し、Javaソースを作成する(今回は「HelloWorld.java」)

3-2) 以下を参考に、「Hello World」を作成する
* HelloWorld.java
import static spark.Spark.get;

public class HelloWorld {

  public static void main(String[] args) {
    get("/", (request, respose) -> "Hello World!!");
  }
}

[4] サーバを起動する

4-1) 3-2)で作成したプログラムをJavaアプリケーションとして実行する

【出力結果】
[Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @438ms to org.eclipse.jetty.util.log.Slf4jLog
[Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - == Spark has ignited ...
[Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >> Listening on 0.0.0.0:4567
[Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.4.4.v20170414
[Thread-0] INFO org.eclipse.jetty.server.session - DefaultSessionIdManager workerName=node0
[Thread-0] INFO org.eclipse.jetty.server.session - No SessionScavenger set, using defaults
[Thread-0] INFO org.eclipse.jetty.server.session - Scavenging every 660000ms
[Thread-0] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@737e611{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
[Thread-0] INFO org.eclipse.jetty.server.Server - Started @656ms

# Spark v2.5の時のログ(パフォーマンスがあがってる?)
# [Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @543ms
# [Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - == Spark has ignited ...
# [Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >> Listening on 0.0.0.0:4567
# [Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.3.6.v20151106
# [Thread-0] INFO org.eclipse.jetty.server.ServerConnector - Started ServerConnector@6055f6a0{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
# [Thread-0] INFO org.eclipse.jetty.server.Server - Started @1124ms

[5] 動作確認

5-1) ブラウザを立ち上げて、以下のURLにアクセスする
[[http://localhost:4567]]
# 「Hello World!!」が表示される


関連記事

【Spark Framework】初期設定 ~ 環境構築(Gradle Project)からHello Worldまで / 新版 ~

https://blogs.yahoo.co.jp/dk521123/37204914.html

Spark Framework / 環境構築(Mavan Project)からHello Worldまで ~

http://blogs.yahoo.co.jp/dk521123/36680982.html

Spark Framework ~ 処理部分を分離させる ~

http://blogs.yahoo.co.jp/dk521123/36683099.html

Java における Webフレームワーク

http://blogs.yahoo.co.jp/dk521123/35916909.html