GAE/J slim3 (とscenic3) で .html を静的ファイルじゃなくてリソースとして扱う
最近わたしは appengineといえば slim3 (とscenic3) がデフォルトになってます。
とある事情で、
appengine (for java)パスが/hogehoge/ではじまる場合だけ、拡張子が.htmlなURLをstatic fileでなくresourceとして扱いたい、という事がありました。
appengine-web.xmlを
<static-files>
<include path="**.html" />
<exclude path="/hogehoge/**.html" />
</static-files>
こんな風に書いてみましたがうまくいきません。
slim3 を使っている場合、これではダメの様です。
Slim3では拡張子付きのURLは動的リクエストとして扱いません。
したがって、AppRouterでisStaticをオーバーライドする必要があります。
public class AppRouter extends RouterImpl {
@Override
public boolean isStatic(String path) throws NullPointerException {
return false;
}
}
ここでは全てのリクエストをstaticとして扱っています。
Scenic3の設定でまとめて静的ファイルのパスを設定する、もしくはAppRouterで適切に静的ファイルを判定してください。
順序としては、先にAppRouterのisStaticで判定され、その後にScenic3のAppUrlsで判定されます。
Slim3 に Scenic3 と PirkaEngineを使う方法 - やさしいデスマーチ
参考サイトの例では全てのリクエストをstaticとして扱っています。
/hogehoge/はリソース固定、それ以外はよきに計らうと言う意味で、こんな感じですかね。
public class AppRouter extends RouterImpl {
@Override
public boolean isStatic(String path) throws NullPointerException {
if (path == null) {
throw new NullPointerException("The path parameter is null.");
}
if (path.startsWith("/hogehoge/")) {
return false;
} else {
return super.isStatic(path);
}
}
}
これで想定どおりになりました。