1

開発では、jetty をサーブレット コンテナーとして使用します。次の開発構成があります。

  • wabapp ディレクトリを持つマスター プロジェクト
  • webapp ディレクトリ内の一部のファイルをオーバーライドする派生プロジェクト

WebAppContextjettyに適切なものを提供することで、マスター プロジェクトの webapp を開発モードで開始できます。

ここで、派生プロジェクトを同様に開始したいと思います。リクエストが行われたときに次の試みがあると仮定します。

  • 派生プロジェクトの webapp ディレクトリからリソースを取得する
  • 存在しない場合は、マスター プロジェクトの webapp ディレクトリから取得します

メソッドをオーバーライドできることはわかっていますWebAppContext#getResource()が、プロジェクトで使用する一部のライブラリは、wabapp ディレクトリに対して独自に IO 操作を実行しているようです。たとえば、 を呼び出しServletContext#getRealPath("/")てから、メソッドを使用せずにファイルを読み取りますServletContext#getResource()。この問題は、上の仮想ファイル システムによって下位レベルで解決できますがFile、JDK 1.6 ではサポートされていないようです。何か提案はありますか?

4

1 に答える 1

1

次のようなものを使用するResourceCollectionだけで十分なようです。

http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/util/resource/ResourceCollection.html

残念ながら、私が使用している GWT の DevMode は、ResourceCollection が利用できない jetty 6 に基づいています。私は自分でクラスを拡張し、Resource独自の GWT とともに、リフレクションを介しJettyLauncherて設定する小さなトリックのおかげで、2 つのディレクトリから同時に webapp を提供することができました。resourceBaseDefaultServlet

protected void doStart() throws Exception {
    setClassLoader(new LauncherWebAppClassLoader());
    super.doStart();
    ServletHolder holder = getServletHandler().getServlet("default");
    Servlet servlet = holder.getServlet();
    Field field = servlet.getClass().getDeclaredField("_resourceBase");
    field.setAccessible(true);
    field.set(servlet, combinedResourceBase);
}
于 2011-03-21T17:05:46.453 に答える