Google App Engine for Java (GAE/J) で、静的ファイル ( html、css、js ) を扱おうとして、
WARNING: Can not serve /hoge/hoge.nocache.js directly. You need to include it in in your appengine-web.xml.
てな感じで怒られる。
appengine-web.xml の書き方が間違っているらしい。
<static-files>
<include path="/**.html" />
<include path="/**.css" />
<include path="/**.js" />
</static-files>
こう書いてたけど、これではルート直下のんしか駄目らしい。
ルート以下の任意のサブディレクトリの下にも適用するには、
<static-files>
<include path="**.html" />
<include path="**.css" />
<include path="**.js" />
</static-files>
こっちが正解らしい。
Google App Engine for Java (GAE/J) で、まずはHTMLファイルをデプロイだ!
つまづいた事 その1
GAE/J での開発は、eclipseのプラグインで始めてます。
まず eclipse に慣れてないもんで、素のHTMLファイルってどう扱うかでつまづいた。
JSPとかjavaとかは、workspaceのディレクトリに直接作って編集したりしているもんだから、そのノリでHTML作っても、Javaパースペクティブのパッケージ・エクスプローラに出現しない。
よく判らないけど、eclipse のパッケージ・エクスプローラ上で右クリック – [新規] – [ファイル] でもって、HTMLを作成したら、ちゃんとパッケージ・エクスプローラにも表示されました。
つまづいた事 その2
Google Codeを読んだ。
warフォルダ直下にhtdocsディレクトリを作成し、その中にHTMLファイルを作成した。
HTMLを静的ファイルとして明示的に扱う様に、web.xmlを編集した。
<static-files>
<include path="/htdocs/**.html" />
</static-files>
良く読んでから気づいたけど、web.xml じゃなくって appengine-web.xml だった。
先入観でやったら駄目ですね。
JDK 1.4時代の古いJavaアプリケーションをeclipse(Ganymede)に持ってくると、
ArrayList は raw 型です。 総称型 ArrayList への参照は、パラメーター化する必要があります
的な警告が、それはそれはものすごく沢山でた。
JDK5以降は、ジェネリクス(総称型)でコンパイル時に型をチェック出来るので、キャスト地獄から開放されるわけだけど、
あまりに量が多くて対応してらんない。
仕方ないから、警告が出ない様にしました。
[ウィンドウ]→[設定]→[Java]→[コンパイラー]→[エラー/警告]→[総称型]→[raw型の使用]
を
[無視]に変更
eclipse(Ganymede)で、
シリアライズ可能クラス Hoge は long 型の static final serialVersionUID フィールドを宣言していません
と怒られた。
クラス Hoge は implements Serializable なクラス。
こんな感じでユニークかつテキトーな値を定義すればよい。
private static final long serialVersionUID = 1234551229936403487L;
eclipseでは、警告をダブルクリックしてソースを開いて、Ctrl+1を押下し、「生成シリアル・バージョンIDの追加」を選択すると、よきにはからってくれる。
eclipseって便利だなー。
java5から、for文が拡張されている。
恥かしながら、最近まで Iterator 使いまくりだった。
List list = dao.findSomethingList();
for (Iterator i = list.iterator(); i.hasNext();) {
Something some = (Something) i.next();
some.doSomething();
}
なんて書いていたのんが、
List<Something> list = dao.findSomethingList();
for (Something some : list) {
some.doSomething();
}
ちょっとスッキリするし、可読性が高くなるっす。
参考サイト
【連載 】JDK5を活用する第3回:拡張forループ