ブログトップ 記事一覧 ログイン 無料ブログ開設

やさしいデスマーチ このページをアンテナに追加 RSSフィード

札幌のWebエンジニアの綴る日常と開発の日々。
GoogleAppEngine/slim3/Django/NetBeans/Swing/JavaFXを中心にお届け。

2009-05-26

静的ファイルはTomcatに処理させない

| 09:15 |  静的ファイルはTomcatに処理させないを含むブックマーク

TeedaなどJavaEEウェブアプリを構築する場合、バックエンドのTomcatGlassfishApacheから転送すると思います。しかし、CSSなど静的なファイルまでTomcatに処理させるのはムダなので、これらはApacheで処理を終わらせるような設定を行いましょう。

ProxyPass とか使えば簡単じゃんと思いますが、開発時もスムーズに動くようにするには結構工夫が必要です。開発時に運用時の環境を踏まえておき、デザイナ、プログラマデプロイヤー(?)のタスクがスムーズに回るようにしましょう。

構成

サーバアドレスのルート直下にアプリケーションが展開され、それらはTeedaで構築しているとします*1

さらに静的ファイルに関してはまとめて扱う方が便利なので、1つのディレクトリに納めてしまいます。なのでこんな感じです。

webapp

+ /media

| + css

| + js

| + img

+ index.html

+ list.html

+ detail.html

こう構成しておくと、htmlDreamweaver等で編集するのが楽です。ただし、開発環境ではうまく動かないのでちょっと細工します(後述)。

運用時

先に運用時の設定ですが、Apacheの設定ファイルに次のように記述します。

ProxyPass /media/ !

ProxyPass / ajp://localhost:8009/

ProxyPassでajp://localhost:8009/に転送をかけていますが、あらかじめ特定のパスに関しては通さないように記述するだけです。尚、上から適用されるので順番に注意してください。これで通常のドキュメントルート(/var/www/html/media/)の下に静的ファイルを置けばよいことになります。

デプロイ

デプロイに使用しているシェルスクリプトは自分の場合、次のようなステップです。

1. SVNからチェックアウト

2. Maven2を使ってビルドし、Warを作成する

3. Tomcatを停止する

4. 古いWarを削除し、2で作ったWarを配備する

5. /var/www/html/media/を削除し、SVNから〜/webapp/media/ をエクスポートする

6. Tomcatを起動する

本来はTomcat再起動する必要はないのですが、貧弱なサーバですと再起動時のコストが厳しく、Tomcatが断末魔の叫びをあげることがあり、再起動かけています。

開発時

開発時、Eclipse上からTomcatを起動するかと思いますが、デフォルトのままであるとアプリケーション名がパスに含まれ、静的ファイルへアクセスできません。同時に開発するアプリが1つしかない場合は、アプリケーションのルートパスを/にすることで解決しますが、管理画面とわけて開発している場合などはそうもいきません。かといって、わけて管理するのはもっと嫌です。

そんな場合は、Tomcatに次のようなしてWebアプリの設定をします。Windowsであれば、TOMCAT_HOME\conf\Catalina\localhost\media.xml とします。

<Context path="/media" 
              docBase="D:\projects\zzzz\product\site\src\main\webapp\media" >
</Context>

これでTomcatには/mediaというウェブアプリが作成される事になり、上手い具合にパスが通るようになります。

デザイナ視点で

デザイナ*2としてはwebapp以下をサイト管理に定義すれば、通常通りのデザイン作業が可能です。Teedaではタグがデザインを破壊することはありませんのでさらに開発しやすいですね!ただし、ソースコードの管理はプログラマ側にあわせてしっかりやることを忘れないようにしてください!

尚、プログラマ側の環境(Eclipse)に合わせるように/media以下は相対パスではなく絶対パスで記述します。

プログラマ視点で

プログラマ*3としては、そんな事しなくても簡単に設定できると思わないでください。JavaEclipseで開発を行うように、HTMLDreamweaverという開発環境で作成しています。そちらに合わせることで、コーディングを一任できるわけです。SVNからアップデートすればいいだけになりますよ!


Teeda関連のTipsは色々あるのになかなか書き留める時間がとれない・・・orz

*1:尚、Teedaではデフォルトでは/view/がつく。また、サフィックスがhtmlにしておく。これも後で書こう。

*2Dreamweaverを使う人

*3Eclipseを使う人

kopleckoplec 2011/06/15 17:46 静的ファイルをTomcatで扱う必要が出てきて、参考にさせていただきました。
ひとつ質問なのですが、media/cssや、media/jsなどの、mediaよりも下の階層にあるファイルについても、参照できるのでしょうか?
私の環境では、http://localhost:8080/media/hoge.jpgのように、フォルダの直下にある画像ファイルは参照できるのですが、
http://localhost:8080/media/foo/hoge.jpgのように、さらに下の階層のファイルについては、404が返ってきてしまいました
もし何かご存知であれば、教えていただければ幸いです。

何はともあれ、分かりやすい記事ありがとうございました。

トラックバック - http://d.hatena.ne.jp/shuji_w6e/20090526/1243383335