GWT アプリの静的ファイルはどこに配置すればよいですか?war フォルダーまたはパブリック フォルダー?

StackOverflow https://stackoverflow.com/questions/1502166

質問

いくつかの JavaScript ファイル、メイン HTML ファイル、メイン CSS ファイル、およびメイン ファイルにインポートされるいくつかの CSS ファイルがあります。

静的ファイルを次の 2 つの場所に配置できることを理解しました。a) 「war」フォルダー。または b) 「パブリック」フォルダー。

静的ファイルを置くのに最適な場所はどこですか?2 つの場所は異なる扱いを受けますか?この問題に関する「ベストプラクティス」はありますか?

役に立ちましたか?

解決

2つの位置の間の違いは、パブリックフォルダ内のファイルは、「戦争」フォルダ内の "あなたのモジュールのフォルダにGWTコンパイラによってコピーされていることです。これは、あなたが「パブリック」フォルダからファイルがトップレベルではない(GoogleのAppEngineのためにGoogleのプラグインを介して、例えば)「戦争」を展開する場合の手段です。

たとえば、あなたが「のmymodule」という名前のGWTモジュールを搭載した「パブリック」フォルダ内のindex.htmlをを持っていて、www.example.comにそれを展開する場合、以下のように見える、あなたが経由でアクセスする必要があります。

www.example.com/mymodule/index.html

あなたが「戦争」フォルダ内のindex.htmlを持っている場合は、あなたが得る:

www.example.com/index.html

要約。リンク先ページは、「戦争」フォルダにある必要があります。ランディングページが使用するリソースファイルも(画像、CSS)ここに保存することができます。 (画像のような、又はコード)は、任意のGWTモジュールファイルで参照される他のリソースファイルがGWTモジュールに関連する「パブリック」フォルダに格納する必要があります。

他のヒント

GWTでの作業の新しい方法は、戦争のフォルダを使用することです。

しかし、あなたのプロジェクトは、GWTアプリケーションで使用されている再利用可能なウィジェットライブラリであるならば、あなたは、パブリックフォルダ内のリソースを置く必要があります。コンパイラは、ファイルが自動的に生成されたパッケージに含まれていることを確認します。

私の考えでは、それはあなたの要件によって異なりますが、まず話の例から始めましょう...

私はそれを見つけました ドキュメンテーション (GWT 2.6.0 である必要があります) これについては不正確か、少なくとも不完全/混乱を招きます。私の考えでは (私は専門家ではないので、私の調査が間違っている場合は修正してください。)私は以下を見ています プロジェクト構造の例

myproj/
  src/my/gwtproj/
     client/
       img/
         foo1.png
       AppClientBundle.java
       foo2.png
     public/
       img/
         foo3.png
       foo4.png
  war/
    img/foo5.png
    foo6.png
  .classpath
  .project

いくつかの分野でそのようなリソースを参照する必要があるかもしれない (または必要ないかもしれない) と想像してください。 AppClientBundle インターフェース (または他のアプリケーション参照コンテキスト):

interfaces AppClientBundle extends ClientBundle {

  @Source("img/foo1.png")
  ImageResource fooImg();
}

そうすると、どうやら 要件に応じて, 例:

  • R.a) これらのリソース (画像など) は、 アプリケーションコード内で参照される, 、例えば私たちの中で AppClientBundle インターフェース経由 @Source 注釈
  • R.b) これらのリソースは フォルダごとにグループ化, 、例えば foo2.pngimg/foo1.png
  • R.c) これらのリソースは、特定のアプリケーション URL コンテキスト パスの外側で利用できる必要があります。ウィジェット ライブラリとして使用される場合、例: http://host1/gwtapp1/foo4.pnghttp://host1/gwtapp2/foo4.png
  • R.d) これらのリソースはアプリケーションに依存しない必要があります (例:外部)URL 参照、例: http://host1/gwtapp1/foo4.pnghttp://host1/foo6.png

できることは次のとおりです (可能性)そしてそれは次のことへの影響です R.* その上:

  • P.1) (私が見た限りでは一般的に推奨されています) きれいに置きます フォルダー構造のリソース my.gwtproj.client (ここでは例えば foo1.png)
    • こちらです @Source("img/foo1.png")... 正常に動作します
    • 上記のドキュメントでは、いくつかについて話しています public フォルダ (私の場合 my.gwtproj.public)、しかし、Eclipseでパッケージとして作成することは許可されません( public は Java の予約キーワードです, ですが、それを介して作成します Navigator 作品を見る)
      • ただし、この方法では、 @Source 上記は機能しません(おそらく相対的な問題であるため) AppClientBundle ファイルシステムの場所)
      • それにもかかわらず、リソースをアプリケーションコンテキストで公開する必要がある場合は、これを介してそれを行う必要があるかもしれません public フォルダ
  • P.2) 置く 「グループ化されていない」リソースの直下 myproj/war, 、例えば projdir/war/foo6.png
    • このようにして、アノテーション内で使用/検索できます。 @Source
    • そしてそれは、例えば、アプリケーション自体の外部で参照できます。 http://host1/foo6.png
  • P.3) 置く フォルダー構造のリソース myproj/war, 、例えば projdir/war/img/foo5.png
    • P.2 とは対照的) @Source("img/foo5.png") もう機能しないだろう
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top