WappenLite の配備の方法は、後で説明しますが、 アプレットにすると配備やキャッシュの消去など面倒なことが増えるので、 コンテキストやサーブレットに変更を加えたときは、 まず以下の方法でテスト実行してください。
まず、作成したクラスファイルを WEB-INF/classes/ に設置するか、 JARファイルにして、WEB-INF/lib/ に置きます。 Eclipse からテストする場合は、Eclipse の設定でこれらのファイルを ビルドパスにいれても構いません。
WappenLite のバックエンドはサーブレットを中心とする Java の Web アプリケーションですが、WebSocket 関係などで Jetty の特定のバージョンに依存している部分があるので、 Eclise の通常の Web アプリケーションの起動法では起動できないことが多いです。
そのため、 applits.Main クラスの static void main(String[] args) メソッドから起動してください。
コマンドライン引数は第 1 引数だけは必須です。 Webアプリケーションルートディレクトリ (WappenLite プロジェクトの WebContent フォルダ)または、Web アプリケーションの war ファイルを指定してください。
第 2 引数は、設定(config)ファイルを指定します。 指定しないとき(後から HTTP 経由で指定するとき)は - とします。
第 3 引数は、起動するフロントエンドの URL を指定します。 URL の中に %sという文字列を入れておくと、 バックエンドの URL のベース URL に置き換えられて起動されます。 指定しないとき(手動でフロントエンドを起動するとき)は、 - とします。
第 4 引数は、サーバーの使用するポート番号です。 指定しないときは、空いているポートが使用されます。
第 4 引数を明示的に指定したとき、843 番ポートの Flash Player 向けの socket policy serverは起動されません。socket policy server を強制的に起動する場合は、第 5 引数を true とします。
WappenLite の設定ファイルやアプレットのパラメーターの記述方法、 およびファイルの配備方法を説明します。
以下のソースファイルの書き換えは必須です。
WappenLite バックエンドをアプレットから起動するためには JAR ファイルに署名が必要です。 これは、学習者の作成した任意のプログラムを起動したり、 サーブレットが、ServerSocket を利用したり、 ローカルファイルシステムを利用したりする必要があるからです。
署名した JAR ファイルを他者に悪用されないために、 WappenLite では、リクエストヘッダの referer をチェックしてバックエンドと通信する HTML ファイルやソースファイルのダウンロード元を限定するようにしています。
WappenLiteLauncher プロジェクトの check.CheckURI というクラスの boolean checkURI(URI uri) メソッドを書き換えて、安全な URI に対してだけ true を返すようにして下さい。 デフォルトでは以下のようになっています。
final public static boolean checkURI(URI uri) { String uriStr = uri.normalize().toString(); // remove .., etc. for (String u: myHosts) { if (uriStr.startsWith(u) && uriStr.indexOf(myName) > 0) { return true; } } return false; }
この場合、フィールド myHosts に信頼するホスト (例: http://www.example.com)を、 myName にパスの一部 (例: WappenLite)を記載します。
利用する java クラスはすべて JAR 化して、 jarsigner コマンドで署名する必要があります。 以下のような JAR ファイルに署名が必要になります。
WappenLite プロジェクトを構成するファイルを WAR ファイルとしてアーカイブします。
バックエンドに 独自のサーブレットを追加した場合は、WappenLite プロジェクトの WEB-INF/web.xml ファイルを書き換えて下さい。
WAR ファイル自体は署名する必要はありません。 ただし class ファイル/JAR ファイルは、署名の必要があるため この WAR ファイルに含めません。 そのため、WAR ファイルの中身が実質 WEB-INF/web.xml ファイルのみということもありえます。
WappenLite のバックエンドに対する設定パラメーターは JSON 形式のファイルまたは JavaScript 中の式として指定します。 以下の表の属性を指定できます。
属性 | 説明 |
---|---|
class | (必須) Context クラス名を指定します。 |
baseDir | 以下のファイルの基準ディレクトリ、省略された場合は 設定ファイルのおいてあるディレクトリになります。 |
sources | エディタに表示するソースファイルのパス。 複数のパスを空白区切りで指定することもできます。 |
jars | プログラムの実行に必要な JAR ファイルのパス。 複数のパスを空白区切りで指定することもできます。 |
hiddens | プログラムの実行に必要なその他のファイルのパス。 複数のパスを空白区切りで指定することもできます。 |
output | プログラムの出力をファイルにリダイレクトする場合は、 ファイルのパスを指定します。 |
watchDir | プログラムの出力が生成されるディレクトリを指定します。 このディレクトリにファイルが生成された場合はクライアントに通知されます。 |
この他に、コンテキスト依存の設定パラメーターが存在することもあります。
以下に設定パラメーターの例を示します。
{ "sources" : "HSBGrad.java" , "class" : "samples.java.JavaContext" , "jars" : "lib/BookCover.jar" , "output" : "HSBGrad.svg" }
HSBGrad.htmlを参考に、 フロントエンドを作成します。(ToDo: もっと詳しく。 )
JAR ファイルは applet タグの arhive 属性で指定します。
WappenLite の起動用アプレットに対するパラメーターは PARAM タグで与えます。
name | 説明 |
---|---|
wappen.war | 上記で用意した WAR ファイルのパスを指定します。 |
wappen.config | 上記で用意した JSON 形式のバックエンド設定パラメーターのファイルのパスを指定します。 なお、バックエンド設定パラメーターはバックエンド起動後に、 Session/Configure サーブレット、あるいは Login サーブレットで設定することもできます。 |
wappen.json |
JSON 形式のバックエンド設定パラメーターを直接指定します。
その際、二重引用符「"」 などは
"のようにエスケープする必要があります。 例: <param name"wappen.json" value="{ "class" : "samples.java.JavaContext" }" /> なお、バックエンド設定パラメーターはバックエンド起動後に、 Session/Configure サーブレット、あるいは Login サーブレットで設定することもできます。 |
wappen.start | フロントエンドの URL を指定して開きます。
このパラメーターの中の%sが、バックエンドのベース URL に置き換えられて
フロントエンドに渡されます。 バックエンドを先に起動して、あとからフロントエンドを開く場合は、 このパラメーターを指定します。 |
wappen.target | フロントエンドを開くウインドウを指定します。
java.applet.AppletContext#showDocument(java.net.URL,java.lang.String)
の第2引数になります。指定しなければ "_blank" になります。 |
wappen.eval |
wappen.start と wappen.target の代わりに、
このパラメーターを指定することもできます。
サーブレット起動後にアプレットから LiveConnect で呼び出す
JavaScript の式を指定します。
このパラメーターの中の%sが、バックエンドのベース URL に置き換えられます。 フロントエンドの Web ページを先に開いて、必要に応じてバックエンドを起動する場合は、 このパラメーターを使って、 バックエンドからフロントエンドページのスクリプトをコールバックします。 フロントエンドのサンプル実装も参照して下さい。 |
以下に HTML ファイルの一部 (outerapplet.html) を示します。
<applet archive="WappenLiteJava.jar,ecj-3.5.1.jar,CommonJars/WappenLite.jar,CommonJars/jsonic-1.0.jar,CommonJars/jetty-continuation-8.0.4.v20111024.jar,CommonJars/jetty-deploy-8.0.4.v20111024.jar,CommonJars/jetty-http-8.0.4.v20111024.jar,CommonJars/jetty-io-8.0.4.v20111024.jar,CommonJars/jetty-security-8.0.4.v20111024.jar,CommonJars/jetty-server-8.0.4.v20111024.jar,CommonJars/jetty-servlet-8.0.4.v20111024.jar,CommonJars/jetty-util-8.0.4.v20111024.jar,CommonJars/jetty-webapp-8.0.4.v20111024.jar,CommonJars/jetty-websocket-8.0.4.v20111024.jar,CommonJars/jetty-xml-8.0.4.v20111024.jar,CommonJars/servlet-api-3.0.jar"
code="applets/Main.class"
width="32" height="32">
<param name="wappen.war" value="WappenLiteJava.war" />
<param name="wappen.eval" value="setParentText('%s')" />
<!--
<param name="wappen.start" value="HSBGrad.html?%s" />
<param name="wappen.target" value="_blank" />
-->
</applet>
最後に、もちろん以下のファイルをそこで指定したパスの通りに配備する必要があります。
設定パラメーターで指定したソースファイル等、 アプレットで指定した JAR ファイル、WAR ファイル