はじめに
この連載も、回を追うに従い取り上げるフレームワークも大掛かりなものとなり、「どこが軽量だ?」とお叱りを頂戴することも多くなってしまいました。しかし今回は久々に、自信を持って「軽量です!」とオススメできるものです。
「Stripes Framework」(以下、Stripes)は、Tim Fennellが中心となり開発が行われているフレームワークです。昨今のJavaフレームワークというと、圧縮ファイルを展開すると無数のライブラリファイルが並び「これ、全部入れないといけないのか?」とげんなりしてしまうことが多くなってしまいました。しかしこのStripesは、たった1つのJarだけで構成されている、非常に小型軽量なフレームワークです。あまり知られていないようですが、実は1.0がリリースされたのは5年以上も前という、意外と歴史のあるフレームワークなのです。
対象読者
- Javaで手ごろなフレームワークを探している技術者。
- 最近のフレームワークをごくざっと理解しておきたい方。
- Web開発の手法がどうも気に入らない、と常々考えているJavaプログラマ。
Stripesの入手とインストール
Stripesは、現在Stripesの公式サイトにて配布されています。本稿執筆の時点で、1.5.3が最新版としてアップロードされています。ここでは、このバージョンを使って説明を行います。
Stripesは圧縮ファイルとして配布されています。ダウンロードした「stripes-1.5.3.zip」というファイルを展開すると、その中に「lib」フォルダが作成され、そこにいくつかのjarファイルが作成されていることが分かります。これらが、Stripesのプログラムです。ここにはいくつかのファイルが用意されていますが、実を言えばStripesを動かすのに必要なのは「stripts.jar」ファイルただ1つだけなのです。
では、実際に簡単なWebアプリケーションを作成してみましょう。手作業でファイルやフォルダを作成してもよいですが、ここではEclipse for Java EE Developersを使って作成していくことにします(なお、使用するEclipseはPleiadesで日本語化したものを前提としています)。
まず、新しいプロジェクトを作成しましょう。Eclipseでは、JSP/サーブレットによるWebアプリケーションは「動的Webプロジェクト」として作成します。ここでは「stripes_app」という名前で作成しておくことにしましょう。また動的Webモジュールバージョンは「2.5」にしておきます。構成は、それぞれの環境で用意してあるサーブレットコンテナの構成をそのまま使ってかまいません(本稿では、Tomcat 6.0を使っています)。
動的Webプロジェクトを作成すると、プロジェクトには基本的なファイルやフォルダが用意されます。Webアプリケーションのディレクトリ「WebContent」内には、「WEB-INF」フォルダやweb.xmlファイルがあらかじめ用意されています。このWEB-INF内の「lib」フォルダ(なければ作成してください)内に、先ほどの「stripes.jar」をコピーしてください。そしてweb.xmlを開き、<web-app>内に次のように追記します。
<filter> <display-name>Stripes Filter</display-name> <filter-name>StripesFilter</filter-name> <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class> <init-param> <param-name>ActionResolver.Packages</param-name> <param-value>jp.codezine</param-value> </init-param> <init-param> <param-name>LocalePicker.Locales</param-name> <param-value>en_US:UTF-8,ja:UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>StripesFilter</filter-name> <url-pattern>*.jsp</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> <filter-mapping> <filter-name>StripesFilter</filter-name> <servlet-name>StripesDispatcher</servlet-name> <dispatcher>REQUEST</dispatcher> </filter-mapping> <servlet> <servlet-name>StripesDispatcher</servlet-name> <servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>StripesDispatcher</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
Stripesでは、サーブレットとフィルタを組み合わせて基本的な仕組みを構築しています。net.sourceforge.stripes.controllerパッケージの「StripesFilter」というフィルタにより、ここではJSPファイルへのアクセス(および、次のStripesDispatcherへのアクセス)時にすべてフィルタが適用されるようにしています。これにより、指定のJSPファイルにアクセスすると、Stripesのシステムが先に呼び出されるようになります。
また、net.sourceforge.stripes.controllerパッケージの「DispatcherServlet」サーブレットは、「*.action」というURLへのアクセス時に呼び出されるように設定されています。これは、Stripesでフォームを送信するなどさまざまな「アクション」が発生された際の処理を管理するものです。この2つのクラスが中心となって、Stripesは動いているのです。