スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Auto Scenario Writer Java版 (2)

前の記事の続きです。

Auto Scenario WriterのJava版を作るにあたって、文章生成を再帰でやればデータファイルの構成を完全に把握できていなくてもOKということに気付いたのでコマンドラインアプリケーションは簡単にできました。が、アプレットの方は結構ハマりました。

まず、アプレットにはGUIが必要なので(手でいちいちGUIをコーディングするのは面倒だったので)、最初NetBeansで作ったけど、NetBeansで作ったアプレットをHTMLに置くのがどうもうまくいかない。多分、Appletタグに書くべきライブラリが不足しているのだと思うけどよくわからない。Googleで調べてもよくわからない。というので結局、NetBeansで作成したアプレットは捨てて手書きしました。

アプレット自体は10年余り前に少し作った事があるのですが、当時のJavaはバージョン1.1で確かその後1.2くらいの時にイベント周りのインターフェースが変更されているという記憶があります。まぁ、この辺はGoogleで調べながらそれほど苦労も無く作れたのですが、今度はappletviewerでは動くのにブラウザから見たら動かない。Javaコンソールで見たらデータファイルの一覧を取得するために使っていたFile.listFiles()でセキュリティ例外になってる。
あー、そういえばJavaはどっかのタイミングでセキュリティモデルが変更になったとか聞いたな、と思ってファイルの一覧をファイルから読み込む様にインターフェースを追加したら、今度はファイルを読む時にセキュリティ例外になっている。

調べたら、アプレットの署名とかポリシーの話が見つかるけれど、ポリシーの配布場所はユーザのローカルとか書いてあってどうも的を得ない。参照したいのはユーザローカルのファイルじゃなくてサーバにあるファイルだ。
サーブレットの時は普通にBufferedReaderとかで読めていたのにな、とか思いながら調べていると、アプレットでサーバにあるファイルを参照する時はURLクラスを使って、

  URL url = new URL(getCodeBase(), fname);
  InputStream fin = url.openConnection().getInputStream();

見たいにしないとダメというのを見つけた。
気付いてみれば当たり前で、アプレットはクライアント側で実行されるんだから普通にファイルを読みにいったらサーバにあるファイルじゃなくてクライアントローカルのファイルを読みにいってしまう。そうしたら当然セキュリティ例外になる。

うーん。サーブレット+Java Scriptみたいなプログラムだったらどこのデータを扱ってるのかというのはいつも気にしていてすぐに気付いたんだろうけど・・・。今回はこれだけの話に2~3時間もハマってしまいました。
スポンサーサイト

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。