sola's note -25ページ目

sola's note

日ごろのメモを書いていきます。何か新しいものを作るために。

ダラダラ調査。
結論は最後の5行くらい。
元気な人は最初から見て下さいw

Google App Engine for JavaでサーブレットとかJSPを扱う時のこと。
Webアプリケーションの動作確認と開発を並行して行うと
JSPの更新は上書きだけでも実行環境に即反映(ブラウザの再読み込みは必要)されるのだけど、


サーブレットはぜんっぜん反映されない。


正確に検証したわけではないけど、

されない。

何故か。
いや、もちろんブラウザの再読み込みだけでされるとは思ってない。

サーブレット更新後、Webアプリケーションを停止して実行しても

されない。

意味もなくプロジェクトをクリーンしても

されない。

しかたねーなって思いつつもEclipseを再起動してからWebアプリケーションを実行させると


される。


お~!!!

…じゃねーし!
それじゃ意味ないよGoogle先生。


これじゃ進まないって事で調べてみると、

何か説明しているページを発見。
趣旨は違うんだけど、補足で書いてある
(http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/usingusers.html)

ちょうどユーザーの使用って項目の、
ソースが書いてあるちょい下かな。

(以下引用)
Eclipse を使用し、開発サーバーをデバッガ内で実行している場合は、このファイルに変更を加えて保存すると、新しいコードが自動的にコンパイルされて実行中のサーバーに挿入されます。クラス、JSP、静的ファイル、および appengine-web.xml に加えた変更は、実行中のサーバーにすぐに反映されます。再起動は必要ありません。web.xml などの設定ファイルを変更した場合は、変更を反映するためにサーバーを停止して起動する必要があります。
(引用ここまで)

ん。


嘘でしょ?w

さらに調べると、似たような事例で
複数のサーバーが立ちあがってたりすると、動作がおかしくなる事もあるそう。

確認してみたけど

サーバ一つしか立ちあがってないよorz

でも待て。
よく考えてみたら、反映されてないの何だのを試したのは1週間くらい前。
そこから反映されていないのを見るのが嫌だったから


普通に毎回Eclipse再起動してたな。


ということで、Webアプリケーションの停止→実行で反映されるか試してみた。



まあ。



(反映)されたよねorz

結論。
JSPとかHTML
→保存してリロードすればWebアプリ実行中でも反映される。

サーブレットとかxml
→Webアプリ停止して実行すれば反映される。

って事でした。
HttpSessionが使えない

Google App Engineで開発をしていた時の事。
HttpSessionを使ってServletからJSPとかでセッションデータをやり取りしようとしたら


java.lang.RuntimeException: Session support is not enabled in appengine-web.xml.


あれれれれ、、、
HttpSession使えないのかな…?

とか思って調べてみたら、
appengine-web.xmlに

<sessions-enabled>true</sessions-enabled>

を追加すると使えるようになるみたい。
デフォルトではOFFなんだって。

そうそう。
GAEのWebページも少しずつ進んできていることだし、
久しぶりに本でも買うかーって思って、本を買ってきた。
自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング.../木下 誠
¥2,835
Amazon.co.jp

これは、以前紹介した本より
アクション(メソッド)やコードの概念について丁寧に書いてあった。

そんでもってプラスアルファ

Google App Engine 実践リファレンス/清野 克行
¥3,129
Amazon.co.jp

GAE!
ネットだとまだまだ情報が少ないので、
GAEで何ができるのか見てみようと思って買ってみた。

GAEで使える機能(認証とか、検索の方法とか)や、環境性能について書いてある。
技術的にはそこまで難しい内容じゃないけど、
何ができるのかわからないと始まらないからと思っての購入。

超ハマりかけた。
GAEでServletとJSPを連携させるプログラムを作ってた時のこと。

環境はEclipse
作成時にjspファイルに×マークがついていたものの、
特に赤いラインが入っていなかったからキャッシュの問題かと思ってスルー。

いざjspを表示させようとすると

致命的: Javac exception
Compile failed; see the compiler error output for details.

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません

生成されたサーブレットのエラーです:
(上記は一部抜粋)

コンパイルエラー?
エラーログもっと詳しく出てほしいなとか思いつつ、
オリジナルで作ったクラスのimportとかを削除。

んで、再度実行。

表示はされるようになったけど、


これじゃ意味ない…w


HTMLと一緒orz
ListとかJavaの標準ライブラリはimportできるのになんでなんだ。

あまりにもコンパイルエラーが頻発しまくったせいで


jspって標準ライブラリ以外コンパイルできなかったっけ?


とか思いそうになるほど。
色々調べてみた結果


EclipseのコンパイラがJREになっていることが問題だった模様


あーあーあーあーあーあーーーーーー
GAEの場合、JSPは事前にサーブレットにコンパイルされるらしい。
そこでJREでEclipseを動かしているとコンパイルがされないという。。。

対応としては、
Eclipseのウィンドウ設定を開いて、Javaのインストール済みJREを選択
ここでJREを指定していたら上と同じ状態にあたる。
実行環境しかないって状態。

これをJDKに変えることで無事JSPが動いた。
とりあえずひと段落。