読者です 読者をやめる 読者になる 読者になる

プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

JavaAppletとかで、データをブラウザ上に残しておく方法

しぃペインターとかってさ、ブラウザを戻るとかやってももう一回戻ってきたらデータ残ってたりするじゃん?
Javaはappletにしろ、JavaWebStartにしろ、セキュリティーを保持するためにローカルディスクなんかにはアクセスできない様になっている。

要するに、ユーザーに許可を貰わないとデータの保持なんて出来ないって訳。


じゃぁ、どうやったらデータをとどめておく方法があるんだろう?


真っ先に思いつくのはブラウザにキャッシュとして保存すること。
というか、これぐらいしか思いつかない。

で、調べてみたところ、キャッシュで保存できる最大容量は8kbらしい。どうやら、全然的外れだったらしい。


ふ〜む、と、なると……


分からん

と、投げ出してしまえば簡単だけど、そう簡単に諦めるわけにもいかないので、ちょっと調べてみた。


全然資料みつかんねーーヽ(`Д´)ノウワァァァン


ふ〜む、どこもデータの保持は出来ないとかそんな話ばっかり。
となると、どうもAppletそのものが怪しいなぁ

というわけで、AppletについてSunのホームページを読んでみた。
アプレット開発のためのベストプラクティス JavaSE 6u10 用

静的な状態を避ける

クラスローダーキャッシュによって取得されたメモリーがほかの目的に必要ない場合は、アプレット内に格納されている値を呼び出しの間で持続させることもできます。ただし、その動作に依存することはできません。一般に、アプレットは状態を持たないようにしてください。持続的記憶領域が必要な場合は、ブラウザの cookie を使用します。


な〜るへそ。
その他のページも合わせて簡単にまとめるとこんな感じになります。

Appletのクラスを読み込むクラスローダーオブジェクトは同一URLで、同一のarchiveを持つとき、同じクラスローダーで読み込まれる。すなわち、これらの同一のクラスローダーから呼び出されたクラスの静的(static)メンバは共有することになる。

まぁ、ぶっちゃけ、staticな変数に保存しておけばブラウザを終了しない限りはその値は保持されっから、そこから読み出せばいいって言う超簡単な話だったんだね。