JavaScript Server Pages 公式サイトを読んでみる

JSSP (JavaScript Server Pages) は、JSP (Java Server Pages) の JavaScript 版。動作にはサーブレットコンテナが必要だけど、Winstone でも動いたので、ちょっとしたことに使うにはいいかもしれない。

JSSP - JavaScript Server Pages
http://jssp.sourceforge.net

JavaScript の実行には Rhino の改造版が使われている。
以下は、公式サイトトップページの内容を勝手に訳してみたもの。上の方はちょっと省いた。あと、画像も省略。

JSSP とは

JSSP (JavaScript Server Pages) は、Java のウェブサーバ上で JavaScript を使ってウェブページを生成するためのランタイムライブラリです。動作には Java Servlet を実行できるウェブサーバ (Tomcat とか JBoss とかとか) が必要です。
JSSP は、Java を知らなくても使えます。Java を使ったことがあまりないという場合は、JSSP のチュートリアルを見てもらえれば設定の仕方や使い方がわかるでしょう。
JSSP は PHPASPJSP に似ていて、簡単かつ効率的な方法でウェブアプリケーションを作成することに主眼を置いています。コードの記述量や複雑さを軽減することが主な目的であり、必要不可欠なもの、つまりデータベースへのアクセスと HTML 生成にフォーカスすることでそれを実現しています。
JSSP は JSP (Java Server Pages) に特によく似ています。JSP と同じ「リクエストとレスポンス」というモデルを使用しており、オブジェクトやメソッドにも同じものが用意されています。Java のクラスにアクセスすることができ、これには自分で作ったクラスも含まれます。なので、Java で書いた既存のコードを捨てる必要はありませんし、数多く公開されている各種の Java ライブラリを JSSP のウェブアプリケーションで活用することができます。
ただし、JSSP は Java よりもプログラミングがいくらかやりやすくなっています。要りもしない言語機能と格闘することなく、「ビジネスロジック」に集中してもらえるようにしてあります。
JSSP の目標は、ウェブ開発をできるだけシンプルにすることです。

注意してほしいのは、JSSP で実装されている JavaScript 環境は、あなたがご存知かもしれないウェブブラウザの JavaScript 環境と、まったく同じというわけではないということです。ウェブブラウザでは windowdocument といったオブジェクトを使ってブラウザの表示している内容にアクセスすることができます。JSSP のスクリプトはブラウザで実行されるわけではないので、そういったオブジェクトがないのです。
JSSP の現在のバージョンは 0.2beta です。JSSP はオープンソースライセンスで配布されています。JSSP 自体も、他のオープンソースプロジェクトをベースにしています。JSSP は、商用目的の場合も含めて、無償で利用できます。
コメントやバグ報告は大歓迎です! leo_meyer@users.sourceforge.net までお送りください。

JSSP での Hello World

hello.jssp

<html>
<body>
<%
	out.print("Hello JSSP!");
%>
</body>
</html>

[訳注: 元サイトでは、ここに実行結果の画像がある]

クイックスタート

Java のウェブサーバがすでにあるのなら、ダウンロードセクションにある jssp_example.war を配備して動かしてみることができます。例の .jssp ファイルをいじってみれば、JSSP の使い方がわかると思います。
Java をあまり使ったことがないとか、Java のウェブサーバがないという場合は、JSSP のチュートリアルを見てもらえれば、
JSSP の設定の仕方や使い方がわかるでしょう。
JSSP の設定が終わって、さらに詳しく知りたい場合は、JSSP の説明およびリファレンスを読んでみてください。

JavaScript の一般的な利点

  • JavaScript は、使いやすく便利な機能を多く備えた実用的な言語です。
  • 静的な型付けは不要です。
  • 簡単に使えます (ノウハウはウェブ上で大量に見つかります)。
  • JavaScript は完全にインタプリタ言語です。実行前にコンパイルする必要はありません。
  • 動的なプロパティが使えます。オブジェクトに対して実行時に属性や関数を追加することができます。
  • 非常に柔軟なプロトタイプ機構を備えており、既存のオブジェクトの機能を拡張することができます。
  • XML データを処理するためのシンプルな方法が用意されています。

