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アプリの開発が行えます。
フレームワークなどを使うプロジェクトも基本はこれで動くのではないでしょうか。
今回試した內容のソースはこちらです。