GWT アプリの静的ファイルはどこに配置すればよいですか?war フォルダーまたはパブリック フォルダー?
-
19-09-2019 - |
質問
いくつかの 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.png
対img/foo1.png
- R.c) これらのリソースは、特定のアプリケーション URL コンテキスト パスの外側で利用できる必要があります。ウィジェット ライブラリとして使用される場合、例:
http://host1/gwtapp1/foo4.png
対http://host1/gwtapp2/foo4.png
- R.d) これらのリソースはアプリケーションに依存しない必要があります (例:外部)URL 参照、例:
http://host1/gwtapp1/foo4.png
対http://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")
もう機能しないだろう
- P.2 とは対照的)