2012-04-13 2 views
0

Google Web ToolkitとJava Google App Engineを使用してアプリケーションを作成しています。私は次のことが非常に予想通りに起こる状況を見つけました。私はこのようになります。そのため、サーブレットのapp.yamlのエントリがあります。GWT devmodeを使用すると、奇妙で​​はあるが予測可能なトリプルとインターリーブされたサーブレットの呼び出し

handlers: 

- url: /foo/* 
    name: FooServlet 
    servlet: com.waga.server.FooServlet 
    login: required 

をユーザーが(冗長、私は知っている)でログインしていることをこのサーブレットをチェックし、データベース内のユーザーを検索し、見つかった場合は含まれてGWTモジュールをロードするためのjavascriptを含むHTMLページをレンダリングするBar.jspファイル。このBar.jspファイルとGWTモジュールはしばらく働いていますが、サーブレットがBar.jspをレンダリングする前にチェックを行い、Bar.jspファイルの先頭にいくつかのコードを追加してページに含める文字列をいくつか計算します。

私はBar.jspファイルの先頭に、サーブレットの上部にlog.infoを入れ、Bar.jspファイルの一番下にあります。私は、サーブレットに行くためにGWTのDEVMODEを使用すると、私は次の順序でログmesssagesを参照してください。

ある
Foo servlet top 
Bar.jsp top 
Bar.jsp bottom 
Foo servlet top 
Foo servlet top 
Bar.jsp top 
Bar.jsp bottom 
Bar.jsp top 
Bar.jsp bottom 

、サーブレットは(ノート同期していないブラウザで3回訪問しているしているようだ、とその最後の2つは重複します)。これは私がそれを実行するたびに発生します。

さらに、Bar.jspファイルは、それがページをレンダリングしていると言いますが、GWTのJavaScriptを決して負荷とクライアント側のアプリケーションをレンダリングします。それは過去にはうまくいくはずです。つまり、GWTのクライアント側コードが機能していたため、urlがサーブレットにどのようにマップされているか、サーブレットに.jspファイルがどのように含まれているかを並べ替えています。さらに、devmodeがクライアントに送信する前にJavaをサーバー上のJavaScriptにコンパイルすると、ラップトップのファンが来て、これを行うために私のCPUのほとんどを私のCPUの大部分を使って見ることができます。私は今それを見ない。

私はサーブレットを取り除き、app.yamlに.jspを直接呼び出すことを試みました(サーブレットは、私が既にログインしていることを知っているので、何もしません)。私はapp.yamlをを作ってみました、であるが、これを言う:

handlers: 

- url: /foo/* 
    jsp: Bar.jsp 
    login: required 

今ログはGWTモジュールがロードされているように見えることはありません。この

Bar.jsp top 
Bar.jsp botton 
Bar.jsp top 
Bar.jsp top 
Bar.jsp bottom 
Bar.jsp bottom 

同じインターリーブと同じ症状は述べています。

答えて

0

私はBar.jspファイルの先頭にrequest.getPathInfo()をプリントアウトしたときに、この状況がより明確になります。問題は、プロジェクトを開始したときにGWT webAppCreatorが合理的なコードを生成することを信頼し、URLパスについて注意深く考えなかったことです。

<!--           --> 
<!-- This script loads your compiled module. --> 
<!-- If you add any GWT meta tags, they must --> 
<!-- be added before this line.    --> 
<!--           --> 
<script type="text/javascript" language="javascript" src="waga/waga.nocache.js"></script> 

注意をSRCのURLで、代わりに絶対パスの相対パスは:特に、webAppCreatorは、次のようにWebページからコンパイルされたJavaScriptクライアントを参照するHTMLを生成します。私の意見では絶対パスを生成する方が、ファイルシステム内でターゲットを誤って移動させないようにするために、もっと意味があります。例えば、接頭辞付きのURLをこの.jspファイルにマップします。特に生成されたjavascriptクライアントへのパスは、コンパイラが常にファイルシステムの特定の場所に配置するため、相対パスとしては意味がありません。スラッシュを前に付けることによって、絶対パス(絶対に私が使用した.cssファイルへの別の相対パス)を作成して問題を解決しました。

関連する問題