JSSP の利点

  • コンパイル時に構文チェックを行う埋め込み SQL など、データベースアクセスのサポートを強化しています。JDBC (Java Database Connectivity) に比べてデータベースプログラミングを簡単に行えます。データベースへのアクセスは JDBC を使って作られているので、JDBC ドライバが入手できるデータベース (つまり、最近のデータベース) ならどれでも使えます。
  • AJAX アプリケーションに最適。共通コードセクション (common code sections) を定義すればクライアントとサーバで同じコードを使いまわすことができます。
  • 簡単に使える国際化機能。各種のロケール文字集合を完全にサポートしています。
  • Dervish テクノロジーにより、サーバとの連携が簡単に行えます。使いやすいインタフェースが用意されており、AJAX リクエストを意識する必要はありません。
  • 開発が気軽に行えます。JSSP のコードやリソースファイルを変更しても、サーバを再起動する必要はありません。JSSP では、変更したファイルが必要に応じて自動的に再読み込みされます。ユニットテストにも最初から対応しており、必要に応じてテストが自動的に実行されます。
  • ライブラリに対応しており、内容に応じてコードを構造化しやすいようになっています。
埋め込み SQL の例 (部分)

SQL のコマンドを JavaScript のコードに直接埋め込むことができます。このために JSSP では JSSQL という言語拡張を定義しています。
詳しくは JSSQL の説明を読んでみてください。

<table>
<%
// JSSQL の利用例

// クエリのステートメントを作成する。
// connection (接続) は初期化済みとする。
var stmt = connection.SELECT ID, NAME FROM TEST;

// クエリを実行する。
var rset = stmt.run(); 

// 各レコードの内容を出力する。
while (rset.next()) {
	// 型を気にせずに、名前を指定して列の値を取り出すことができます。
%>
	<tr>
		<td>
		<%= rset.ID %>
		</td>
		<td>
		<%= rset.NAME %>
		</td>
	</tr>
}

// 接続を閉じると、関連付けられているリソースもすべて閉じられます。
connection.close();

%>
</table>

制限事項

JSSP では、JavaScriptJava の最も便利な部分を結び付けようとしています。単純化されたプログラミングモデルがあり、その一方で、堅牢で実績のある Java ライブラリ群の膨大なコードベースにもアクセスできるように、JSSP は作られています。しかし JSSP は、MVC (Model-View-Controller) のようなある種のアーキテクチャをサポートするものという意味での「フレームワーク」ではありません。JSSP では HTML のレイアウトとコードの機能が一緒になっています。したがって、他の環境が提供するような疎結合、安全性、性能といったものが望まれるであろう大規模なアプリケーションには、適していません。
もっとも、そういった環境で JSSP をひとつのアドオンとして使うことはできますが。
現時点では、ファイルやネットワークへのアクセスといった用途の専用ライブラリは、JSSP では用意していません (将来的には提供するかもしれませんが)。
こういった用途には、Java のライブラリを使わなければならないでしょう。なので、この種の機能が必要な場合には、Java の知識がそれなりに必要になります。
シンプルなウェブアプリケーション (それこそ JSSP が対象としているような) では、それほど必要にならないと思いますけどね。

JSSP のコアコンポーネント

JSSP のコアは、JSSP ウェブコンポーネントおよび JSSQL コンポーネントという、2 つの個別のコンポーネントで構成されています。
JSSP ウェブコンポーネントは、Java のウェブサーバ上で JavaScript Server Page を実行するために必要な機能を実装したものです。このコンポーネントは、サーブレット (これが呼び出されるように web.xml ファイルで
設定する必要があります) といくつかのサポートクラスから成り、jar ファイルに格納されています。ウェブサーバで実行されるスクリプトファイルには、拡張子 .jssp を付けます。
JSSP ウェブコンポーネントには、Dervish テクノロジーも含まれており、これにより、サーバサイドのコードを、あたかもそれがブラウザの JavaScript 関数として実装されていたかのように呼び出すことができます。
JSSP の説明とリファレンス  Dervish の説明とリファレンス
JSSQL コンポーネント には、埋め込み SQL のサポートが実装されています。このコンポーネントは、
JavaScript のパーサと実行エンジンである Rhino の修正版、JSqlParser ライブラリ、そして JDBC プログラミングを簡易化するためのサポートクラス群が含まれています。
JSSQL の実行はウェブサーバに限らず行えます。JSSQL は JavaScript の拡張であり、スタンドアロンスクリプト (コマンドラインから実行された場合など) でも使用することができます。スタンドアロンの JSSQL スクリプトには、ファイル拡張子 .jsq を付けます。

JSSQL の説明とリファレンス

その他の情報

JSSP 内部

JSSP TODO および機能要望一覧
JSSP のリリース計画
JSSP ドキュメンテーションガイドライン



ドキュメントのバージョン: 0.4, 2008-03-03. 筆者: Leo Meyer,
leo_meyer@users.sourceforge.net
このファイルは、http://jssp.sourceforge.net で公開している JSSP プロジェクトドキュメンテーションの一部です。
JSSP プロジェクトは、Sourceforge でホストされています。