静的ファイルのURL

397 views
Skip to first unread message

melodeen

unread,
Oct 14, 2009, 6:12:43 AM10/14/09
to Google-App-Engine-Japan
こんにちはmelodeenです。

GAE/Jでappengine-web.xmlに<static-files>タグを指定して静的ファイルを定義しました。
すると静的ファイルに指定したファイルにアクセスできなくなりました。
静的ファイルにするとURLが変更になるのでしょうか?
変更されたURLはどうやって調べるのでしょうか?


----------------------------------------
<static-files>
<include path="/css/**/*" />
<include path="/img/**/*" />
<include path="/js/**/*" />
<include path="/swf/**/*" />
<include path="/gadget.xml" />
</static-files>
----------------------------------------

ご教授お願いたします。

WdWeaver

unread,
Oct 14, 2009, 11:50:07 PM10/14/09
to Google-App-Engine-Japan
こんにちは。

> <static-files>
> <include path="/css/**/*" />
> <include path="/img/**/*" />
> <include path="/js/**/*" />
> <include path="/swf/**/*" />
> <include path="/gadget.xml" />
> </static-files>

/css/**/*
ではなく、
/css/**
としたらどうでしょう?(Googleのドキュメントを真似して)

**.pngという表現があっても、**/*.pngという表現は見当たらなかったので、
ドキュメントはなにか誤解される書き方なのだと思います。

※成功していれば、レスポンスコード200で却って来ても、
 アクセスがログに残らなくなるはずです。

このままでもgadget.xmlについては正しく取得できるのではないかと
思っているのですが、内部動作については詳しくわかりません。

melodeen

unread,
Oct 15, 2009, 1:15:04 AM10/15/09
to Google-App-Engine-Japan
ご返答ありがとうございます。

/css/**と指定しましたが、やはりだめでした。

下記のような検証を行いました。
まずルートディレクトリにindex.htmlを作成しました。
最初に<static-files> を指定せずにindex.htmlを開いた所、問題なくCSSを読み込み画面が表示されました。
次に、appengine-web.xmlに<static-files> タグを指定して(※3)index.htmlを表示した所、404エラーが
発生しました。
<static-files> タグを追加するだけで404になってアクセスできなくなるようです。
JSPとサーブレットはアクセス出来ました。

static-filesタグに<exclude path="/index.html" />を追加して試してみましたが、これもダメでした。

すいませんが原因わかりますでしょうか?

よろしくお願いたします。


---- ディレクトリ構成 -----
war ┏ /css ━ text.css
   ┗ index.html
--------------------------------

--- index.html -----
<html>
<head>
<link type="text/css" rel="stylesheet" href="/css/test.css" />
</head>
<body>
HelloWorld!!
</body>
</html>
---------------------

----- appengine-web.xml ------------
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>xxxxxxx</application>
<version>1</version>
<static-files>
<include path="/css/**" />
</static-files>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/
logging.properties"/>
</system-properties>
</appengine-web-app>
--------------------------------------------

melodeen

unread,
Oct 15, 2009, 1:33:46 AM10/15/09
to Google-App-Engine-Japan
拡張子がHTMLとかXMLのファイルをexclude指定しても404になってしまうので、静的ファイルとして扱われているような気がします。
excludeってちゃんと動いているのかなぁ・・・
> > 思っているのですが、内部動作については詳しくわかりません。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

WdWeaver

unread,
Oct 15, 2009, 3:31:10 AM10/15/09
to Google-App-Engine-Japan
少し調査してみました。

1.デフォルトの動作として(static-filesを指定しない場合)、
  WEB-INF以下以外でwar以下(jspを除く)のファイルはすべて静的ファイルとして扱うようになっています。

2.static-filesを指定する場合
・includeがひとつもなければデフォルト動作になります。
  ★includeがひとつでもあるとデフォルト動作をオーバーライドするため、
   includeを書く場合は静的ファイルとして扱いたいパターンは全てを記述しないといけません。
・excludeはincludeで書かれたパターンに対して適用されます。includeがひとつも
   無い場合はデフォルト動作(すべてのファイル)に対してパターンが適用されます。
3.resource-filesの場合は2.の逆パターン

※ただし、http://appid.appspot.com/ のように、welcome-file-listでアクセスさせるような
 パターンだと挙動がまちまちのような気が。

なので、"/css/**"を指定しただけだと、*.htmlはリソースファイルとして認識されていると思われます。
で、ハンドルできるサーブレットなりフィルタなりが無くて404なんじゃないかなと。
excludeはリソースファイルとして認識させる手段なので、意味はないかと。
とりあえず、<include path="/**.html" />を追加するとどうでしょうか?

WdWeaver

unread,
Oct 15, 2009, 3:36:05 AM10/15/09
to Google-App-Engine-Japan
あと1点だけ訂正です。

>※成功していれば、レスポンスコード200で却って来ても、
> アクセスがログに残らなくなるはずです。

これはRequests onlyでフィルタすればちゃんと見れますね。間違ってました。

On Oct 15, 4:31 pm, WdWeaver <kenta.wat...@gmail.com> wrote:
> 少し調査してみました。
>
> 1.デフォルトの動作として(static-filesを指定しない場合)、
>   WEB-INF以下以外でwar以下(jspを除く)のファイルはすべて静的ファイルとして扱うようになっています。
>
> 2.static-filesを指定する場合
> ・includeがひとつもなければデフォルト動作になります。
>   ★includeがひとつでもあるとデフォルト動作をオーバーライドするため、
>    includeを書く場合は静的ファイルとして扱いたいパターンは全てを記述しないといけません。
> ・excludeはincludeで書かれたパターンに対して適用されます。includeがひとつも
>    無い場合はデフォルト動作(すべてのファイル)に対してパターンが適用されます。
> 3.resource-filesの場合は2.の逆パターン
>
> ※ただし、http://appid.appspot.com/のように、welcome-file-listでアクセスさせるような

Shinichi Ogawa

unread,
Oct 15, 2009, 9:36:23 AM10/15/09
to google-app-...@googlegroups.com
shin1ogawaです。

css/**.*

だとどーでしょうか?

2009/10/15 melodeen <nu...@yan.ne.jp>:

melodeen

unread,
Oct 17, 2009, 7:50:48 AM10/17/09
to Google-App-Engine-Japan
<include path="/css/**" />
を指定して404にならずに問題なく表示されました。
何だったんでしょうか?

静的ファイルに指定してもRequests onlyに出るという事は、静的ファイルとして扱われているのはどうやって確認するのでしょうか?

On 10月15日, 午後10:36, Shinichi Ogawa <shin1og...@gmail.com> wrote:
> shin1ogawaです。
>
> css/**.*
>
> だとどーでしょうか?
>
> 2009/10/15 melodeen <n...@yan.ne.jp>:

melodeen

unread,
Oct 17, 2009, 9:09:05 AM10/17/09
to Google-App-Engine-Japan
静的ファイルとして扱われている事を確認しました。
下記のようにincludeタグにexpirationを指定すると、
ヘッダーのCache-controlのmax-ageの値がexpirationで指定した値になっている事で
静的ファイルとして扱われている事を確認できました。

<include path="/css/**" expiration="4d 5h" />
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages