ホーム > プログラミング > ScalaでServletを使ってみる

ScalaでServletを使ってみる

Scalaを仕事をサボって勉強しています。ScalaはJava VM上で動くオブジェクト指向+関数型言語で、Javaクラスを使ったり、ScalaクラスをJavaで使ったりできるんですね。とても楽しいです。

インタープリタで対話的に実行できるし、スクリプト言語のように実行できるし、コンパイルして実行することもできます。実行環境は、MacPortsで入れることができるので、インストールもお手軽にできます。

んで、Scalaをコンパイルすると、.classファイルができる。つまり、Javaをコンパイルした時と同じモノが出来るわけです。このおかげで、JavaとScalaはシームレスな連携をするので、ScalaでWebアプリを実装できるんじゃねーかと思い、やってみた。

環境は以下の通り。

  • Mac OS 10.5.6
  • Eclipse 3.4.2 + Scala Eclipse Plugin 2.7.3 final
  • JVM 1.6.0
  • Tomcat 6.0.18

EclipseはJava EEの開発なので、WTPが入ってるヤツです。Tomcatでなく、GlassFishあたりでも動きますが、スタンダードなのを使っています。Windowsのことは知りませんが、同じようにすれば動くんじゃないですかね?

Tomcatを入れる

Tomcatをダウンロードします。

http://tomcat.apache.com/index.html

解凍して適当なディレクトリに置きます。以下のような感じです。

~/tomcat/apach-tomcat-6.0.18

http://localhost:8080/で動作確認だけできればいいので、落としてコピーして終わりです。コマンド叩いてメンドーなことはしません。

Eclipseにプラグインを入れる

Scala Eclipse Pluginは、以下のアップデートサイトから手に入れることが出来ます。

http://www.scala-lang.org/scala-eclipse-plugin

Scala実行環境もこれで入りますが、PATHは通らないので、対話的に実行したりする場合は別途MacPortsとかしたほうがいいかもしれません。

Scalaのプラグインを入れたので、Scalaプロジェクトが作れるようになっているはずです。

作成

プロジェクトの構成ですが、Scalaプロジェクト+動的ウェブプロジェクトという構成にします。動的ウェブプロジェクトのソースフォルダにScalaのソースが作成できないため、Scalaプロジェクトを別にしています。パスを通せば問題ないので、この構成作っていきます。

新規作成からScala Projectを作ると、見慣れた感じのプロジェクトができるので、ソースフォルダにパッケージを作ります。なんでもいいんですが、「jp.my.webapp.servlet」という名前で話を進めます。

このパッケージにScalaソースファイルを作成します。javax.servlet.httpのクラスを使用するため、ビルドパスにサーバ・ランタイムを設定する必要があります。

package jp.my.webapp.servlet

import javax.servlet.http.{
  HttpServlet,
  HttpServletRequest => HSReq,
  HttpServletResponse => HSResp
}

class TestServlet extends HttpServlet {

  override def doGet(req :HSReq, resp :HSResp) {
    val message =
      <HTML><HEAD><TITLE>Hello, Scala</TITLE></HEAD>
      <BODY><P>Hello, Scala with Servlet</P></BODY></HTML>
    resp.getWriter().print(message)
  }
}

import文は{}で括ることによって、パッケージから複数のクラスをimportできます。「クラス名=>省略名」という書き方も出来ます。ScalaではXMLリテラルを書くことができ、整形文で文法にエラーがなければHTMLもリテラルにできます。XMLリテラルは、scala.xml.Elem型で、printメソッド内でtoStringにより文字列化されます。

これでScalaによるServletは終了です。次は、webプロジェクトです。

こちらはさらに簡単です。パスを通して、web.xmlを書いて終わりです。プロジェクトはwebappという名前で作りました。

パスは、Scalaプロジェクトとscala-library.jarに通します。Java EE Module Dependencies(日本語化してると「Java EE モジュール依存関係」だかです)にプロジェクトとjarを追加します。scala-library.jarはScalaプロジェクトを見ればパスが書いてありますが、あまりに深いところにあったので、MacPortsで入れた実行環境の方に通してしまいました。

web.xmlにservletとservlet-mappingを記述します。

<servlet>
  <servlet-name>HelloScala</servlet-name>
  <servlet-class>jp.my.webapp.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>HelloScala</servlet-name>
  <url-pattern>/sayHello/</url-pattern>
</servlet-mapping>

あとは新規作成でサーバを作り、解凍したTomcatのディレクトリを指定すると、サーバビューにTomcatが登録されるので、webappプロジェクトをドラッグ&ドロップで追加します。そして、サーバを起動し、ブラウザでhttp://localhost:8080/webapp/sayHello/へアクセスしてみます。

アクセスした様子

アクセスした様子

ウェブフレームワークは使わずにやってみましたが、StrutsやSpring、DWRといったものを使ってもよさそうです。Scalaのウェブフレームワークもあるようですね。最初はDWRでAjaxを目論んでいたんですが、クラスパス周りでハマり、エラーの切り分けがよくわからないので、フレームワークなしとなりました。

ソースに関しては、IBMのdeveloperWorksとほぼ同じです。実装については、このエントリーよりも優しく書いてあるので、そちらを参考にした方がいいと思います。

参考:多忙な Java 開発者のための Scala ガイド: Scala とサーブレット

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • Twitter
カテゴリー: プログラミング タグ: , ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。