TomcatでHTTPセッション単位のデータを扱う方法

circuits

PHPなどのシングルスレッドのWebアプリケーションを長く開発していると、何も考えずにクラス変数を使ってしまう...。

Tomcatは、シングルスレッドの設定を行わない限り、マルチスレッドで動作する(あらかじめいくつか複数のスレッドを起動しておき、リクエスト毎にどれかを使うような感じ)のでクラス変数を使うと全てのスレッドからアクセスが共有されてしまいます。

これは、たとえば現在のHTTPセッション(セッション間データを扱う「セッション変数」ではなく、1セッション内という意味)のみで統一的に扱いたいデータをクラス変数に入れておくと、HTTPセッションが終了してもそのデータが保持されたままになってしまうということです。

クラス変数はプロセス内で共有される変数なので、Tomcat起動中は同じプロセスですから当然といえば当然なのですが...、例えばデータベースコネクションなんかは上記のような形で扱いたいところです。
(さらに…)

続きを読む

Servletで日本語名のファイルをダウンロード

tomcat plugin

なんかものすごく忙しくて更新する暇が全く無い状態です・・・。

さて、今日は実際直面した問題をメモ代わりに書いておきます。あんまり日本語ファイル名を扱わないので忘れがちなので。

ダウンロード時にファイル名を指定する場合は、Content-Dispositionヘッダを使いますが、日本語の場合そのまま指定すると文字化けを起こしてしまいます。

しかもブラウザによって挙動が異なるという・・・。どうしたらいいのでしょう。
(さらに…)

続きを読む

Android入門【その2】

ANDROID

左はEclipseから実行した際に起動される、Androidの仮想デバイス。なかなかカッコイイです。

A N D R O I D _ と表示された後、初期化処理中にナイトライダーみたいな赤い横線が左右に動きます。

さて、前回は開発環境のインストールまででしたので、今回は恒例のHello Worldを作ってみたいと思います。

(さらに…)

続きを読む

Android入門【その1】

Open Handset Alliance

Androidとは、Googleが提供するオープンソースの携帯端末向けプラットフォームのことで、今までの携帯電話上のプラットフォームは各社まちまちだったのですが、今回のGoogleのオープンプラットフォームによってどのキャリアでもシームレスな開発ができたりオープンソースによって開発工数が削減できたりといった風に変わっていくと考えられます。

既にこのプラットフォームについてDoCoMoやKDDIも提携済みのようで、完全に切り替わるかどうかはまだまだ不明ですが、何らかの形でこのプラットフォームが広がっていくのではないかと思います。

てなわけで、早速このAndroidの開発を先取りしていこうと思います。
(さらに…)

続きを読む

Webのサムネイル生成をJavaでやってみる【おまけ】

ちょっと、昨日までの説明では実は不足している部分がありました。

いろいろとURLを変えてキャプチャを試してみると分かりますが、あれだけではFlashがあるページのサムネイルがキャプチャできないのです。

これは、Java側のコードの問題ではなく、XULRunnerでFlashが使える状態になっていないのが原因です。
(さらに…)

続きを読む

Webのサムネイル生成をJavaでやってみる【後編】

さて、前回である程度環境の構築ができたと思いますが、今回は引き続き環境整備(まだあるの・・・)と実際のプログラムの作成を行っていきます。

SWTのインストール

SWTというのは、Standard Widget Toolkitの略でEclipseなんかで使われているJavaのGUIライブラリです。AWTやSwingなどと違って、よりネイティブに近い外観・操作性を持っていると言われています。

実は、最初はXULRunnerとAWTとかでガリガリ書いてやるぞ~と思っていたのですが、よくよくSWTのJavaDocを読むと、Browserクラスというそのものズバリなクラスがあったので、そちらを使わせてもらうことにしました。

SWTのインストールはEclipse環境であれば特になにもする必要はないですが、今回サーバに設置することもあり、まず別途Eclipse Projectのサイトからダウンロードしてきます。リンクがunstableのバージョンになっているのは理由があって、The SWT FAQ によるとGeckoのバージョンとSWTのバージョンの組み合わせによっては正常に動作せず、前編でインストールしたXULRunner 1.8.1を利用するので、今回は3.3をダウンロードします。先ほどのリンク先の一番下の方の「SWT バイナリーおよびソース」というところにある、Linux (x86/GTK 2) 版を選びました。

解凍後、swt.jar を好きな場所へおきCLASSPATHに追加します。

  • mv swt.jar /usr/java/jdk1.5.0_12/lib/
  • export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/swt.jar

(さらに…)

続きを読む