Scala入門記010 sbtでServlet開発

だいぶ時間が開いてしまいましたが元気です。
北海道なのに蒸し暑い日が続いています。

Macのフォルダを整理していたら以前作ったsbtでのServlet環境のサンプルが出てきたのでもろもろを最新バージョンに設定しなおして動かしてみましたので記録しておきます。
Scala入門記の目次はこちらです。

利用したライブラリ

sbtのプラグイン「xsbt-web-plugin」を使いました。github.com


以前の1.xではjettyなどをcontainerとして依存ライブラリに指定しなければならなかったのですが2.0からはプラグインがやってくれるようになったみたいです。
実行環境としてはjettyとtomcatが選べるようになってました。


build.sbtの設定

name := "scala-sbt-servlet"

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
  "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided",
  "org.scalatest" %% "scalatest" % "2.2.5" % "test"
)

enablePlugins(JettyPlugin)

containerPort := 9090

デフォルトでは8080で起動しますがJenkinsさんが使ってたので9090にしてみました。


project/plugins.sbtの設定

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "2.0.3")

これが肝です。
7月4日から2.0系がリリースされているみたいです。


Servletのサンプル

package com.example

import java.util.Date
import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse}

class SampleServlet extends HttpServlet {

  override def doGet(request: HttpServletRequest, response: HttpServletResponse) = {

    val s = response.getOutputStream
    s.print("Hello! " + new Date().toString)
    s.flush()
  }
}

Hello!と時刻を表示するだけのシンプルなServletです。


web.xmlのサンプル

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="serv" version="3.0">

    <servlet>
        <servlet-name>SampleServlet</servlet-name>
        <servlet-class>com.example.SampleServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SampleServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

これもシンプルですべてのリクエストをSampleServletにマッピングしています。


実行

sbt ~jetty:start

超簡単です。「~」を付けないと起動してすぐ終了してしまいます。


メモ

tomcatを使うときはbuild.sbtの

enablePlugins(JettyPlugin)

enablePlugins(TomcatPlugin)

に変更して、

sbt ~tomcat:start

で起動します。


依存ライブラリにコンテナを指定しなくても良くなったのは楽になったと思います。
特定のバージョンを指定したい場合も指定できるので安心ですね。
プラグインの使い方の詳細は2.0のドキュメントにまとまってます。


まとめ

earldouglas/xsbt-web-plugin · GitHubを使えば特に難しいこともなくScalaでWebアプリの開発が行えます。
フレームワークなどを使うプロジェクトも基本はこれで動くのではないでしょうか。


今回試した內容のソースはこちらです。

github.com